diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index 6662deb..accc9f0 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -199,12 +199,13 @@
         type.clone(newTypes, contextLibrary, contextDeclaration), name);
   }
 
-  FormalParameterBuilder forPrimaryConstructor() {
+  FormalParameterBuilder forPrimaryConstructor(
+      SourceLibraryBuilder sourceLibraryBuilder) {
     return new FormalParameterBuilder(
         metadata,
         kind,
         modifiers | initializingFormalMask,
-        const ImplicitTypeBuilder(),
+        sourceLibraryBuilder.addInferableType(),
         name,
         null,
         charOffset,
diff --git a/pkg/front_end/lib/src/fasta/builder/omitted_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/omitted_type_builder.dart
index bb0ea74..3a0a7d0 100644
--- a/pkg/front_end/lib/src/fasta/builder/omitted_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/omitted_type_builder.dart
@@ -60,6 +60,13 @@
   DartType get type;
 }
 
+/// [TypeBuilder] for when there is no explicit type provided by the user and
+/// the type _cannot_ be inferred from context.
+///
+/// For omitted return types and parameter types of instance method,
+/// field types and initializing formal types, use [InferableTypeBuilder]
+/// instead. This should be created through
+/// [SourceLibraryBuilder.addInferableType] to ensure the type is inferred.
 class ImplicitTypeBuilder extends OmittedTypeBuilder {
   const ImplicitTypeBuilder();
 
@@ -89,6 +96,12 @@
   DartType get type => const DynamicType();
 }
 
+/// [TypeBuilder] for when there is no explicit type provided by the user but
+/// the type _can_ be inferred from context. For instance omitted return types
+/// and parameter types of instance method,
+///
+/// [InferableTypeBuilder] should be created through
+/// [SourceLibraryBuilder.addInferableType] to ensure the type is inferred.
 class InferableTypeBuilder extends OmittedTypeBuilder
     with InferableTypeBuilderMixin
     implements InferableType {
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 4db3a62..ef444e8 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -1631,7 +1631,7 @@
             type: formal.type,
             name: formal.name,
             charOffset: formal.charOffset);
-        formals[i] = formal.forPrimaryConstructor();
+        formals[i] = formal.forPrimaryConstructor(libraryBuilder);
       }
     }
 
diff --git a/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.strong.expect
index f9393d5..f258479 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.strong.expect
@@ -28,17 +28,17 @@
   constructor • = self::F|;
   tearoff • = self::F|_#new#tearOff;
 }
-static inline-class-member method E|(dynamic it) → self::E /* = self::B */ {
+static inline-class-member method E|(self::B it) → self::E /* = self::B */ {
   lowered final self::E /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|_#new#tearOff(self::B it) → self::E /* = self::B */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = self::B */ {
+static inline-class-member method F|(self::B it) → self::F /* = self::B */ {
   lowered final self::F /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|_#new#tearOff(self::B it) → self::F /* = self::B */
   return self::F|(it);
 static method main() → dynamic {
   self::B b = new self::B::•();
diff --git a/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.strong.transformed.expect
index f9393d5..f258479 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.strong.transformed.expect
@@ -28,17 +28,17 @@
   constructor • = self::F|;
   tearoff • = self::F|_#new#tearOff;
 }
-static inline-class-member method E|(dynamic it) → self::E /* = self::B */ {
+static inline-class-member method E|(self::B it) → self::E /* = self::B */ {
   lowered final self::E /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|_#new#tearOff(self::B it) → self::E /* = self::B */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = self::B */ {
+static inline-class-member method F|(self::B it) → self::F /* = self::B */ {
   lowered final self::F /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|_#new#tearOff(self::B it) → self::F /* = self::B */
   return self::F|(it);
 static method main() → dynamic {
   self::B b = new self::B::•();
diff --git a/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.expect
index f9393d5..f258479 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.expect
@@ -28,17 +28,17 @@
   constructor • = self::F|;
   tearoff • = self::F|_#new#tearOff;
 }
-static inline-class-member method E|(dynamic it) → self::E /* = self::B */ {
+static inline-class-member method E|(self::B it) → self::E /* = self::B */ {
   lowered final self::E /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|_#new#tearOff(self::B it) → self::E /* = self::B */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = self::B */ {
+static inline-class-member method F|(self::B it) → self::F /* = self::B */ {
   lowered final self::F /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|_#new#tearOff(self::B it) → self::F /* = self::B */
   return self::F|(it);
 static method main() → dynamic {
   self::B b = new self::B::•();
diff --git a/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.modular.expect
index f9393d5..f258479 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.modular.expect
@@ -28,17 +28,17 @@
   constructor • = self::F|;
   tearoff • = self::F|_#new#tearOff;
 }
-static inline-class-member method E|(dynamic it) → self::E /* = self::B */ {
+static inline-class-member method E|(self::B it) → self::E /* = self::B */ {
   lowered final self::E /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|_#new#tearOff(self::B it) → self::E /* = self::B */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = self::B */ {
+static inline-class-member method F|(self::B it) → self::F /* = self::B */ {
   lowered final self::F /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|_#new#tearOff(self::B it) → self::F /* = self::B */
   return self::F|(it);
 static method main() → dynamic {
   self::B b = new self::B::•();
diff --git a/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.outline.expect
index e207433..88b93d2 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.outline.expect
@@ -25,13 +25,13 @@
   constructor • = self::F|;
   tearoff • = self::F|_#new#tearOff;
 }
-static inline-class-member method E|(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|(self::B it) → self::E /* = self::B */
   ;
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|_#new#tearOff(self::B it) → self::E /* = self::B */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|(self::B it) → self::F /* = self::B */
   ;
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|_#new#tearOff(self::B it) → self::F /* = self::B */
   return self::F|(it);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.transformed.expect
index f9393d5..f258479 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/access_non_extension_type_members.dart.weak.transformed.expect
@@ -28,17 +28,17 @@
   constructor • = self::F|;
   tearoff • = self::F|_#new#tearOff;
 }
-static inline-class-member method E|(dynamic it) → self::E /* = self::B */ {
+static inline-class-member method E|(self::B it) → self::E /* = self::B */ {
   lowered final self::E /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|_#new#tearOff(self::B it) → self::E /* = self::B */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = self::B */ {
+static inline-class-member method F|(self::B it) → self::F /* = self::B */ {
   lowered final self::F /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|_#new#tearOff(self::B it) → self::F /* = self::B */
   return self::F|(it);
 static method main() → dynamic {
   self::B b = new self::B::•();
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.expect
index dbafacc..921e5d1 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.expect
@@ -11,11 +11,11 @@
   constructor constructor = self::A|constructor;
   tearoff constructor = self::A|_#constructor#tearOff;
 }
-static inline-class-member method A|(@#C2 dynamic i) → self::A /* = core::int */ {
+static inline-class-member method A|(@#C2 core::int i) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic i) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int i) → self::A /* = core::int */
   return self::A|(i);
 @#C2
 static inline-class-member method A|constructor(core::int i) → self::A /* = core::int */ {
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.transformed.expect
index dbafacc..921e5d1 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.strong.transformed.expect
@@ -11,11 +11,11 @@
   constructor constructor = self::A|constructor;
   tearoff constructor = self::A|_#constructor#tearOff;
 }
-static inline-class-member method A|(@#C2 dynamic i) → self::A /* = core::int */ {
+static inline-class-member method A|(@#C2 core::int i) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic i) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int i) → self::A /* = core::int */
   return self::A|(i);
 @#C2
 static inline-class-member method A|constructor(core::int i) → self::A /* = core::int */ {
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.expect
index dbafacc..921e5d1 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.expect
@@ -11,11 +11,11 @@
   constructor constructor = self::A|constructor;
   tearoff constructor = self::A|_#constructor#tearOff;
 }
-static inline-class-member method A|(@#C2 dynamic i) → self::A /* = core::int */ {
+static inline-class-member method A|(@#C2 core::int i) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic i) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int i) → self::A /* = core::int */
   return self::A|(i);
 @#C2
 static inline-class-member method A|constructor(core::int i) → self::A /* = core::int */ {
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.modular.expect
index dbafacc..921e5d1 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.modular.expect
@@ -11,11 +11,11 @@
   constructor constructor = self::A|constructor;
   tearoff constructor = self::A|_#constructor#tearOff;
 }
-static inline-class-member method A|(@#C2 dynamic i) → self::A /* = core::int */ {
+static inline-class-member method A|(@#C2 core::int i) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic i) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int i) → self::A /* = core::int */
   return self::A|(i);
 @#C2
 static inline-class-member method A|constructor(core::int i) → self::A /* = core::int */ {
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.outline.expect
index 62227a3..a26b1c4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.outline.expect
@@ -11,9 +11,9 @@
   constructor constructor = self::A|constructor;
   tearoff constructor = self::A|_#constructor#tearOff;
 }
-static inline-class-member method A|(dynamic i) → self::A /* = core::int */
+static inline-class-member method A|(core::int i) → self::A /* = core::int */
   ;
-static inline-class-member method A|_#new#tearOff(dynamic i) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int i) → self::A /* = core::int */
   return self::A|(i);
 @core::Deprecated::•("")
 static inline-class-member method A|constructor(core::int i) → self::A /* = core::int */
diff --git a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.transformed.expect
index dbafacc..921e5d1 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/annotations.dart.weak.transformed.expect
@@ -11,11 +11,11 @@
   constructor constructor = self::A|constructor;
   tearoff constructor = self::A|_#constructor#tearOff;
 }
-static inline-class-member method A|(@#C2 dynamic i) → self::A /* = core::int */ {
+static inline-class-member method A|(@#C2 core::int i) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic i) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int i) → self::A /* = core::int */
   return self::A|(i);
 @#C2
 static inline-class-member method A|constructor(core::int i) → self::A /* = core::int */ {
diff --git a/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.strong.expect
index 513e186..5c21a68 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.strong.expect
@@ -314,35 +314,35 @@
   constructor • = self::G|;
   tearoff • = self::G|_#new#tearOff;
 }
-static inline-class-member method C|(dynamic o) → self::C /* = core::Object? */ {
+static inline-class-member method C|(core::Object? o) → self::C /* = core::Object? */ {
   lowered final self::C /* = core::Object? */ #this = o;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff(dynamic o) → self::C /* = core::Object? */
+static inline-class-member method C|_#new#tearOff(core::Object? o) → self::C /* = core::Object? */
   return self::C|(o);
-static inline-class-member method D|(dynamic o) → self::D /* = core::Object */ {
+static inline-class-member method D|(core::Object o) → self::D /* = core::Object */ {
   lowered final self::D /* = core::Object */ #this = o;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic o) → self::D /* = core::Object */
+static inline-class-member method D|_#new#tearOff(core::Object o) → self::D /* = core::Object */
   return self::D|(o);
-static inline-class-member method E|(dynamic it) → self::E /* = self::B */ {
+static inline-class-member method E|(self::B it) → self::E /* = self::B */ {
   lowered final self::E /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|_#new#tearOff(self::B it) → self::E /* = self::B */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = self::B */ {
+static inline-class-member method F|(self::B it) → self::F /* = self::B */ {
   lowered final self::F /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|_#new#tearOff(self::B it) → self::F /* = self::B */
   return self::F|(it);
-static inline-class-member method G|<T extends core::Object? = dynamic>(dynamic o) → self::G<self::G|::T%> /* = self::G|::T% */ {
+static inline-class-member method G|<T extends core::Object? = dynamic>(self::G|::T% o) → self::G<self::G|::T%> /* = self::G|::T% */ {
   lowered final self::G<self::G|::T%> /* = self::G|::T% */ #this = o;
   return #this;
 }
-static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(dynamic o) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T% */
+static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(self::G|_#new#tearOff::T% o) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T% */
   return self::G|<self::G|_#new#tearOff::T%>(o);
 static method test<T1 extends core::Object? = dynamic, T2 extends self::A>(core::Object o, self::A a, self::B b, self::C /* = core::Object? */ c, self::D /* = core::Object */ d, self::E /* = self::B */ e, self::F /* = self::B */ f, self::G<self::test::T1%> /* = self::test::T1% */ g1, self::G<self::test::T2> /* = self::test::T2 */ g2) → dynamic {
   o = o;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.strong.transformed.expect
index 6a316a4..1966422 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.strong.transformed.expect
@@ -314,35 +314,35 @@
   constructor • = self::G|;
   tearoff • = self::G|_#new#tearOff;
 }
-static inline-class-member method C|(dynamic o) → self::C /* = core::Object? */ {
+static inline-class-member method C|(core::Object? o) → self::C /* = core::Object? */ {
   lowered final self::C /* = core::Object? */ #this = o;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff(dynamic o) → self::C /* = core::Object? */
+static inline-class-member method C|_#new#tearOff(core::Object? o) → self::C /* = core::Object? */
   return self::C|(o);
-static inline-class-member method D|(dynamic o) → self::D /* = core::Object */ {
+static inline-class-member method D|(core::Object o) → self::D /* = core::Object */ {
   lowered final self::D /* = core::Object */ #this = o;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic o) → self::D /* = core::Object */
+static inline-class-member method D|_#new#tearOff(core::Object o) → self::D /* = core::Object */
   return self::D|(o);
-static inline-class-member method E|(dynamic it) → self::E /* = self::B */ {
+static inline-class-member method E|(self::B it) → self::E /* = self::B */ {
   lowered final self::E /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|_#new#tearOff(self::B it) → self::E /* = self::B */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = self::B */ {
+static inline-class-member method F|(self::B it) → self::F /* = self::B */ {
   lowered final self::F /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|_#new#tearOff(self::B it) → self::F /* = self::B */
   return self::F|(it);
-static inline-class-member method G|<T extends core::Object? = dynamic>(dynamic o) → self::G<self::G|::T%> /* = self::G|::T% */ {
+static inline-class-member method G|<T extends core::Object? = dynamic>(self::G|::T% o) → self::G<self::G|::T%> /* = self::G|::T% */ {
   lowered final self::G<self::G|::T%> /* = self::G|::T% */ #this = o;
   return #this;
 }
-static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(dynamic o) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T% */
+static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(self::G|_#new#tearOff::T% o) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T% */
   return self::G|<self::G|_#new#tearOff::T%>(o);
 static method test<T1 extends core::Object? = dynamic, T2 extends self::A>(core::Object o, self::A a, self::B b, self::C /* = core::Object? */ c, self::D /* = core::Object */ d, self::E /* = self::B */ e, self::F /* = self::B */ f, self::G<self::test::T1%> /* = self::test::T1% */ g1, self::G<self::test::T2> /* = self::test::T2 */ g2) → dynamic {
   o = o;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.expect
index 513e186..5c21a68 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.expect
@@ -314,35 +314,35 @@
   constructor • = self::G|;
   tearoff • = self::G|_#new#tearOff;
 }
-static inline-class-member method C|(dynamic o) → self::C /* = core::Object? */ {
+static inline-class-member method C|(core::Object? o) → self::C /* = core::Object? */ {
   lowered final self::C /* = core::Object? */ #this = o;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff(dynamic o) → self::C /* = core::Object? */
+static inline-class-member method C|_#new#tearOff(core::Object? o) → self::C /* = core::Object? */
   return self::C|(o);
-static inline-class-member method D|(dynamic o) → self::D /* = core::Object */ {
+static inline-class-member method D|(core::Object o) → self::D /* = core::Object */ {
   lowered final self::D /* = core::Object */ #this = o;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic o) → self::D /* = core::Object */
+static inline-class-member method D|_#new#tearOff(core::Object o) → self::D /* = core::Object */
   return self::D|(o);
-static inline-class-member method E|(dynamic it) → self::E /* = self::B */ {
+static inline-class-member method E|(self::B it) → self::E /* = self::B */ {
   lowered final self::E /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|_#new#tearOff(self::B it) → self::E /* = self::B */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = self::B */ {
+static inline-class-member method F|(self::B it) → self::F /* = self::B */ {
   lowered final self::F /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|_#new#tearOff(self::B it) → self::F /* = self::B */
   return self::F|(it);
-static inline-class-member method G|<T extends core::Object? = dynamic>(dynamic o) → self::G<self::G|::T%> /* = self::G|::T% */ {
+static inline-class-member method G|<T extends core::Object? = dynamic>(self::G|::T% o) → self::G<self::G|::T%> /* = self::G|::T% */ {
   lowered final self::G<self::G|::T%> /* = self::G|::T% */ #this = o;
   return #this;
 }
-static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(dynamic o) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T% */
+static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(self::G|_#new#tearOff::T% o) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T% */
   return self::G|<self::G|_#new#tearOff::T%>(o);
 static method test<T1 extends core::Object? = dynamic, T2 extends self::A>(core::Object o, self::A a, self::B b, self::C /* = core::Object? */ c, self::D /* = core::Object */ d, self::E /* = self::B */ e, self::F /* = self::B */ f, self::G<self::test::T1%> /* = self::test::T1% */ g1, self::G<self::test::T2> /* = self::test::T2 */ g2) → dynamic {
   o = o;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.modular.expect
index 513e186..5c21a68 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.modular.expect
@@ -314,35 +314,35 @@
   constructor • = self::G|;
   tearoff • = self::G|_#new#tearOff;
 }
-static inline-class-member method C|(dynamic o) → self::C /* = core::Object? */ {
+static inline-class-member method C|(core::Object? o) → self::C /* = core::Object? */ {
   lowered final self::C /* = core::Object? */ #this = o;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff(dynamic o) → self::C /* = core::Object? */
+static inline-class-member method C|_#new#tearOff(core::Object? o) → self::C /* = core::Object? */
   return self::C|(o);
-static inline-class-member method D|(dynamic o) → self::D /* = core::Object */ {
+static inline-class-member method D|(core::Object o) → self::D /* = core::Object */ {
   lowered final self::D /* = core::Object */ #this = o;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic o) → self::D /* = core::Object */
+static inline-class-member method D|_#new#tearOff(core::Object o) → self::D /* = core::Object */
   return self::D|(o);
-static inline-class-member method E|(dynamic it) → self::E /* = self::B */ {
+static inline-class-member method E|(self::B it) → self::E /* = self::B */ {
   lowered final self::E /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|_#new#tearOff(self::B it) → self::E /* = self::B */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = self::B */ {
+static inline-class-member method F|(self::B it) → self::F /* = self::B */ {
   lowered final self::F /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|_#new#tearOff(self::B it) → self::F /* = self::B */
   return self::F|(it);
-static inline-class-member method G|<T extends core::Object? = dynamic>(dynamic o) → self::G<self::G|::T%> /* = self::G|::T% */ {
+static inline-class-member method G|<T extends core::Object? = dynamic>(self::G|::T% o) → self::G<self::G|::T%> /* = self::G|::T% */ {
   lowered final self::G<self::G|::T%> /* = self::G|::T% */ #this = o;
   return #this;
 }
-static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(dynamic o) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T% */
+static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(self::G|_#new#tearOff::T% o) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T% */
   return self::G|<self::G|_#new#tearOff::T%>(o);
 static method test<T1 extends core::Object? = dynamic, T2 extends self::A>(core::Object o, self::A a, self::B b, self::C /* = core::Object? */ c, self::D /* = core::Object */ d, self::E /* = self::B */ e, self::F /* = self::B */ f, self::G<self::test::T1%> /* = self::test::T1% */ g1, self::G<self::test::T2> /* = self::test::T2 */ g2) → dynamic {
   o = o;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.outline.expect
index a9d9d57..d2ca39e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.outline.expect
@@ -30,25 +30,25 @@
   constructor • = self::G|;
   tearoff • = self::G|_#new#tearOff;
 }
-static inline-class-member method C|(dynamic o) → self::C /* = core::Object? */
+static inline-class-member method C|(core::Object? o) → self::C /* = core::Object? */
   ;
-static inline-class-member method C|_#new#tearOff(dynamic o) → self::C /* = core::Object? */
+static inline-class-member method C|_#new#tearOff(core::Object? o) → self::C /* = core::Object? */
   return self::C|(o);
-static inline-class-member method D|(dynamic o) → self::D /* = core::Object */
+static inline-class-member method D|(core::Object o) → self::D /* = core::Object */
   ;
-static inline-class-member method D|_#new#tearOff(dynamic o) → self::D /* = core::Object */
+static inline-class-member method D|_#new#tearOff(core::Object o) → self::D /* = core::Object */
   return self::D|(o);
-static inline-class-member method E|(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|(self::B it) → self::E /* = self::B */
   ;
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|_#new#tearOff(self::B it) → self::E /* = self::B */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|(self::B it) → self::F /* = self::B */
   ;
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|_#new#tearOff(self::B it) → self::F /* = self::B */
   return self::F|(it);
-static inline-class-member method G|<T extends core::Object? = dynamic>(dynamic o) → self::G<self::G|::T%> /* = self::G|::T% */
+static inline-class-member method G|<T extends core::Object? = dynamic>(self::G|::T% o) → self::G<self::G|::T%> /* = self::G|::T% */
   ;
-static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(dynamic o) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T% */
+static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(self::G|_#new#tearOff::T% o) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T% */
   return self::G|<self::G|_#new#tearOff::T%>(o);
 static method test<T1 extends core::Object? = dynamic, T2 extends self::A>(core::Object o, self::A a, self::B b, self::C /* = core::Object? */ c, self::D /* = core::Object */ d, self::E /* = self::B */ e, self::F /* = self::B */ f, self::G<self::test::T1%> /* = self::test::T1% */ g1, self::G<self::test::T2> /* = self::test::T2 */ g2) → dynamic
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.transformed.expect
index c45d4f9..c6b6d6c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/assign_interface_type.dart.weak.transformed.expect
@@ -314,35 +314,35 @@
   constructor • = self::G|;
   tearoff • = self::G|_#new#tearOff;
 }
-static inline-class-member method C|(dynamic o) → self::C /* = core::Object? */ {
+static inline-class-member method C|(core::Object? o) → self::C /* = core::Object? */ {
   lowered final self::C /* = core::Object? */ #this = o;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff(dynamic o) → self::C /* = core::Object? */
+static inline-class-member method C|_#new#tearOff(core::Object? o) → self::C /* = core::Object? */
   return self::C|(o);
-static inline-class-member method D|(dynamic o) → self::D /* = core::Object */ {
+static inline-class-member method D|(core::Object o) → self::D /* = core::Object */ {
   lowered final self::D /* = core::Object */ #this = o;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic o) → self::D /* = core::Object */
+static inline-class-member method D|_#new#tearOff(core::Object o) → self::D /* = core::Object */
   return self::D|(o);
-static inline-class-member method E|(dynamic it) → self::E /* = self::B */ {
+static inline-class-member method E|(self::B it) → self::E /* = self::B */ {
   lowered final self::E /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::B */
+static inline-class-member method E|_#new#tearOff(self::B it) → self::E /* = self::B */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = self::B */ {
+static inline-class-member method F|(self::B it) → self::F /* = self::B */ {
   lowered final self::F /* = self::B */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = self::B */
+static inline-class-member method F|_#new#tearOff(self::B it) → self::F /* = self::B */
   return self::F|(it);
-static inline-class-member method G|<T extends core::Object? = dynamic>(dynamic o) → self::G<self::G|::T%> /* = self::G|::T% */ {
+static inline-class-member method G|<T extends core::Object? = dynamic>(self::G|::T% o) → self::G<self::G|::T%> /* = self::G|::T% */ {
   lowered final self::G<self::G|::T%> /* = self::G|::T% */ #this = o;
   return #this;
 }
-static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(dynamic o) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T% */
+static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(self::G|_#new#tearOff::T% o) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T% */
   return self::G|<self::G|_#new#tearOff::T%>(o);
 static method test<T1 extends core::Object? = dynamic, T2 extends self::A>(core::Object o, self::A a, self::B b, self::C /* = core::Object? */ c, self::D /* = core::Object */ d, self::E /* = self::B */ e, self::F /* = self::B */ f, self::G<self::test::T1%> /* = self::test::T1% */ g1, self::G<self::test::T2> /* = self::test::T2 */ g2) → dynamic {
   o = o;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.expect
index 362c8de..677cd17 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.expect
@@ -32,11 +32,11 @@
   static redirecting-factory redirect2 = self::Class|redirect2;
   static tearoff redirect2 = self::Class|_#redirect2#tearOff;
 }
-static inline-class-member method Class|(dynamic i) → self::Class /* = core::int */ {
+static inline-class-member method Class|(core::int i) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method Class|_#new#tearOff(dynamic i) → self::Class /* = core::int */
+static inline-class-member method Class|_#new#tearOff(core::int i) → self::Class /* = core::int */
   return self::Class|(i);
 static inline-class-member method Class|named(core::int i) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = i;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.transformed.expect
index 362c8de..677cd17 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.strong.transformed.expect
@@ -32,11 +32,11 @@
   static redirecting-factory redirect2 = self::Class|redirect2;
   static tearoff redirect2 = self::Class|_#redirect2#tearOff;
 }
-static inline-class-member method Class|(dynamic i) → self::Class /* = core::int */ {
+static inline-class-member method Class|(core::int i) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method Class|_#new#tearOff(dynamic i) → self::Class /* = core::int */
+static inline-class-member method Class|_#new#tearOff(core::int i) → self::Class /* = core::int */
   return self::Class|(i);
 static inline-class-member method Class|named(core::int i) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = i;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.expect
index 362c8de..677cd17 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.expect
@@ -32,11 +32,11 @@
   static redirecting-factory redirect2 = self::Class|redirect2;
   static tearoff redirect2 = self::Class|_#redirect2#tearOff;
 }
-static inline-class-member method Class|(dynamic i) → self::Class /* = core::int */ {
+static inline-class-member method Class|(core::int i) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method Class|_#new#tearOff(dynamic i) → self::Class /* = core::int */
+static inline-class-member method Class|_#new#tearOff(core::int i) → self::Class /* = core::int */
   return self::Class|(i);
 static inline-class-member method Class|named(core::int i) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = i;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.modular.expect
index 362c8de..677cd17 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.modular.expect
@@ -32,11 +32,11 @@
   static redirecting-factory redirect2 = self::Class|redirect2;
   static tearoff redirect2 = self::Class|_#redirect2#tearOff;
 }
-static inline-class-member method Class|(dynamic i) → self::Class /* = core::int */ {
+static inline-class-member method Class|(core::int i) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method Class|_#new#tearOff(dynamic i) → self::Class /* = core::int */
+static inline-class-member method Class|_#new#tearOff(core::int i) → self::Class /* = core::int */
   return self::Class|(i);
 static inline-class-member method Class|named(core::int i) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = i;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.outline.expect
index f968410..68786b1 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.outline.expect
@@ -14,9 +14,9 @@
   static redirecting-factory redirect2 = self::Class|redirect2;
   static tearoff redirect2 = self::Class|_#redirect2#tearOff;
 }
-static inline-class-member method Class|(dynamic i) → self::Class /* = core::int */
+static inline-class-member method Class|(core::int i) → self::Class /* = core::int */
   ;
-static inline-class-member method Class|_#new#tearOff(dynamic i) → self::Class /* = core::int */
+static inline-class-member method Class|_#new#tearOff(core::int i) → self::Class /* = core::int */
   return self::Class|(i);
 static inline-class-member method Class|named(core::int i) → self::Class /* = core::int */
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.transformed.expect
index 362c8de..677cd17 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/const_constructor.dart.weak.transformed.expect
@@ -32,11 +32,11 @@
   static redirecting-factory redirect2 = self::Class|redirect2;
   static tearoff redirect2 = self::Class|_#redirect2#tearOff;
 }
-static inline-class-member method Class|(dynamic i) → self::Class /* = core::int */ {
+static inline-class-member method Class|(core::int i) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method Class|_#new#tearOff(dynamic i) → self::Class /* = core::int */
+static inline-class-member method Class|_#new#tearOff(core::int i) → self::Class /* = core::int */
   return self::Class|(i);
 static inline-class-member method Class|named(core::int i) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = i;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.expect
index ac0d23f..26d1582 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.expect
@@ -12,11 +12,11 @@
   constructor • = self::GenericClass|;
   tearoff • = self::GenericClass|_#new#tearOff;
 }
-static inline-class-member method Class|(dynamic it) → self::Class /* = core::int */ {
+static inline-class-member method Class|(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class|_#new#tearOff(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_#new#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|(it);
 static inline-class-member method Class|named(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
@@ -24,31 +24,31 @@
 }
 static inline-class-member method Class|_#named#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|named(it);
-static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ {
+static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(self::GenericClass|::T% it) → self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ {
   lowered final self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%> /* = self::GenericClass|_#new#tearOff::T% */
+static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass|_#new#tearOff::T% it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%> /* = self::GenericClass|_#new#tearOff::T% */
   return self::GenericClass|<self::GenericClass|_#new#tearOff::T%>(it);
 static method main() → dynamic {
   self::Class /* = core::int */ a = self::Class|(3);
   self::Class /* = core::int */ b = self::Class|(4);
-  self::Class /* = core::int */ b2 = #C1(4){(dynamic) → self::Class /* = core::int */};
+  self::Class /* = core::int */ b2 = #C1(4){(core::int) → self::Class /* = core::int */};
   self::Class /* = core::int */ c = self::Class|named(5);
   self::Class /* = core::int */ c2 = #C2(5){(core::int) → self::Class /* = core::int */};
   self::GenericClass<core::String> /* = core::String */ d = self::GenericClass|<core::String>("foo");
-  self::GenericClass<core::String> /* = core::String */ d2 = #C4("foo"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
-  self::GenericClass<core::String> /* = core::String */ d3 = #C3<core::String>("foo"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ d2 = #C4("foo"){(core::String) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ d3 = #C3<core::String>("foo"){(core::String) → self::GenericClass<core::String> /* = core::String */};
   self::GenericClass<core::String> /* = core::String */ e = self::GenericClass|<core::String>("bar");
-  self::GenericClass<core::String> /* = core::String */ e2 = #C4("bar"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
-  self::GenericClass<core::String> /* = core::String */ e3 = #C3<core::String>("bar"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ e2 = #C4("bar"){(core::String) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ e3 = #C3<core::String>("bar"){(core::String) → self::GenericClass<core::String> /* = core::String */};
   self::GenericClass<core::int> /* = core::int */ f = self::GenericClass|<core::int>(42);
-  self::GenericClass<core::int> /* = core::int */ f2 = #C5(42){(dynamic) → self::GenericClass<core::int> /* = core::int */};
-  self::GenericClass<core::int> /* = core::int */ f3 = #C3<core::int>(42){(dynamic) → self::GenericClass<core::int> /* = core::int */};
-  self::GenericClass<dynamic> /* = dynamic */ g = self::GenericClass|<dynamic>(87);
-  self::GenericClass<dynamic> /* = dynamic */ g2 = #C3<dynamic>(87){(dynamic) → self::GenericClass<dynamic> /* = dynamic */};
+  self::GenericClass<core::int> /* = core::int */ f2 = #C5(42){(core::int) → self::GenericClass<core::int> /* = core::int */};
+  self::GenericClass<core::int> /* = core::int */ f3 = #C3<core::int>(42){(core::int) → self::GenericClass<core::int> /* = core::int */};
+  self::GenericClass<core::int> /* = core::int */ g = self::GenericClass|<core::int>(87);
+  self::GenericClass<core::int> /* = core::int */ g2 = #C3<core::int>(87){(core::int) → self::GenericClass<core::int> /* = core::int */};
   self::GenericClass<core::num> /* = core::num */ h = self::GenericClass|<core::num>(123);
-  self::GenericClass<core::num> /* = core::num */ h2 = #C3<core::num>(123){(dynamic) → self::GenericClass<core::num> /* = core::num */};
+  self::GenericClass<core::num> /* = core::num */ h2 = #C3<core::num>(123){(core::num) → self::GenericClass<core::num> /* = core::num */};
   self::expect(3, a as{Unchecked} core::int);
   self::expect(3, a);
   self::expect(4, b as{Unchecked} core::int);
@@ -77,9 +77,9 @@
   self::expect(42, f2);
   self::expect(42, f3 as{Unchecked} core::int);
   self::expect(42, f3);
-  self::expect(87, g as{Unchecked} dynamic);
+  self::expect(87, g as{Unchecked} core::int);
   self::expect(87, g);
-  self::expect(87, g2 as{Unchecked} dynamic);
+  self::expect(87, g2 as{Unchecked} core::int);
   self::expect(87, g2);
   self::expect(123, h as{Unchecked} core::num);
   self::expect(123, h);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.transformed.expect
index ac0d23f..26d1582 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.strong.transformed.expect
@@ -12,11 +12,11 @@
   constructor • = self::GenericClass|;
   tearoff • = self::GenericClass|_#new#tearOff;
 }
-static inline-class-member method Class|(dynamic it) → self::Class /* = core::int */ {
+static inline-class-member method Class|(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class|_#new#tearOff(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_#new#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|(it);
 static inline-class-member method Class|named(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
@@ -24,31 +24,31 @@
 }
 static inline-class-member method Class|_#named#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|named(it);
-static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ {
+static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(self::GenericClass|::T% it) → self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ {
   lowered final self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%> /* = self::GenericClass|_#new#tearOff::T% */
+static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass|_#new#tearOff::T% it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%> /* = self::GenericClass|_#new#tearOff::T% */
   return self::GenericClass|<self::GenericClass|_#new#tearOff::T%>(it);
 static method main() → dynamic {
   self::Class /* = core::int */ a = self::Class|(3);
   self::Class /* = core::int */ b = self::Class|(4);
-  self::Class /* = core::int */ b2 = #C1(4){(dynamic) → self::Class /* = core::int */};
+  self::Class /* = core::int */ b2 = #C1(4){(core::int) → self::Class /* = core::int */};
   self::Class /* = core::int */ c = self::Class|named(5);
   self::Class /* = core::int */ c2 = #C2(5){(core::int) → self::Class /* = core::int */};
   self::GenericClass<core::String> /* = core::String */ d = self::GenericClass|<core::String>("foo");
-  self::GenericClass<core::String> /* = core::String */ d2 = #C4("foo"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
-  self::GenericClass<core::String> /* = core::String */ d3 = #C3<core::String>("foo"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ d2 = #C4("foo"){(core::String) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ d3 = #C3<core::String>("foo"){(core::String) → self::GenericClass<core::String> /* = core::String */};
   self::GenericClass<core::String> /* = core::String */ e = self::GenericClass|<core::String>("bar");
-  self::GenericClass<core::String> /* = core::String */ e2 = #C4("bar"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
-  self::GenericClass<core::String> /* = core::String */ e3 = #C3<core::String>("bar"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ e2 = #C4("bar"){(core::String) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ e3 = #C3<core::String>("bar"){(core::String) → self::GenericClass<core::String> /* = core::String */};
   self::GenericClass<core::int> /* = core::int */ f = self::GenericClass|<core::int>(42);
-  self::GenericClass<core::int> /* = core::int */ f2 = #C5(42){(dynamic) → self::GenericClass<core::int> /* = core::int */};
-  self::GenericClass<core::int> /* = core::int */ f3 = #C3<core::int>(42){(dynamic) → self::GenericClass<core::int> /* = core::int */};
-  self::GenericClass<dynamic> /* = dynamic */ g = self::GenericClass|<dynamic>(87);
-  self::GenericClass<dynamic> /* = dynamic */ g2 = #C3<dynamic>(87){(dynamic) → self::GenericClass<dynamic> /* = dynamic */};
+  self::GenericClass<core::int> /* = core::int */ f2 = #C5(42){(core::int) → self::GenericClass<core::int> /* = core::int */};
+  self::GenericClass<core::int> /* = core::int */ f3 = #C3<core::int>(42){(core::int) → self::GenericClass<core::int> /* = core::int */};
+  self::GenericClass<core::int> /* = core::int */ g = self::GenericClass|<core::int>(87);
+  self::GenericClass<core::int> /* = core::int */ g2 = #C3<core::int>(87){(core::int) → self::GenericClass<core::int> /* = core::int */};
   self::GenericClass<core::num> /* = core::num */ h = self::GenericClass|<core::num>(123);
-  self::GenericClass<core::num> /* = core::num */ h2 = #C3<core::num>(123){(dynamic) → self::GenericClass<core::num> /* = core::num */};
+  self::GenericClass<core::num> /* = core::num */ h2 = #C3<core::num>(123){(core::num) → self::GenericClass<core::num> /* = core::num */};
   self::expect(3, a as{Unchecked} core::int);
   self::expect(3, a);
   self::expect(4, b as{Unchecked} core::int);
@@ -77,9 +77,9 @@
   self::expect(42, f2);
   self::expect(42, f3 as{Unchecked} core::int);
   self::expect(42, f3);
-  self::expect(87, g as{Unchecked} dynamic);
+  self::expect(87, g as{Unchecked} core::int);
   self::expect(87, g);
-  self::expect(87, g2 as{Unchecked} dynamic);
+  self::expect(87, g2 as{Unchecked} core::int);
   self::expect(87, g2);
   self::expect(123, h as{Unchecked} core::num);
   self::expect(123, h);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.expect
index 4a60fd4..8836c1c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.expect
@@ -12,11 +12,11 @@
   constructor • = self::GenericClass|;
   tearoff • = self::GenericClass|_#new#tearOff;
 }
-static inline-class-member method Class|(dynamic it) → self::Class /* = core::int */ {
+static inline-class-member method Class|(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class|_#new#tearOff(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_#new#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|(it);
 static inline-class-member method Class|named(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
@@ -24,31 +24,31 @@
 }
 static inline-class-member method Class|_#named#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|named(it);
-static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ {
+static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(self::GenericClass|::T% it) → self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ {
   lowered final self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%> /* = self::GenericClass|_#new#tearOff::T% */
+static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass|_#new#tearOff::T% it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%> /* = self::GenericClass|_#new#tearOff::T% */
   return self::GenericClass|<self::GenericClass|_#new#tearOff::T%>(it);
 static method main() → dynamic {
   self::Class /* = core::int */ a = self::Class|(3);
   self::Class /* = core::int */ b = self::Class|(4);
-  self::Class /* = core::int */ b2 = #C1(4){(dynamic) → self::Class /* = core::int */};
+  self::Class /* = core::int */ b2 = #C1(4){(core::int) → self::Class /* = core::int */};
   self::Class /* = core::int */ c = self::Class|named(5);
   self::Class /* = core::int */ c2 = #C2(5){(core::int) → self::Class /* = core::int */};
   self::GenericClass<core::String> /* = core::String */ d = self::GenericClass|<core::String>("foo");
-  self::GenericClass<core::String> /* = core::String */ d2 = #C4("foo"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
-  self::GenericClass<core::String> /* = core::String */ d3 = #C3<core::String>("foo"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ d2 = #C4("foo"){(core::String) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ d3 = #C3<core::String>("foo"){(core::String) → self::GenericClass<core::String> /* = core::String */};
   self::GenericClass<core::String> /* = core::String */ e = self::GenericClass|<core::String>("bar");
-  self::GenericClass<core::String> /* = core::String */ e2 = #C4("bar"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
-  self::GenericClass<core::String> /* = core::String */ e3 = #C3<core::String>("bar"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ e2 = #C4("bar"){(core::String) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ e3 = #C3<core::String>("bar"){(core::String) → self::GenericClass<core::String> /* = core::String */};
   self::GenericClass<core::int> /* = core::int */ f = self::GenericClass|<core::int>(42);
-  self::GenericClass<core::int> /* = core::int */ f2 = #C5(42){(dynamic) → self::GenericClass<core::int> /* = core::int */};
-  self::GenericClass<core::int> /* = core::int */ f3 = #C3<core::int>(42){(dynamic) → self::GenericClass<core::int> /* = core::int */};
-  self::GenericClass<dynamic> /* = dynamic */ g = self::GenericClass|<dynamic>(87);
-  self::GenericClass<dynamic> /* = dynamic */ g2 = #C3<dynamic>(87){(dynamic) → self::GenericClass<dynamic> /* = dynamic */};
+  self::GenericClass<core::int> /* = core::int */ f2 = #C5(42){(core::int) → self::GenericClass<core::int> /* = core::int */};
+  self::GenericClass<core::int> /* = core::int */ f3 = #C3<core::int>(42){(core::int) → self::GenericClass<core::int> /* = core::int */};
+  self::GenericClass<core::int> /* = core::int */ g = self::GenericClass|<core::int>(87);
+  self::GenericClass<core::int> /* = core::int */ g2 = #C3<core::int>(87){(core::int) → self::GenericClass<core::int> /* = core::int */};
   self::GenericClass<core::num> /* = core::num */ h = self::GenericClass|<core::num>(123);
-  self::GenericClass<core::num> /* = core::num */ h2 = #C3<core::num>(123){(dynamic) → self::GenericClass<core::num> /* = core::num */};
+  self::GenericClass<core::num> /* = core::num */ h2 = #C3<core::num>(123){(core::num) → self::GenericClass<core::num> /* = core::num */};
   self::expect(3, a as{Unchecked} core::int);
   self::expect(3, a);
   self::expect(4, b as{Unchecked} core::int);
@@ -77,9 +77,9 @@
   self::expect(42, f2);
   self::expect(42, f3 as{Unchecked} core::int);
   self::expect(42, f3);
-  self::expect(87, g as{Unchecked} dynamic);
+  self::expect(87, g as{Unchecked} core::int);
   self::expect(87, g);
-  self::expect(87, g2 as{Unchecked} dynamic);
+  self::expect(87, g2 as{Unchecked} core::int);
   self::expect(87, g2);
   self::expect(123, h as{Unchecked} core::num);
   self::expect(123, h);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.modular.expect
index 4a60fd4..8836c1c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.modular.expect
@@ -12,11 +12,11 @@
   constructor • = self::GenericClass|;
   tearoff • = self::GenericClass|_#new#tearOff;
 }
-static inline-class-member method Class|(dynamic it) → self::Class /* = core::int */ {
+static inline-class-member method Class|(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class|_#new#tearOff(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_#new#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|(it);
 static inline-class-member method Class|named(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
@@ -24,31 +24,31 @@
 }
 static inline-class-member method Class|_#named#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|named(it);
-static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ {
+static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(self::GenericClass|::T% it) → self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ {
   lowered final self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%> /* = self::GenericClass|_#new#tearOff::T% */
+static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass|_#new#tearOff::T% it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%> /* = self::GenericClass|_#new#tearOff::T% */
   return self::GenericClass|<self::GenericClass|_#new#tearOff::T%>(it);
 static method main() → dynamic {
   self::Class /* = core::int */ a = self::Class|(3);
   self::Class /* = core::int */ b = self::Class|(4);
-  self::Class /* = core::int */ b2 = #C1(4){(dynamic) → self::Class /* = core::int */};
+  self::Class /* = core::int */ b2 = #C1(4){(core::int) → self::Class /* = core::int */};
   self::Class /* = core::int */ c = self::Class|named(5);
   self::Class /* = core::int */ c2 = #C2(5){(core::int) → self::Class /* = core::int */};
   self::GenericClass<core::String> /* = core::String */ d = self::GenericClass|<core::String>("foo");
-  self::GenericClass<core::String> /* = core::String */ d2 = #C4("foo"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
-  self::GenericClass<core::String> /* = core::String */ d3 = #C3<core::String>("foo"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ d2 = #C4("foo"){(core::String) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ d3 = #C3<core::String>("foo"){(core::String) → self::GenericClass<core::String> /* = core::String */};
   self::GenericClass<core::String> /* = core::String */ e = self::GenericClass|<core::String>("bar");
-  self::GenericClass<core::String> /* = core::String */ e2 = #C4("bar"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
-  self::GenericClass<core::String> /* = core::String */ e3 = #C3<core::String>("bar"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ e2 = #C4("bar"){(core::String) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ e3 = #C3<core::String>("bar"){(core::String) → self::GenericClass<core::String> /* = core::String */};
   self::GenericClass<core::int> /* = core::int */ f = self::GenericClass|<core::int>(42);
-  self::GenericClass<core::int> /* = core::int */ f2 = #C5(42){(dynamic) → self::GenericClass<core::int> /* = core::int */};
-  self::GenericClass<core::int> /* = core::int */ f3 = #C3<core::int>(42){(dynamic) → self::GenericClass<core::int> /* = core::int */};
-  self::GenericClass<dynamic> /* = dynamic */ g = self::GenericClass|<dynamic>(87);
-  self::GenericClass<dynamic> /* = dynamic */ g2 = #C3<dynamic>(87){(dynamic) → self::GenericClass<dynamic> /* = dynamic */};
+  self::GenericClass<core::int> /* = core::int */ f2 = #C5(42){(core::int) → self::GenericClass<core::int> /* = core::int */};
+  self::GenericClass<core::int> /* = core::int */ f3 = #C3<core::int>(42){(core::int) → self::GenericClass<core::int> /* = core::int */};
+  self::GenericClass<core::int> /* = core::int */ g = self::GenericClass|<core::int>(87);
+  self::GenericClass<core::int> /* = core::int */ g2 = #C3<core::int>(87){(core::int) → self::GenericClass<core::int> /* = core::int */};
   self::GenericClass<core::num> /* = core::num */ h = self::GenericClass|<core::num>(123);
-  self::GenericClass<core::num> /* = core::num */ h2 = #C3<core::num>(123){(dynamic) → self::GenericClass<core::num> /* = core::num */};
+  self::GenericClass<core::num> /* = core::num */ h2 = #C3<core::num>(123){(core::num) → self::GenericClass<core::num> /* = core::num */};
   self::expect(3, a as{Unchecked} core::int);
   self::expect(3, a);
   self::expect(4, b as{Unchecked} core::int);
@@ -77,9 +77,9 @@
   self::expect(42, f2);
   self::expect(42, f3 as{Unchecked} core::int);
   self::expect(42, f3);
-  self::expect(87, g as{Unchecked} dynamic);
+  self::expect(87, g as{Unchecked} core::int);
   self::expect(87, g);
-  self::expect(87, g2 as{Unchecked} dynamic);
+  self::expect(87, g2 as{Unchecked} core::int);
   self::expect(87, g2);
   self::expect(123, h as{Unchecked} core::num);
   self::expect(123, h);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.outline.expect
index b07424b..50e6bc7 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.outline.expect
@@ -12,17 +12,17 @@
   constructor • = self::GenericClass|;
   tearoff • = self::GenericClass|_#new#tearOff;
 }
-static inline-class-member method Class|(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|(core::int it) → self::Class /* = core::int */
   ;
-static inline-class-member method Class|_#new#tearOff(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_#new#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|(it);
 static inline-class-member method Class|named(core::int it) → self::Class /* = core::int */
   ;
 static inline-class-member method Class|_#named#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|named(it);
-static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */
+static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(self::GenericClass|::T% it) → self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */
   ;
-static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%> /* = self::GenericClass|_#new#tearOff::T% */
+static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass|_#new#tearOff::T% it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%> /* = self::GenericClass|_#new#tearOff::T% */
   return self::GenericClass|<self::GenericClass|_#new#tearOff::T%>(it);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.transformed.expect
index 4a60fd4..8836c1c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_access.dart.weak.transformed.expect
@@ -12,11 +12,11 @@
   constructor • = self::GenericClass|;
   tearoff • = self::GenericClass|_#new#tearOff;
 }
-static inline-class-member method Class|(dynamic it) → self::Class /* = core::int */ {
+static inline-class-member method Class|(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class|_#new#tearOff(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_#new#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|(it);
 static inline-class-member method Class|named(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
@@ -24,31 +24,31 @@
 }
 static inline-class-member method Class|_#named#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|named(it);
-static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ {
+static inline-class-member method GenericClass|<T extends core::Object? = dynamic>(self::GenericClass|::T% it) → self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ {
   lowered final self::GenericClass<self::GenericClass|::T%> /* = self::GenericClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%> /* = self::GenericClass|_#new#tearOff::T% */
+static inline-class-member method GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass|_#new#tearOff::T% it) → self::GenericClass<self::GenericClass|_#new#tearOff::T%> /* = self::GenericClass|_#new#tearOff::T% */
   return self::GenericClass|<self::GenericClass|_#new#tearOff::T%>(it);
 static method main() → dynamic {
   self::Class /* = core::int */ a = self::Class|(3);
   self::Class /* = core::int */ b = self::Class|(4);
-  self::Class /* = core::int */ b2 = #C1(4){(dynamic) → self::Class /* = core::int */};
+  self::Class /* = core::int */ b2 = #C1(4){(core::int) → self::Class /* = core::int */};
   self::Class /* = core::int */ c = self::Class|named(5);
   self::Class /* = core::int */ c2 = #C2(5){(core::int) → self::Class /* = core::int */};
   self::GenericClass<core::String> /* = core::String */ d = self::GenericClass|<core::String>("foo");
-  self::GenericClass<core::String> /* = core::String */ d2 = #C4("foo"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
-  self::GenericClass<core::String> /* = core::String */ d3 = #C3<core::String>("foo"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ d2 = #C4("foo"){(core::String) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ d3 = #C3<core::String>("foo"){(core::String) → self::GenericClass<core::String> /* = core::String */};
   self::GenericClass<core::String> /* = core::String */ e = self::GenericClass|<core::String>("bar");
-  self::GenericClass<core::String> /* = core::String */ e2 = #C4("bar"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
-  self::GenericClass<core::String> /* = core::String */ e3 = #C3<core::String>("bar"){(dynamic) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ e2 = #C4("bar"){(core::String) → self::GenericClass<core::String> /* = core::String */};
+  self::GenericClass<core::String> /* = core::String */ e3 = #C3<core::String>("bar"){(core::String) → self::GenericClass<core::String> /* = core::String */};
   self::GenericClass<core::int> /* = core::int */ f = self::GenericClass|<core::int>(42);
-  self::GenericClass<core::int> /* = core::int */ f2 = #C5(42){(dynamic) → self::GenericClass<core::int> /* = core::int */};
-  self::GenericClass<core::int> /* = core::int */ f3 = #C3<core::int>(42){(dynamic) → self::GenericClass<core::int> /* = core::int */};
-  self::GenericClass<dynamic> /* = dynamic */ g = self::GenericClass|<dynamic>(87);
-  self::GenericClass<dynamic> /* = dynamic */ g2 = #C3<dynamic>(87){(dynamic) → self::GenericClass<dynamic> /* = dynamic */};
+  self::GenericClass<core::int> /* = core::int */ f2 = #C5(42){(core::int) → self::GenericClass<core::int> /* = core::int */};
+  self::GenericClass<core::int> /* = core::int */ f3 = #C3<core::int>(42){(core::int) → self::GenericClass<core::int> /* = core::int */};
+  self::GenericClass<core::int> /* = core::int */ g = self::GenericClass|<core::int>(87);
+  self::GenericClass<core::int> /* = core::int */ g2 = #C3<core::int>(87){(core::int) → self::GenericClass<core::int> /* = core::int */};
   self::GenericClass<core::num> /* = core::num */ h = self::GenericClass|<core::num>(123);
-  self::GenericClass<core::num> /* = core::num */ h2 = #C3<core::num>(123){(dynamic) → self::GenericClass<core::num> /* = core::num */};
+  self::GenericClass<core::num> /* = core::num */ h2 = #C3<core::num>(123){(core::num) → self::GenericClass<core::num> /* = core::num */};
   self::expect(3, a as{Unchecked} core::int);
   self::expect(3, a);
   self::expect(4, b as{Unchecked} core::int);
@@ -77,9 +77,9 @@
   self::expect(42, f2);
   self::expect(42, f3 as{Unchecked} core::int);
   self::expect(42, f3);
-  self::expect(87, g as{Unchecked} dynamic);
+  self::expect(87, g as{Unchecked} core::int);
   self::expect(87, g);
-  self::expect(87, g2 as{Unchecked} dynamic);
+  self::expect(87, g2 as{Unchecked} core::int);
   self::expect(87, g2);
   self::expect(123, h as{Unchecked} core::num);
   self::expect(123, h);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.expect
index 5ed48c6..fafc24c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.expect
@@ -34,11 +34,11 @@
   constructor named6 = self::Class2|named6;
   tearoff named6 = self::Class2|_#named6#tearOff;
 }
-static inline-class-member method Class1|(dynamic it) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int it) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int it) → self::Class1 /* = core::int */
   return self::Class1|(it);
 static inline-class-member method Class1|named1(core::int it, core::int additional) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
@@ -82,11 +82,11 @@
 }
 static inline-class-member method Class1|_#named6#tearOff(core::String text) → self::Class1 /* = core::int */
   return self::Class1|named6(text);
-static inline-class-member method Class2|<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ {
+static inline-class-member method Class2|<T extends core::Object? = dynamic>(self::Class2|::T% it) → self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ {
   lowered final self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|_#new#tearOff::T%> /* = self::Class2|_#new#tearOff::T% */
+static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(self::Class2|_#new#tearOff::T% it) → self::Class2<self::Class2|_#new#tearOff::T%> /* = self::Class2|_#new#tearOff::T% */
   return self::Class2|<self::Class2|_#new#tearOff::T%>(it);
 static inline-class-member method Class2|named1<T extends core::Object? = dynamic>(self::Class2|named1::T% it, core::int additional) → self::Class2<self::Class2|named1::T%> /* = self::Class2|named1::T% */ {
   lowered final self::Class2<self::Class2|named1::T%> /* = self::Class2|named1::T% */ #this = it;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.transformed.expect
index 5ed48c6..fafc24c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.strong.transformed.expect
@@ -34,11 +34,11 @@
   constructor named6 = self::Class2|named6;
   tearoff named6 = self::Class2|_#named6#tearOff;
 }
-static inline-class-member method Class1|(dynamic it) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int it) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int it) → self::Class1 /* = core::int */
   return self::Class1|(it);
 static inline-class-member method Class1|named1(core::int it, core::int additional) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
@@ -82,11 +82,11 @@
 }
 static inline-class-member method Class1|_#named6#tearOff(core::String text) → self::Class1 /* = core::int */
   return self::Class1|named6(text);
-static inline-class-member method Class2|<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ {
+static inline-class-member method Class2|<T extends core::Object? = dynamic>(self::Class2|::T% it) → self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ {
   lowered final self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|_#new#tearOff::T%> /* = self::Class2|_#new#tearOff::T% */
+static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(self::Class2|_#new#tearOff::T% it) → self::Class2<self::Class2|_#new#tearOff::T%> /* = self::Class2|_#new#tearOff::T% */
   return self::Class2|<self::Class2|_#new#tearOff::T%>(it);
 static inline-class-member method Class2|named1<T extends core::Object? = dynamic>(self::Class2|named1::T% it, core::int additional) → self::Class2<self::Class2|named1::T%> /* = self::Class2|named1::T% */ {
   lowered final self::Class2<self::Class2|named1::T%> /* = self::Class2|named1::T% */ #this = it;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.expect
index 5ed48c6..fafc24c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.expect
@@ -34,11 +34,11 @@
   constructor named6 = self::Class2|named6;
   tearoff named6 = self::Class2|_#named6#tearOff;
 }
-static inline-class-member method Class1|(dynamic it) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int it) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int it) → self::Class1 /* = core::int */
   return self::Class1|(it);
 static inline-class-member method Class1|named1(core::int it, core::int additional) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
@@ -82,11 +82,11 @@
 }
 static inline-class-member method Class1|_#named6#tearOff(core::String text) → self::Class1 /* = core::int */
   return self::Class1|named6(text);
-static inline-class-member method Class2|<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ {
+static inline-class-member method Class2|<T extends core::Object? = dynamic>(self::Class2|::T% it) → self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ {
   lowered final self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|_#new#tearOff::T%> /* = self::Class2|_#new#tearOff::T% */
+static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(self::Class2|_#new#tearOff::T% it) → self::Class2<self::Class2|_#new#tearOff::T%> /* = self::Class2|_#new#tearOff::T% */
   return self::Class2|<self::Class2|_#new#tearOff::T%>(it);
 static inline-class-member method Class2|named1<T extends core::Object? = dynamic>(self::Class2|named1::T% it, core::int additional) → self::Class2<self::Class2|named1::T%> /* = self::Class2|named1::T% */ {
   lowered final self::Class2<self::Class2|named1::T%> /* = self::Class2|named1::T% */ #this = it;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.modular.expect
index 5ed48c6..fafc24c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.modular.expect
@@ -34,11 +34,11 @@
   constructor named6 = self::Class2|named6;
   tearoff named6 = self::Class2|_#named6#tearOff;
 }
-static inline-class-member method Class1|(dynamic it) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int it) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int it) → self::Class1 /* = core::int */
   return self::Class1|(it);
 static inline-class-member method Class1|named1(core::int it, core::int additional) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
@@ -82,11 +82,11 @@
 }
 static inline-class-member method Class1|_#named6#tearOff(core::String text) → self::Class1 /* = core::int */
   return self::Class1|named6(text);
-static inline-class-member method Class2|<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ {
+static inline-class-member method Class2|<T extends core::Object? = dynamic>(self::Class2|::T% it) → self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ {
   lowered final self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|_#new#tearOff::T%> /* = self::Class2|_#new#tearOff::T% */
+static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(self::Class2|_#new#tearOff::T% it) → self::Class2<self::Class2|_#new#tearOff::T%> /* = self::Class2|_#new#tearOff::T% */
   return self::Class2|<self::Class2|_#new#tearOff::T%>(it);
 static inline-class-member method Class2|named1<T extends core::Object? = dynamic>(self::Class2|named1::T% it, core::int additional) → self::Class2<self::Class2|named1::T%> /* = self::Class2|named1::T% */ {
   lowered final self::Class2<self::Class2|named1::T%> /* = self::Class2|named1::T% */ #this = it;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.outline.expect
index 836e124..120ebb9 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.outline.expect
@@ -34,9 +34,9 @@
   constructor named6 = self::Class2|named6;
   tearoff named6 = self::Class2|_#named6#tearOff;
 }
-static inline-class-member method Class1|(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|(core::int it) → self::Class1 /* = core::int */
   ;
-static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int it) → self::Class1 /* = core::int */
   return self::Class1|(it);
 static inline-class-member method Class1|named1(core::int it, core::int additional) → self::Class1 /* = core::int */
   ;
@@ -62,9 +62,9 @@
   ;
 static inline-class-member method Class1|_#named6#tearOff(core::String text) → self::Class1 /* = core::int */
   return self::Class1|named6(text);
-static inline-class-member method Class2|<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|::T%> /* = self::Class2|::T% */
+static inline-class-member method Class2|<T extends core::Object? = dynamic>(self::Class2|::T% it) → self::Class2<self::Class2|::T%> /* = self::Class2|::T% */
   ;
-static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|_#new#tearOff::T%> /* = self::Class2|_#new#tearOff::T% */
+static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(self::Class2|_#new#tearOff::T% it) → self::Class2<self::Class2|_#new#tearOff::T%> /* = self::Class2|_#new#tearOff::T% */
   return self::Class2|<self::Class2|_#new#tearOff::T%>(it);
 static inline-class-member method Class2|named1<T extends core::Object? = dynamic>(self::Class2|named1::T% it, core::int additional) → self::Class2<self::Class2|named1::T%> /* = self::Class2|named1::T% */
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.transformed.expect
index 5ed48c6..fafc24c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_bodies.dart.weak.transformed.expect
@@ -34,11 +34,11 @@
   constructor named6 = self::Class2|named6;
   tearoff named6 = self::Class2|_#named6#tearOff;
 }
-static inline-class-member method Class1|(dynamic it) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int it) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int it) → self::Class1 /* = core::int */
   return self::Class1|(it);
 static inline-class-member method Class1|named1(core::int it, core::int additional) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
@@ -82,11 +82,11 @@
 }
 static inline-class-member method Class1|_#named6#tearOff(core::String text) → self::Class1 /* = core::int */
   return self::Class1|named6(text);
-static inline-class-member method Class2|<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ {
+static inline-class-member method Class2|<T extends core::Object? = dynamic>(self::Class2|::T% it) → self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ {
   lowered final self::Class2<self::Class2|::T%> /* = self::Class2|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class2<self::Class2|_#new#tearOff::T%> /* = self::Class2|_#new#tearOff::T% */
+static inline-class-member method Class2|_#new#tearOff<T extends core::Object? = dynamic>(self::Class2|_#new#tearOff::T% it) → self::Class2<self::Class2|_#new#tearOff::T%> /* = self::Class2|_#new#tearOff::T% */
   return self::Class2|<self::Class2|_#new#tearOff::T%>(it);
 static inline-class-member method Class2|named1<T extends core::Object? = dynamic>(self::Class2|named1::T% it, core::int additional) → self::Class2<self::Class2|named1::T%> /* = self::Class2|named1::T% */ {
   lowered final self::Class2<self::Class2|named1::T%> /* = self::Class2|named1::T% */ #this = it;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.expect
index 769ed61..cfdc2e92 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.expect
@@ -18,11 +18,11 @@
   constructor • = self::I2|;
   tearoff • = self::I2|_#new#tearOff;
 }
-static inline-class-member method I|_(dynamic it) → self::I /* = core::int */ {
+static inline-class-member method I|_(core::int it) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method I|_#_#tearOff(dynamic it) → self::I /* = core::int */
+static inline-class-member method I|_#_#tearOff(core::int it) → self::I /* = core::int */
   return self::I|_(it);
 static inline-class-member method I|(core::int x, [core::int? y = #C1]) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = x.{core::num::+}(let final core::int? #t1 = y in #t1 == null ?{core::int} 42 : #t1{core::int}){(core::num) → core::int};
@@ -33,11 +33,11 @@
 static inline-class-member method I|m(lowered final self::I /* = core::int */ #this, core::String s, [core::int i = #C2]) → void {}
 static inline-class-member method I|get#m(lowered final self::I /* = core::int */ #this) → (core::String, [core::int]) → void
   return (core::String s, [core::int i = #C2]) → void => self::I|m(#this, s, i);
-static inline-class-member method I2|_(dynamic it) → self::I2 /* = core::int */ {
+static inline-class-member method I2|_(core::int it) → self::I2 /* = core::int */ {
   lowered final self::I2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method I2|_#_#tearOff(dynamic it) → self::I2 /* = core::int */
+static inline-class-member method I2|_#_#tearOff(core::int it) → self::I2 /* = core::int */
   return self::I2|_(it);
 static inline-class-member method I2|(core::int x, {core::int? y = #C1}) → self::I2 /* = core::int */ {
   lowered final self::I2 /* = core::int */ #this = x.{core::num::+}(let final core::int? #t2 = y in #t2 == null ?{core::int} 87 : #t2{core::int}){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.transformed.expect
index 769ed61..cfdc2e92 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.strong.transformed.expect
@@ -18,11 +18,11 @@
   constructor • = self::I2|;
   tearoff • = self::I2|_#new#tearOff;
 }
-static inline-class-member method I|_(dynamic it) → self::I /* = core::int */ {
+static inline-class-member method I|_(core::int it) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method I|_#_#tearOff(dynamic it) → self::I /* = core::int */
+static inline-class-member method I|_#_#tearOff(core::int it) → self::I /* = core::int */
   return self::I|_(it);
 static inline-class-member method I|(core::int x, [core::int? y = #C1]) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = x.{core::num::+}(let final core::int? #t1 = y in #t1 == null ?{core::int} 42 : #t1{core::int}){(core::num) → core::int};
@@ -33,11 +33,11 @@
 static inline-class-member method I|m(lowered final self::I /* = core::int */ #this, core::String s, [core::int i = #C2]) → void {}
 static inline-class-member method I|get#m(lowered final self::I /* = core::int */ #this) → (core::String, [core::int]) → void
   return (core::String s, [core::int i = #C2]) → void => self::I|m(#this, s, i);
-static inline-class-member method I2|_(dynamic it) → self::I2 /* = core::int */ {
+static inline-class-member method I2|_(core::int it) → self::I2 /* = core::int */ {
   lowered final self::I2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method I2|_#_#tearOff(dynamic it) → self::I2 /* = core::int */
+static inline-class-member method I2|_#_#tearOff(core::int it) → self::I2 /* = core::int */
   return self::I2|_(it);
 static inline-class-member method I2|(core::int x, {core::int? y = #C1}) → self::I2 /* = core::int */ {
   lowered final self::I2 /* = core::int */ #this = x.{core::num::+}(let final core::int? #t2 = y in #t2 == null ?{core::int} 87 : #t2{core::int}){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.expect
index 769ed61..cfdc2e92 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.expect
@@ -18,11 +18,11 @@
   constructor • = self::I2|;
   tearoff • = self::I2|_#new#tearOff;
 }
-static inline-class-member method I|_(dynamic it) → self::I /* = core::int */ {
+static inline-class-member method I|_(core::int it) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method I|_#_#tearOff(dynamic it) → self::I /* = core::int */
+static inline-class-member method I|_#_#tearOff(core::int it) → self::I /* = core::int */
   return self::I|_(it);
 static inline-class-member method I|(core::int x, [core::int? y = #C1]) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = x.{core::num::+}(let final core::int? #t1 = y in #t1 == null ?{core::int} 42 : #t1{core::int}){(core::num) → core::int};
@@ -33,11 +33,11 @@
 static inline-class-member method I|m(lowered final self::I /* = core::int */ #this, core::String s, [core::int i = #C2]) → void {}
 static inline-class-member method I|get#m(lowered final self::I /* = core::int */ #this) → (core::String, [core::int]) → void
   return (core::String s, [core::int i = #C2]) → void => self::I|m(#this, s, i);
-static inline-class-member method I2|_(dynamic it) → self::I2 /* = core::int */ {
+static inline-class-member method I2|_(core::int it) → self::I2 /* = core::int */ {
   lowered final self::I2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method I2|_#_#tearOff(dynamic it) → self::I2 /* = core::int */
+static inline-class-member method I2|_#_#tearOff(core::int it) → self::I2 /* = core::int */
   return self::I2|_(it);
 static inline-class-member method I2|(core::int x, {core::int? y = #C1}) → self::I2 /* = core::int */ {
   lowered final self::I2 /* = core::int */ #this = x.{core::num::+}(let final core::int? #t2 = y in #t2 == null ?{core::int} 87 : #t2{core::int}){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.modular.expect
index 769ed61..cfdc2e92 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.modular.expect
@@ -18,11 +18,11 @@
   constructor • = self::I2|;
   tearoff • = self::I2|_#new#tearOff;
 }
-static inline-class-member method I|_(dynamic it) → self::I /* = core::int */ {
+static inline-class-member method I|_(core::int it) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method I|_#_#tearOff(dynamic it) → self::I /* = core::int */
+static inline-class-member method I|_#_#tearOff(core::int it) → self::I /* = core::int */
   return self::I|_(it);
 static inline-class-member method I|(core::int x, [core::int? y = #C1]) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = x.{core::num::+}(let final core::int? #t1 = y in #t1 == null ?{core::int} 42 : #t1{core::int}){(core::num) → core::int};
@@ -33,11 +33,11 @@
 static inline-class-member method I|m(lowered final self::I /* = core::int */ #this, core::String s, [core::int i = #C2]) → void {}
 static inline-class-member method I|get#m(lowered final self::I /* = core::int */ #this) → (core::String, [core::int]) → void
   return (core::String s, [core::int i = #C2]) → void => self::I|m(#this, s, i);
-static inline-class-member method I2|_(dynamic it) → self::I2 /* = core::int */ {
+static inline-class-member method I2|_(core::int it) → self::I2 /* = core::int */ {
   lowered final self::I2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method I2|_#_#tearOff(dynamic it) → self::I2 /* = core::int */
+static inline-class-member method I2|_#_#tearOff(core::int it) → self::I2 /* = core::int */
   return self::I2|_(it);
 static inline-class-member method I2|(core::int x, {core::int? y = #C1}) → self::I2 /* = core::int */ {
   lowered final self::I2 /* = core::int */ #this = x.{core::num::+}(let final core::int? #t2 = y in #t2 == null ?{core::int} 87 : #t2{core::int}){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.outline.expect
index f7fcd93..57e8320 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.outline.expect
@@ -18,9 +18,9 @@
   constructor • = self::I2|;
   tearoff • = self::I2|_#new#tearOff;
 }
-static inline-class-member method I|_(dynamic it) → self::I /* = core::int */
+static inline-class-member method I|_(core::int it) → self::I /* = core::int */
   ;
-static inline-class-member method I|_#_#tearOff(dynamic it) → self::I /* = core::int */
+static inline-class-member method I|_#_#tearOff(core::int it) → self::I /* = core::int */
   return self::I|_(it);
 static inline-class-member method I|(core::int x, [core::int? y = null]) → self::I /* = core::int */
   ;
@@ -30,9 +30,9 @@
   ;
 static inline-class-member method I|get#m(lowered final self::I /* = core::int */ #this) → (core::String, [core::int]) → void
   return (core::String s, [core::int i]) → void => self::I|m(#this, s, i);
-static inline-class-member method I2|_(dynamic it) → self::I2 /* = core::int */
+static inline-class-member method I2|_(core::int it) → self::I2 /* = core::int */
   ;
-static inline-class-member method I2|_#_#tearOff(dynamic it) → self::I2 /* = core::int */
+static inline-class-member method I2|_#_#tearOff(core::int it) → self::I2 /* = core::int */
   return self::I2|_(it);
 static inline-class-member method I2|(core::int x, {core::int? y = null}) → self::I2 /* = core::int */
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.transformed.expect
index 769ed61..cfdc2e92 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructor_formal_parameters.dart.weak.transformed.expect
@@ -18,11 +18,11 @@
   constructor • = self::I2|;
   tearoff • = self::I2|_#new#tearOff;
 }
-static inline-class-member method I|_(dynamic it) → self::I /* = core::int */ {
+static inline-class-member method I|_(core::int it) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method I|_#_#tearOff(dynamic it) → self::I /* = core::int */
+static inline-class-member method I|_#_#tearOff(core::int it) → self::I /* = core::int */
   return self::I|_(it);
 static inline-class-member method I|(core::int x, [core::int? y = #C1]) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = x.{core::num::+}(let final core::int? #t1 = y in #t1 == null ?{core::int} 42 : #t1{core::int}){(core::num) → core::int};
@@ -33,11 +33,11 @@
 static inline-class-member method I|m(lowered final self::I /* = core::int */ #this, core::String s, [core::int i = #C2]) → void {}
 static inline-class-member method I|get#m(lowered final self::I /* = core::int */ #this) → (core::String, [core::int]) → void
   return (core::String s, [core::int i = #C2]) → void => self::I|m(#this, s, i);
-static inline-class-member method I2|_(dynamic it) → self::I2 /* = core::int */ {
+static inline-class-member method I2|_(core::int it) → self::I2 /* = core::int */ {
   lowered final self::I2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method I2|_#_#tearOff(dynamic it) → self::I2 /* = core::int */
+static inline-class-member method I2|_#_#tearOff(core::int it) → self::I2 /* = core::int */
   return self::I2|_(it);
 static inline-class-member method I2|(core::int x, {core::int? y = #C1}) → self::I2 /* = core::int */ {
   lowered final self::I2 /* = core::int */ #this = x.{core::num::+}(let final core::int? #t2 = y in #t2 == null ?{core::int} 87 : #t2{core::int}){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.expect
index ae5e892..d9552a6 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.expect
@@ -10,15 +10,15 @@
   constructor • = self::Class2|;
   tearoff • = self::Class2|_#new#tearOff;
 }
-static inline-class-member method Class1|(dynamic field) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|(field);
-static inline-class-member method Class2|(dynamic field) → self::Class2 /* = core::int */ {
+static inline-class-member method Class2|(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class2|_#new#tearOff(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.transformed.expect
index ae5e892..d9552a6 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.strong.transformed.expect
@@ -10,15 +10,15 @@
   constructor • = self::Class2|;
   tearoff • = self::Class2|_#new#tearOff;
 }
-static inline-class-member method Class1|(dynamic field) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|(field);
-static inline-class-member method Class2|(dynamic field) → self::Class2 /* = core::int */ {
+static inline-class-member method Class2|(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class2|_#new#tearOff(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.expect
index ae5e892..d9552a6 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.expect
@@ -10,15 +10,15 @@
   constructor • = self::Class2|;
   tearoff • = self::Class2|_#new#tearOff;
 }
-static inline-class-member method Class1|(dynamic field) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|(field);
-static inline-class-member method Class2|(dynamic field) → self::Class2 /* = core::int */ {
+static inline-class-member method Class2|(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class2|_#new#tearOff(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.modular.expect
index ae5e892..d9552a6 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.modular.expect
@@ -10,15 +10,15 @@
   constructor • = self::Class2|;
   tearoff • = self::Class2|_#new#tearOff;
 }
-static inline-class-member method Class1|(dynamic field) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|(field);
-static inline-class-member method Class2|(dynamic field) → self::Class2 /* = core::int */ {
+static inline-class-member method Class2|(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class2|_#new#tearOff(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.outline.expect
index 6e06252..390bee8 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.outline.expect
@@ -10,11 +10,11 @@
   constructor • = self::Class2|;
   tearoff • = self::Class2|_#new#tearOff;
 }
-static inline-class-member method Class1|(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|(core::int field) → self::Class1 /* = core::int */
   ;
-static inline-class-member method Class1|_#new#tearOff(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|(field);
-static inline-class-member method Class2|(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|(core::int field) → self::Class2 /* = core::int */
   ;
-static inline-class-member method Class2|_#new#tearOff(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.transformed.expect
index ae5e892..d9552a6 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/constructors.dart.weak.transformed.expect
@@ -10,15 +10,15 @@
   constructor • = self::Class2|;
   tearoff • = self::Class2|_#new#tearOff;
 }
-static inline-class-member method Class1|(dynamic field) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|(field);
-static inline-class-member method Class2|(dynamic field) → self::Class2 /* = core::int */ {
+static inline-class-member method Class2|(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class2|_#new#tearOff(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|(field);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.strong.expect
index cc10b40..a5e8b07 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.strong.expect
@@ -53,39 +53,39 @@
   constructor • = self::F|;
   tearoff • = self::F|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
-static inline-class-member method B|(dynamic it) → self::B /* = core::int */ {
+static inline-class-member method B|(core::int it) → self::B /* = core::int */ {
   lowered final self::B /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff(dynamic it) → self::B /* = core::int */
+static inline-class-member method B|_#new#tearOff(core::int it) → self::B /* = core::int */
   return self::B|(it);
-static inline-class-member method C|(dynamic it) → self::C /* = core::int */ {
+static inline-class-member method C|(core::int it) → self::C /* = core::int */ {
   lowered final self::C /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff(dynamic it) → self::C /* = core::int */
+static inline-class-member method C|_#new#tearOff(core::int it) → self::C /* = core::int */
   return self::C|(it);
-static inline-class-member method D|(dynamic it) → self::D /* = core::int */ {
+static inline-class-member method D|(core::int it) → self::D /* = core::int */ {
   lowered final self::D /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|_#new#tearOff(core::int it) → self::D /* = core::int */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int */ {
+static inline-class-member method E|(core::int it) → self::E /* = core::int */ {
   lowered final self::E /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|_#new#tearOff(core::int it) → self::E /* = core::int */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = core::int */ {
+static inline-class-member method F|(core::int it) → self::F /* = core::int */ {
   lowered final self::F /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = core::int */
+static inline-class-member method F|_#new#tearOff(core::int it) → self::F /* = core::int */
   return self::F|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.strong.transformed.expect
index cc10b40..a5e8b07 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.strong.transformed.expect
@@ -53,39 +53,39 @@
   constructor • = self::F|;
   tearoff • = self::F|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
-static inline-class-member method B|(dynamic it) → self::B /* = core::int */ {
+static inline-class-member method B|(core::int it) → self::B /* = core::int */ {
   lowered final self::B /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff(dynamic it) → self::B /* = core::int */
+static inline-class-member method B|_#new#tearOff(core::int it) → self::B /* = core::int */
   return self::B|(it);
-static inline-class-member method C|(dynamic it) → self::C /* = core::int */ {
+static inline-class-member method C|(core::int it) → self::C /* = core::int */ {
   lowered final self::C /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff(dynamic it) → self::C /* = core::int */
+static inline-class-member method C|_#new#tearOff(core::int it) → self::C /* = core::int */
   return self::C|(it);
-static inline-class-member method D|(dynamic it) → self::D /* = core::int */ {
+static inline-class-member method D|(core::int it) → self::D /* = core::int */ {
   lowered final self::D /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|_#new#tearOff(core::int it) → self::D /* = core::int */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int */ {
+static inline-class-member method E|(core::int it) → self::E /* = core::int */ {
   lowered final self::E /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|_#new#tearOff(core::int it) → self::E /* = core::int */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = core::int */ {
+static inline-class-member method F|(core::int it) → self::F /* = core::int */ {
   lowered final self::F /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = core::int */
+static inline-class-member method F|_#new#tearOff(core::int it) → self::F /* = core::int */
   return self::F|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.expect
index cc10b40..a5e8b07 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.expect
@@ -53,39 +53,39 @@
   constructor • = self::F|;
   tearoff • = self::F|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
-static inline-class-member method B|(dynamic it) → self::B /* = core::int */ {
+static inline-class-member method B|(core::int it) → self::B /* = core::int */ {
   lowered final self::B /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff(dynamic it) → self::B /* = core::int */
+static inline-class-member method B|_#new#tearOff(core::int it) → self::B /* = core::int */
   return self::B|(it);
-static inline-class-member method C|(dynamic it) → self::C /* = core::int */ {
+static inline-class-member method C|(core::int it) → self::C /* = core::int */ {
   lowered final self::C /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff(dynamic it) → self::C /* = core::int */
+static inline-class-member method C|_#new#tearOff(core::int it) → self::C /* = core::int */
   return self::C|(it);
-static inline-class-member method D|(dynamic it) → self::D /* = core::int */ {
+static inline-class-member method D|(core::int it) → self::D /* = core::int */ {
   lowered final self::D /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|_#new#tearOff(core::int it) → self::D /* = core::int */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int */ {
+static inline-class-member method E|(core::int it) → self::E /* = core::int */ {
   lowered final self::E /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|_#new#tearOff(core::int it) → self::E /* = core::int */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = core::int */ {
+static inline-class-member method F|(core::int it) → self::F /* = core::int */ {
   lowered final self::F /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = core::int */
+static inline-class-member method F|_#new#tearOff(core::int it) → self::F /* = core::int */
   return self::F|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.modular.expect
index cc10b40..a5e8b07 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.modular.expect
@@ -53,39 +53,39 @@
   constructor • = self::F|;
   tearoff • = self::F|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
-static inline-class-member method B|(dynamic it) → self::B /* = core::int */ {
+static inline-class-member method B|(core::int it) → self::B /* = core::int */ {
   lowered final self::B /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff(dynamic it) → self::B /* = core::int */
+static inline-class-member method B|_#new#tearOff(core::int it) → self::B /* = core::int */
   return self::B|(it);
-static inline-class-member method C|(dynamic it) → self::C /* = core::int */ {
+static inline-class-member method C|(core::int it) → self::C /* = core::int */ {
   lowered final self::C /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff(dynamic it) → self::C /* = core::int */
+static inline-class-member method C|_#new#tearOff(core::int it) → self::C /* = core::int */
   return self::C|(it);
-static inline-class-member method D|(dynamic it) → self::D /* = core::int */ {
+static inline-class-member method D|(core::int it) → self::D /* = core::int */ {
   lowered final self::D /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|_#new#tearOff(core::int it) → self::D /* = core::int */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int */ {
+static inline-class-member method E|(core::int it) → self::E /* = core::int */ {
   lowered final self::E /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|_#new#tearOff(core::int it) → self::E /* = core::int */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = core::int */ {
+static inline-class-member method F|(core::int it) → self::F /* = core::int */ {
   lowered final self::F /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = core::int */
+static inline-class-member method F|_#new#tearOff(core::int it) → self::F /* = core::int */
   return self::F|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.outline.expect
index d5245a8..190e91b 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.outline.expect
@@ -53,27 +53,27 @@
   constructor • = self::F|;
   tearoff • = self::F|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|(core::int it) → self::A /* = core::int */
   ;
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
-static inline-class-member method B|(dynamic it) → self::B /* = core::int */
+static inline-class-member method B|(core::int it) → self::B /* = core::int */
   ;
-static inline-class-member method B|_#new#tearOff(dynamic it) → self::B /* = core::int */
+static inline-class-member method B|_#new#tearOff(core::int it) → self::B /* = core::int */
   return self::B|(it);
-static inline-class-member method C|(dynamic it) → self::C /* = core::int */
+static inline-class-member method C|(core::int it) → self::C /* = core::int */
   ;
-static inline-class-member method C|_#new#tearOff(dynamic it) → self::C /* = core::int */
+static inline-class-member method C|_#new#tearOff(core::int it) → self::C /* = core::int */
   return self::C|(it);
-static inline-class-member method D|(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|(core::int it) → self::D /* = core::int */
   ;
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|_#new#tearOff(core::int it) → self::D /* = core::int */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|(core::int it) → self::E /* = core::int */
   ;
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|_#new#tearOff(core::int it) → self::E /* = core::int */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = core::int */
+static inline-class-member method F|(core::int it) → self::F /* = core::int */
   ;
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = core::int */
+static inline-class-member method F|_#new#tearOff(core::int it) → self::F /* = core::int */
   return self::F|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.transformed.expect
index cc10b40..a5e8b07 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/cyclic_extension_types.dart.weak.transformed.expect
@@ -53,39 +53,39 @@
   constructor • = self::F|;
   tearoff • = self::F|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
-static inline-class-member method B|(dynamic it) → self::B /* = core::int */ {
+static inline-class-member method B|(core::int it) → self::B /* = core::int */ {
   lowered final self::B /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff(dynamic it) → self::B /* = core::int */
+static inline-class-member method B|_#new#tearOff(core::int it) → self::B /* = core::int */
   return self::B|(it);
-static inline-class-member method C|(dynamic it) → self::C /* = core::int */ {
+static inline-class-member method C|(core::int it) → self::C /* = core::int */ {
   lowered final self::C /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff(dynamic it) → self::C /* = core::int */
+static inline-class-member method C|_#new#tearOff(core::int it) → self::C /* = core::int */
   return self::C|(it);
-static inline-class-member method D|(dynamic it) → self::D /* = core::int */ {
+static inline-class-member method D|(core::int it) → self::D /* = core::int */ {
   lowered final self::D /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|_#new#tearOff(core::int it) → self::D /* = core::int */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int */ {
+static inline-class-member method E|(core::int it) → self::E /* = core::int */ {
   lowered final self::E /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|_#new#tearOff(core::int it) → self::E /* = core::int */
   return self::E|(it);
-static inline-class-member method F|(dynamic it) → self::F /* = core::int */ {
+static inline-class-member method F|(core::int it) → self::F /* = core::int */ {
   lowered final self::F /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method F|_#new#tearOff(dynamic it) → self::F /* = core::int */
+static inline-class-member method F|_#new#tearOff(core::int it) → self::F /* = core::int */
   return self::F|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.strong.expect
index f5a4965..89d82bc 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.strong.expect
@@ -331,185 +331,185 @@
   constructor • = self::E24|;
   tearoff • = self::E24|_#new#tearOff;
 }
-static inline-class-member method E1|(dynamic it) → self::E1 /* = invalid-type */ {
+static inline-class-member method E1|(self::E1 /* = invalid-type */ it) → self::E1 /* = invalid-type */ {
   lowered final self::E1 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E1|_#new#tearOff(dynamic it) → self::E1 /* = invalid-type */
+static inline-class-member method E1|_#new#tearOff(self::E1 /* = invalid-type */ it) → self::E1 /* = invalid-type */
   return self::E1|(it);
-static inline-class-member method E2a|(dynamic it) → self::E2a /* = invalid-type */ {
+static inline-class-member method E2a|(self::E2b /* = invalid-type */ it) → self::E2a /* = invalid-type */ {
   lowered final self::E2a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E2a|_#new#tearOff(dynamic it) → self::E2a /* = invalid-type */
+static inline-class-member method E2a|_#new#tearOff(self::E2b /* = invalid-type */ it) → self::E2a /* = invalid-type */
   return self::E2a|(it);
-static inline-class-member method E2b|(dynamic it) → self::E2b /* = invalid-type */ {
+static inline-class-member method E2b|(self::E2a /* = invalid-type */ it) → self::E2b /* = invalid-type */ {
   lowered final self::E2b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E2b|_#new#tearOff(dynamic it) → self::E2b /* = invalid-type */
+static inline-class-member method E2b|_#new#tearOff(self::E2a /* = invalid-type */ it) → self::E2b /* = invalid-type */
   return self::E2b|(it);
-static inline-class-member method E3a|(dynamic it) → self::E3a /* = invalid-type */ {
+static inline-class-member method E3a|(self::E3b /* = invalid-type */ it) → self::E3a /* = invalid-type */ {
   lowered final self::E3a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3a|_#new#tearOff(dynamic it) → self::E3a /* = invalid-type */
+static inline-class-member method E3a|_#new#tearOff(self::E3b /* = invalid-type */ it) → self::E3a /* = invalid-type */
   return self::E3a|(it);
-static inline-class-member method E3b|(dynamic it) → self::E3b /* = invalid-type */ {
+static inline-class-member method E3b|(self::E3c /* = invalid-type */ it) → self::E3b /* = invalid-type */ {
   lowered final self::E3b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3b|_#new#tearOff(dynamic it) → self::E3b /* = invalid-type */
+static inline-class-member method E3b|_#new#tearOff(self::E3c /* = invalid-type */ it) → self::E3b /* = invalid-type */
   return self::E3b|(it);
-static inline-class-member method E3c|(dynamic it) → self::E3c /* = invalid-type */ {
+static inline-class-member method E3c|(self::E3a /* = invalid-type */ it) → self::E3c /* = invalid-type */ {
   lowered final self::E3c /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3c|_#new#tearOff(dynamic it) → self::E3c /* = invalid-type */
+static inline-class-member method E3c|_#new#tearOff(self::E3a /* = invalid-type */ it) → self::E3c /* = invalid-type */
   return self::E3c|(it);
-static inline-class-member method E4|(dynamic it) → self::E4 /* = invalid-type */ {
+static inline-class-member method E4|(() → self::E4 /* = invalid-type */ it) → self::E4 /* = invalid-type */ {
   lowered final self::E4 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E4|_#new#tearOff(dynamic it) → self::E4 /* = invalid-type */
+static inline-class-member method E4|_#new#tearOff(() → self::E4 /* = invalid-type */ it) → self::E4 /* = invalid-type */
   return self::E4|(it);
-static inline-class-member method E5|(dynamic it) → self::E5 /* = invalid-type */ {
+static inline-class-member method E5|((self::E5 /* = invalid-type */) → void it) → self::E5 /* = invalid-type */ {
   lowered final self::E5 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E5|_#new#tearOff(dynamic it) → self::E5 /* = invalid-type */
+static inline-class-member method E5|_#new#tearOff((self::E5 /* = invalid-type */) → void it) → self::E5 /* = invalid-type */
   return self::E5|(it);
-static inline-class-member method E6|(dynamic it) → self::E6 /* = invalid-type */ {
+static inline-class-member method E6|((self::E6 /* = invalid-type */, core::int) it) → self::E6 /* = invalid-type */ {
   lowered final self::E6 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E6|_#new#tearOff(dynamic it) → self::E6 /* = invalid-type */
+static inline-class-member method E6|_#new#tearOff((self::E6 /* = invalid-type */, core::int) it) → self::E6 /* = invalid-type */
   return self::E6|(it);
-static inline-class-member method E7|_#new#tearOff(dynamic it) → self::E7 /* = invalid-type */
+static inline-class-member method E7|_#new#tearOff(<T extends self::E7 /* = invalid-type */ = dynamic>() → void it) → self::E7 /* = invalid-type */
   return self::E7|(it);
-static inline-class-member method E7|(dynamic it) → self::E7 /* = invalid-type */ {
+static inline-class-member method E7|(<T extends self::E7 /* = invalid-type */ = dynamic>() → void it) → self::E7 /* = invalid-type */ {
   lowered final self::E7 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E8|<T extends core::Object? = dynamic>(dynamic it) → self::E8<self::E8|::T%> /* = invalid-type */ {
+static inline-class-member method E8|<T extends core::Object? = dynamic>(core::List<self::E8<dynamic> /* = invalid-type */> it) → self::E8<self::E8|::T%> /* = invalid-type */ {
   lowered final self::E8<self::E8|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E8|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E8<self::E8|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E8|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E8<dynamic> /* = invalid-type */> it) → self::E8<self::E8|_#new#tearOff::T%> /* = invalid-type */
   return self::E8|<self::E8|_#new#tearOff::T%>(it);
-static inline-class-member method E9|(dynamic it) → self::E9 /* = invalid-type */ {
+static inline-class-member method E9|(self::E9 /* = invalid-type */ it) → self::E9 /* = invalid-type */ {
   lowered final self::E9 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E9|_#new#tearOff(dynamic it) → self::E9 /* = invalid-type */
+static inline-class-member method E9|_#new#tearOff(self::E9 /* = invalid-type */ it) → self::E9 /* = invalid-type */
   return self::E9|(it);
-static inline-class-member method E10|<T extends core::Object? = dynamic>(dynamic it) → self::E10<self::E10|::T%> /* = invalid-type */ {
+static inline-class-member method E10|<T extends core::Object? = dynamic>(self::E10<self::E10|::T%> /* = invalid-type */ it) → self::E10<self::E10|::T%> /* = invalid-type */ {
   lowered final self::E10<self::E10|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E10|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E10|_#new#tearOff<T extends core::Object? = dynamic>(self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */ it) → self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */
   return self::E10|<self::E10|_#new#tearOff::T%>(it);
-static inline-class-member method E11|(dynamic it) → self::E11 /* = invalid-type */ {
+static inline-class-member method E11|(() → self::E11 /* = invalid-type */ it) → self::E11 /* = invalid-type */ {
   lowered final self::E11 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E11|_#new#tearOff(dynamic it) → self::E11 /* = invalid-type */
+static inline-class-member method E11|_#new#tearOff(() → self::E11 /* = invalid-type */ it) → self::E11 /* = invalid-type */
   return self::E11|(it);
-static inline-class-member method E12|(dynamic it) → self::E12 /* = invalid-type */ {
+static inline-class-member method E12|((self::E12 /* = invalid-type */) → void it) → self::E12 /* = invalid-type */ {
   lowered final self::E12 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E12|_#new#tearOff(dynamic it) → self::E12 /* = invalid-type */
+static inline-class-member method E12|_#new#tearOff((self::E12 /* = invalid-type */) → void it) → self::E12 /* = invalid-type */
   return self::E12|(it);
-static inline-class-member method E13|(dynamic it) → self::E13 /* = invalid-type */ {
+static inline-class-member method E13|(<T extends self::E13 /* = invalid-type */ = dynamic>() → void it) → self::E13 /* = invalid-type */ {
   lowered final self::E13 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E13|_#new#tearOff(dynamic it) → self::E13 /* = invalid-type */
+static inline-class-member method E13|_#new#tearOff(<T extends self::E13 /* = invalid-type */ = dynamic>() → void it) → self::E13 /* = invalid-type */
   return self::E13|(it);
-static inline-class-member method E14|(dynamic it) → self::E14 /* = core::int */ {
+static inline-class-member method E14|(core::int it) → self::E14 /* = core::int */ {
   lowered final self::E14 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E14|_#new#tearOff(dynamic it) → self::E14 /* = core::int */
+static inline-class-member method E14|_#new#tearOff(core::int it) → self::E14 /* = core::int */
   return self::E14|(it);
-static inline-class-member method E15a|(dynamic it) → self::E15a /* = invalid-type */ {
+static inline-class-member method E15a|(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
   lowered final self::E15a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E15a|_#new#tearOff(dynamic it) → self::E15a /* = invalid-type */
+static inline-class-member method E15a|_#new#tearOff(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   return self::E15a|(it);
-static inline-class-member method E15b|(dynamic it) → self::E15b /* = invalid-type */ {
+static inline-class-member method E15b|(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
   lowered final self::E15b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E15b|_#new#tearOff(dynamic it) → self::E15b /* = invalid-type */
+static inline-class-member method E15b|_#new#tearOff(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   return self::E15b|(it);
-static inline-class-member method E16a|(dynamic it) → self::E16a /* = invalid-type */ {
+static inline-class-member method E16a|(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */ {
   lowered final self::E16a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E16a|_#new#tearOff(dynamic it) → self::E16a /* = invalid-type */
+static inline-class-member method E16a|_#new#tearOff(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */
   return self::E16a|(it);
-static inline-class-member method E16b|(dynamic it) → self::E16b /* = invalid-type */ {
+static inline-class-member method E16b|(core::List<self::E16a /* = invalid-type */> it) → self::E16b /* = invalid-type */ {
   lowered final self::E16b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E16b|_#new#tearOff(dynamic it) → self::E16b /* = invalid-type */
+static inline-class-member method E16b|_#new#tearOff(core::List<self::E16a /* = invalid-type */> it) → self::E16b /* = invalid-type */
   return self::E16b|(it);
-static inline-class-member method E17|(dynamic it) → self::E17 /* = invalid-type */ {
+static inline-class-member method E17|((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */ {
   lowered final self::E17 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E17|_#new#tearOff(dynamic it) → self::E17 /* = invalid-type */
+static inline-class-member method E17|_#new#tearOff((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   return self::E17|(it);
-static inline-class-member method E18|(dynamic it) → self::E18 /* = invalid-type */ {
+static inline-class-member method E18|((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
   lowered final self::E18 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E18|_#new#tearOff(dynamic it) → self::E18 /* = invalid-type */
+static inline-class-member method E18|_#new#tearOff((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   return self::E18|(it);
-static inline-class-member method E19a|(dynamic it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ {
+static inline-class-member method E19a|((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ {
   lowered final self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ #this = it;
   return #this;
 }
-static inline-class-member method E19a|_#new#tearOff(dynamic it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
+static inline-class-member method E19a|_#new#tearOff((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
   return self::E19a|(it);
-static inline-class-member method E19b|(dynamic it) → self::E19b /* = core::int */ {
+static inline-class-member method E19b|(core::int it) → self::E19b /* = core::int */ {
   lowered final self::E19b /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E19b|_#new#tearOff(dynamic it) → self::E19b /* = core::int */
+static inline-class-member method E19b|_#new#tearOff(core::int it) → self::E19b /* = core::int */
   return self::E19b|(it);
-static inline-class-member method E20|(dynamic it) → self::E20 /* = invalid-type */ {
+static inline-class-member method E20|(invalid-type it) → self::E20 /* = invalid-type */ {
   lowered final self::E20 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E20|_#new#tearOff(dynamic it) → self::E20 /* = invalid-type */
+static inline-class-member method E20|_#new#tearOff(invalid-type it) → self::E20 /* = invalid-type */
   return self::E20|(it);
-static inline-class-member method E21|(dynamic it) → self::E21 /* = invalid-type */ {
+static inline-class-member method E21|(invalid-type it) → self::E21 /* = invalid-type */ {
   lowered final self::E21 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E21|_#new#tearOff(dynamic it) → self::E21 /* = invalid-type */
+static inline-class-member method E21|_#new#tearOff(invalid-type it) → self::E21 /* = invalid-type */
   return self::E21|(it);
-static inline-class-member method E22|(dynamic it) → self::E22 /* = invalid-type */ {
+static inline-class-member method E22|(invalid-type it) → self::E22 /* = invalid-type */ {
   lowered final self::E22 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E22|_#new#tearOff(dynamic it) → self::E22 /* = invalid-type */
+static inline-class-member method E22|_#new#tearOff(invalid-type it) → self::E22 /* = invalid-type */
   return self::E22|(it);
-static inline-class-member method E23|(dynamic it) → self::E23 /* = invalid-type */ {
+static inline-class-member method E23|(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
   lowered final self::E23 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E23|_#new#tearOff(dynamic it) → self::E23 /* = invalid-type */
+static inline-class-member method E23|_#new#tearOff(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   return self::E23|(it);
-static inline-class-member method E24|<T extends core::Object? = dynamic>(dynamic it) → self::E24<self::E24|::T%> /* = invalid-type */ {
+static inline-class-member method E24|<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|::T%> /* = invalid-type */ {
   lowered final self::E24<self::E24|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E24|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E24<self::E24|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E24|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|_#new#tearOff::T%> /* = invalid-type */
   return self::E24|<self::E24|_#new#tearOff::T%>(it);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#Alias14#fromEnvironment#tearOff<unrelated T extends core::Object? = dynamic>(core::String name, {core::int defaultValue = #C1}) → core::int
   return core::int::fromEnvironment(name, defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.strong.transformed.expect
index f5a4965..89d82bc 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.strong.transformed.expect
@@ -331,185 +331,185 @@
   constructor • = self::E24|;
   tearoff • = self::E24|_#new#tearOff;
 }
-static inline-class-member method E1|(dynamic it) → self::E1 /* = invalid-type */ {
+static inline-class-member method E1|(self::E1 /* = invalid-type */ it) → self::E1 /* = invalid-type */ {
   lowered final self::E1 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E1|_#new#tearOff(dynamic it) → self::E1 /* = invalid-type */
+static inline-class-member method E1|_#new#tearOff(self::E1 /* = invalid-type */ it) → self::E1 /* = invalid-type */
   return self::E1|(it);
-static inline-class-member method E2a|(dynamic it) → self::E2a /* = invalid-type */ {
+static inline-class-member method E2a|(self::E2b /* = invalid-type */ it) → self::E2a /* = invalid-type */ {
   lowered final self::E2a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E2a|_#new#tearOff(dynamic it) → self::E2a /* = invalid-type */
+static inline-class-member method E2a|_#new#tearOff(self::E2b /* = invalid-type */ it) → self::E2a /* = invalid-type */
   return self::E2a|(it);
-static inline-class-member method E2b|(dynamic it) → self::E2b /* = invalid-type */ {
+static inline-class-member method E2b|(self::E2a /* = invalid-type */ it) → self::E2b /* = invalid-type */ {
   lowered final self::E2b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E2b|_#new#tearOff(dynamic it) → self::E2b /* = invalid-type */
+static inline-class-member method E2b|_#new#tearOff(self::E2a /* = invalid-type */ it) → self::E2b /* = invalid-type */
   return self::E2b|(it);
-static inline-class-member method E3a|(dynamic it) → self::E3a /* = invalid-type */ {
+static inline-class-member method E3a|(self::E3b /* = invalid-type */ it) → self::E3a /* = invalid-type */ {
   lowered final self::E3a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3a|_#new#tearOff(dynamic it) → self::E3a /* = invalid-type */
+static inline-class-member method E3a|_#new#tearOff(self::E3b /* = invalid-type */ it) → self::E3a /* = invalid-type */
   return self::E3a|(it);
-static inline-class-member method E3b|(dynamic it) → self::E3b /* = invalid-type */ {
+static inline-class-member method E3b|(self::E3c /* = invalid-type */ it) → self::E3b /* = invalid-type */ {
   lowered final self::E3b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3b|_#new#tearOff(dynamic it) → self::E3b /* = invalid-type */
+static inline-class-member method E3b|_#new#tearOff(self::E3c /* = invalid-type */ it) → self::E3b /* = invalid-type */
   return self::E3b|(it);
-static inline-class-member method E3c|(dynamic it) → self::E3c /* = invalid-type */ {
+static inline-class-member method E3c|(self::E3a /* = invalid-type */ it) → self::E3c /* = invalid-type */ {
   lowered final self::E3c /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3c|_#new#tearOff(dynamic it) → self::E3c /* = invalid-type */
+static inline-class-member method E3c|_#new#tearOff(self::E3a /* = invalid-type */ it) → self::E3c /* = invalid-type */
   return self::E3c|(it);
-static inline-class-member method E4|(dynamic it) → self::E4 /* = invalid-type */ {
+static inline-class-member method E4|(() → self::E4 /* = invalid-type */ it) → self::E4 /* = invalid-type */ {
   lowered final self::E4 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E4|_#new#tearOff(dynamic it) → self::E4 /* = invalid-type */
+static inline-class-member method E4|_#new#tearOff(() → self::E4 /* = invalid-type */ it) → self::E4 /* = invalid-type */
   return self::E4|(it);
-static inline-class-member method E5|(dynamic it) → self::E5 /* = invalid-type */ {
+static inline-class-member method E5|((self::E5 /* = invalid-type */) → void it) → self::E5 /* = invalid-type */ {
   lowered final self::E5 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E5|_#new#tearOff(dynamic it) → self::E5 /* = invalid-type */
+static inline-class-member method E5|_#new#tearOff((self::E5 /* = invalid-type */) → void it) → self::E5 /* = invalid-type */
   return self::E5|(it);
-static inline-class-member method E6|(dynamic it) → self::E6 /* = invalid-type */ {
+static inline-class-member method E6|((self::E6 /* = invalid-type */, core::int) it) → self::E6 /* = invalid-type */ {
   lowered final self::E6 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E6|_#new#tearOff(dynamic it) → self::E6 /* = invalid-type */
+static inline-class-member method E6|_#new#tearOff((self::E6 /* = invalid-type */, core::int) it) → self::E6 /* = invalid-type */
   return self::E6|(it);
-static inline-class-member method E7|_#new#tearOff(dynamic it) → self::E7 /* = invalid-type */
+static inline-class-member method E7|_#new#tearOff(<T extends self::E7 /* = invalid-type */ = dynamic>() → void it) → self::E7 /* = invalid-type */
   return self::E7|(it);
-static inline-class-member method E7|(dynamic it) → self::E7 /* = invalid-type */ {
+static inline-class-member method E7|(<T extends self::E7 /* = invalid-type */ = dynamic>() → void it) → self::E7 /* = invalid-type */ {
   lowered final self::E7 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E8|<T extends core::Object? = dynamic>(dynamic it) → self::E8<self::E8|::T%> /* = invalid-type */ {
+static inline-class-member method E8|<T extends core::Object? = dynamic>(core::List<self::E8<dynamic> /* = invalid-type */> it) → self::E8<self::E8|::T%> /* = invalid-type */ {
   lowered final self::E8<self::E8|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E8|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E8<self::E8|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E8|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E8<dynamic> /* = invalid-type */> it) → self::E8<self::E8|_#new#tearOff::T%> /* = invalid-type */
   return self::E8|<self::E8|_#new#tearOff::T%>(it);
-static inline-class-member method E9|(dynamic it) → self::E9 /* = invalid-type */ {
+static inline-class-member method E9|(self::E9 /* = invalid-type */ it) → self::E9 /* = invalid-type */ {
   lowered final self::E9 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E9|_#new#tearOff(dynamic it) → self::E9 /* = invalid-type */
+static inline-class-member method E9|_#new#tearOff(self::E9 /* = invalid-type */ it) → self::E9 /* = invalid-type */
   return self::E9|(it);
-static inline-class-member method E10|<T extends core::Object? = dynamic>(dynamic it) → self::E10<self::E10|::T%> /* = invalid-type */ {
+static inline-class-member method E10|<T extends core::Object? = dynamic>(self::E10<self::E10|::T%> /* = invalid-type */ it) → self::E10<self::E10|::T%> /* = invalid-type */ {
   lowered final self::E10<self::E10|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E10|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E10|_#new#tearOff<T extends core::Object? = dynamic>(self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */ it) → self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */
   return self::E10|<self::E10|_#new#tearOff::T%>(it);
-static inline-class-member method E11|(dynamic it) → self::E11 /* = invalid-type */ {
+static inline-class-member method E11|(() → self::E11 /* = invalid-type */ it) → self::E11 /* = invalid-type */ {
   lowered final self::E11 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E11|_#new#tearOff(dynamic it) → self::E11 /* = invalid-type */
+static inline-class-member method E11|_#new#tearOff(() → self::E11 /* = invalid-type */ it) → self::E11 /* = invalid-type */
   return self::E11|(it);
-static inline-class-member method E12|(dynamic it) → self::E12 /* = invalid-type */ {
+static inline-class-member method E12|((self::E12 /* = invalid-type */) → void it) → self::E12 /* = invalid-type */ {
   lowered final self::E12 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E12|_#new#tearOff(dynamic it) → self::E12 /* = invalid-type */
+static inline-class-member method E12|_#new#tearOff((self::E12 /* = invalid-type */) → void it) → self::E12 /* = invalid-type */
   return self::E12|(it);
-static inline-class-member method E13|(dynamic it) → self::E13 /* = invalid-type */ {
+static inline-class-member method E13|(<T extends self::E13 /* = invalid-type */ = dynamic>() → void it) → self::E13 /* = invalid-type */ {
   lowered final self::E13 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E13|_#new#tearOff(dynamic it) → self::E13 /* = invalid-type */
+static inline-class-member method E13|_#new#tearOff(<T extends self::E13 /* = invalid-type */ = dynamic>() → void it) → self::E13 /* = invalid-type */
   return self::E13|(it);
-static inline-class-member method E14|(dynamic it) → self::E14 /* = core::int */ {
+static inline-class-member method E14|(core::int it) → self::E14 /* = core::int */ {
   lowered final self::E14 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E14|_#new#tearOff(dynamic it) → self::E14 /* = core::int */
+static inline-class-member method E14|_#new#tearOff(core::int it) → self::E14 /* = core::int */
   return self::E14|(it);
-static inline-class-member method E15a|(dynamic it) → self::E15a /* = invalid-type */ {
+static inline-class-member method E15a|(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
   lowered final self::E15a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E15a|_#new#tearOff(dynamic it) → self::E15a /* = invalid-type */
+static inline-class-member method E15a|_#new#tearOff(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   return self::E15a|(it);
-static inline-class-member method E15b|(dynamic it) → self::E15b /* = invalid-type */ {
+static inline-class-member method E15b|(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
   lowered final self::E15b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E15b|_#new#tearOff(dynamic it) → self::E15b /* = invalid-type */
+static inline-class-member method E15b|_#new#tearOff(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   return self::E15b|(it);
-static inline-class-member method E16a|(dynamic it) → self::E16a /* = invalid-type */ {
+static inline-class-member method E16a|(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */ {
   lowered final self::E16a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E16a|_#new#tearOff(dynamic it) → self::E16a /* = invalid-type */
+static inline-class-member method E16a|_#new#tearOff(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */
   return self::E16a|(it);
-static inline-class-member method E16b|(dynamic it) → self::E16b /* = invalid-type */ {
+static inline-class-member method E16b|(core::List<self::E16a /* = invalid-type */> it) → self::E16b /* = invalid-type */ {
   lowered final self::E16b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E16b|_#new#tearOff(dynamic it) → self::E16b /* = invalid-type */
+static inline-class-member method E16b|_#new#tearOff(core::List<self::E16a /* = invalid-type */> it) → self::E16b /* = invalid-type */
   return self::E16b|(it);
-static inline-class-member method E17|(dynamic it) → self::E17 /* = invalid-type */ {
+static inline-class-member method E17|((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */ {
   lowered final self::E17 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E17|_#new#tearOff(dynamic it) → self::E17 /* = invalid-type */
+static inline-class-member method E17|_#new#tearOff((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   return self::E17|(it);
-static inline-class-member method E18|(dynamic it) → self::E18 /* = invalid-type */ {
+static inline-class-member method E18|((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
   lowered final self::E18 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E18|_#new#tearOff(dynamic it) → self::E18 /* = invalid-type */
+static inline-class-member method E18|_#new#tearOff((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   return self::E18|(it);
-static inline-class-member method E19a|(dynamic it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ {
+static inline-class-member method E19a|((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ {
   lowered final self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ #this = it;
   return #this;
 }
-static inline-class-member method E19a|_#new#tearOff(dynamic it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
+static inline-class-member method E19a|_#new#tearOff((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
   return self::E19a|(it);
-static inline-class-member method E19b|(dynamic it) → self::E19b /* = core::int */ {
+static inline-class-member method E19b|(core::int it) → self::E19b /* = core::int */ {
   lowered final self::E19b /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E19b|_#new#tearOff(dynamic it) → self::E19b /* = core::int */
+static inline-class-member method E19b|_#new#tearOff(core::int it) → self::E19b /* = core::int */
   return self::E19b|(it);
-static inline-class-member method E20|(dynamic it) → self::E20 /* = invalid-type */ {
+static inline-class-member method E20|(invalid-type it) → self::E20 /* = invalid-type */ {
   lowered final self::E20 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E20|_#new#tearOff(dynamic it) → self::E20 /* = invalid-type */
+static inline-class-member method E20|_#new#tearOff(invalid-type it) → self::E20 /* = invalid-type */
   return self::E20|(it);
-static inline-class-member method E21|(dynamic it) → self::E21 /* = invalid-type */ {
+static inline-class-member method E21|(invalid-type it) → self::E21 /* = invalid-type */ {
   lowered final self::E21 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E21|_#new#tearOff(dynamic it) → self::E21 /* = invalid-type */
+static inline-class-member method E21|_#new#tearOff(invalid-type it) → self::E21 /* = invalid-type */
   return self::E21|(it);
-static inline-class-member method E22|(dynamic it) → self::E22 /* = invalid-type */ {
+static inline-class-member method E22|(invalid-type it) → self::E22 /* = invalid-type */ {
   lowered final self::E22 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E22|_#new#tearOff(dynamic it) → self::E22 /* = invalid-type */
+static inline-class-member method E22|_#new#tearOff(invalid-type it) → self::E22 /* = invalid-type */
   return self::E22|(it);
-static inline-class-member method E23|(dynamic it) → self::E23 /* = invalid-type */ {
+static inline-class-member method E23|(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
   lowered final self::E23 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E23|_#new#tearOff(dynamic it) → self::E23 /* = invalid-type */
+static inline-class-member method E23|_#new#tearOff(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   return self::E23|(it);
-static inline-class-member method E24|<T extends core::Object? = dynamic>(dynamic it) → self::E24<self::E24|::T%> /* = invalid-type */ {
+static inline-class-member method E24|<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|::T%> /* = invalid-type */ {
   lowered final self::E24<self::E24|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E24|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E24<self::E24|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E24|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|_#new#tearOff::T%> /* = invalid-type */
   return self::E24|<self::E24|_#new#tearOff::T%>(it);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#Alias14#fromEnvironment#tearOff<unrelated T extends core::Object? = dynamic>(core::String name, {core::int defaultValue = #C1}) → core::int
   return core::int::fromEnvironment(name, defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.expect
index f5a4965..89d82bc 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.expect
@@ -331,185 +331,185 @@
   constructor • = self::E24|;
   tearoff • = self::E24|_#new#tearOff;
 }
-static inline-class-member method E1|(dynamic it) → self::E1 /* = invalid-type */ {
+static inline-class-member method E1|(self::E1 /* = invalid-type */ it) → self::E1 /* = invalid-type */ {
   lowered final self::E1 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E1|_#new#tearOff(dynamic it) → self::E1 /* = invalid-type */
+static inline-class-member method E1|_#new#tearOff(self::E1 /* = invalid-type */ it) → self::E1 /* = invalid-type */
   return self::E1|(it);
-static inline-class-member method E2a|(dynamic it) → self::E2a /* = invalid-type */ {
+static inline-class-member method E2a|(self::E2b /* = invalid-type */ it) → self::E2a /* = invalid-type */ {
   lowered final self::E2a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E2a|_#new#tearOff(dynamic it) → self::E2a /* = invalid-type */
+static inline-class-member method E2a|_#new#tearOff(self::E2b /* = invalid-type */ it) → self::E2a /* = invalid-type */
   return self::E2a|(it);
-static inline-class-member method E2b|(dynamic it) → self::E2b /* = invalid-type */ {
+static inline-class-member method E2b|(self::E2a /* = invalid-type */ it) → self::E2b /* = invalid-type */ {
   lowered final self::E2b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E2b|_#new#tearOff(dynamic it) → self::E2b /* = invalid-type */
+static inline-class-member method E2b|_#new#tearOff(self::E2a /* = invalid-type */ it) → self::E2b /* = invalid-type */
   return self::E2b|(it);
-static inline-class-member method E3a|(dynamic it) → self::E3a /* = invalid-type */ {
+static inline-class-member method E3a|(self::E3b /* = invalid-type */ it) → self::E3a /* = invalid-type */ {
   lowered final self::E3a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3a|_#new#tearOff(dynamic it) → self::E3a /* = invalid-type */
+static inline-class-member method E3a|_#new#tearOff(self::E3b /* = invalid-type */ it) → self::E3a /* = invalid-type */
   return self::E3a|(it);
-static inline-class-member method E3b|(dynamic it) → self::E3b /* = invalid-type */ {
+static inline-class-member method E3b|(self::E3c /* = invalid-type */ it) → self::E3b /* = invalid-type */ {
   lowered final self::E3b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3b|_#new#tearOff(dynamic it) → self::E3b /* = invalid-type */
+static inline-class-member method E3b|_#new#tearOff(self::E3c /* = invalid-type */ it) → self::E3b /* = invalid-type */
   return self::E3b|(it);
-static inline-class-member method E3c|(dynamic it) → self::E3c /* = invalid-type */ {
+static inline-class-member method E3c|(self::E3a /* = invalid-type */ it) → self::E3c /* = invalid-type */ {
   lowered final self::E3c /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3c|_#new#tearOff(dynamic it) → self::E3c /* = invalid-type */
+static inline-class-member method E3c|_#new#tearOff(self::E3a /* = invalid-type */ it) → self::E3c /* = invalid-type */
   return self::E3c|(it);
-static inline-class-member method E4|(dynamic it) → self::E4 /* = invalid-type */ {
+static inline-class-member method E4|(() → self::E4 /* = invalid-type */ it) → self::E4 /* = invalid-type */ {
   lowered final self::E4 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E4|_#new#tearOff(dynamic it) → self::E4 /* = invalid-type */
+static inline-class-member method E4|_#new#tearOff(() → self::E4 /* = invalid-type */ it) → self::E4 /* = invalid-type */
   return self::E4|(it);
-static inline-class-member method E5|(dynamic it) → self::E5 /* = invalid-type */ {
+static inline-class-member method E5|((self::E5 /* = invalid-type */) → void it) → self::E5 /* = invalid-type */ {
   lowered final self::E5 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E5|_#new#tearOff(dynamic it) → self::E5 /* = invalid-type */
+static inline-class-member method E5|_#new#tearOff((self::E5 /* = invalid-type */) → void it) → self::E5 /* = invalid-type */
   return self::E5|(it);
-static inline-class-member method E6|(dynamic it) → self::E6 /* = invalid-type */ {
+static inline-class-member method E6|((self::E6 /* = invalid-type */, core::int) it) → self::E6 /* = invalid-type */ {
   lowered final self::E6 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E6|_#new#tearOff(dynamic it) → self::E6 /* = invalid-type */
+static inline-class-member method E6|_#new#tearOff((self::E6 /* = invalid-type */, core::int) it) → self::E6 /* = invalid-type */
   return self::E6|(it);
-static inline-class-member method E7|_#new#tearOff(dynamic it) → self::E7 /* = invalid-type */
+static inline-class-member method E7|_#new#tearOff(<T extends self::E7 /* = invalid-type */ = dynamic>() → void it) → self::E7 /* = invalid-type */
   return self::E7|(it);
-static inline-class-member method E7|(dynamic it) → self::E7 /* = invalid-type */ {
+static inline-class-member method E7|(<T extends self::E7 /* = invalid-type */ = dynamic>() → void it) → self::E7 /* = invalid-type */ {
   lowered final self::E7 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E8|<T extends core::Object? = dynamic>(dynamic it) → self::E8<self::E8|::T%> /* = invalid-type */ {
+static inline-class-member method E8|<T extends core::Object? = dynamic>(core::List<self::E8<dynamic> /* = invalid-type */> it) → self::E8<self::E8|::T%> /* = invalid-type */ {
   lowered final self::E8<self::E8|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E8|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E8<self::E8|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E8|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E8<dynamic> /* = invalid-type */> it) → self::E8<self::E8|_#new#tearOff::T%> /* = invalid-type */
   return self::E8|<self::E8|_#new#tearOff::T%>(it);
-static inline-class-member method E9|(dynamic it) → self::E9 /* = invalid-type */ {
+static inline-class-member method E9|(self::E9 /* = invalid-type */ it) → self::E9 /* = invalid-type */ {
   lowered final self::E9 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E9|_#new#tearOff(dynamic it) → self::E9 /* = invalid-type */
+static inline-class-member method E9|_#new#tearOff(self::E9 /* = invalid-type */ it) → self::E9 /* = invalid-type */
   return self::E9|(it);
-static inline-class-member method E10|<T extends core::Object? = dynamic>(dynamic it) → self::E10<self::E10|::T%> /* = invalid-type */ {
+static inline-class-member method E10|<T extends core::Object? = dynamic>(self::E10<self::E10|::T%> /* = invalid-type */ it) → self::E10<self::E10|::T%> /* = invalid-type */ {
   lowered final self::E10<self::E10|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E10|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E10|_#new#tearOff<T extends core::Object? = dynamic>(self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */ it) → self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */
   return self::E10|<self::E10|_#new#tearOff::T%>(it);
-static inline-class-member method E11|(dynamic it) → self::E11 /* = invalid-type */ {
+static inline-class-member method E11|(() → self::E11 /* = invalid-type */ it) → self::E11 /* = invalid-type */ {
   lowered final self::E11 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E11|_#new#tearOff(dynamic it) → self::E11 /* = invalid-type */
+static inline-class-member method E11|_#new#tearOff(() → self::E11 /* = invalid-type */ it) → self::E11 /* = invalid-type */
   return self::E11|(it);
-static inline-class-member method E12|(dynamic it) → self::E12 /* = invalid-type */ {
+static inline-class-member method E12|((self::E12 /* = invalid-type */) → void it) → self::E12 /* = invalid-type */ {
   lowered final self::E12 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E12|_#new#tearOff(dynamic it) → self::E12 /* = invalid-type */
+static inline-class-member method E12|_#new#tearOff((self::E12 /* = invalid-type */) → void it) → self::E12 /* = invalid-type */
   return self::E12|(it);
-static inline-class-member method E13|(dynamic it) → self::E13 /* = invalid-type */ {
+static inline-class-member method E13|(<T extends self::E13 /* = invalid-type */ = dynamic>() → void it) → self::E13 /* = invalid-type */ {
   lowered final self::E13 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E13|_#new#tearOff(dynamic it) → self::E13 /* = invalid-type */
+static inline-class-member method E13|_#new#tearOff(<T extends self::E13 /* = invalid-type */ = dynamic>() → void it) → self::E13 /* = invalid-type */
   return self::E13|(it);
-static inline-class-member method E14|(dynamic it) → self::E14 /* = core::int */ {
+static inline-class-member method E14|(core::int it) → self::E14 /* = core::int */ {
   lowered final self::E14 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E14|_#new#tearOff(dynamic it) → self::E14 /* = core::int */
+static inline-class-member method E14|_#new#tearOff(core::int it) → self::E14 /* = core::int */
   return self::E14|(it);
-static inline-class-member method E15a|(dynamic it) → self::E15a /* = invalid-type */ {
+static inline-class-member method E15a|(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
   lowered final self::E15a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E15a|_#new#tearOff(dynamic it) → self::E15a /* = invalid-type */
+static inline-class-member method E15a|_#new#tearOff(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   return self::E15a|(it);
-static inline-class-member method E15b|(dynamic it) → self::E15b /* = invalid-type */ {
+static inline-class-member method E15b|(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
   lowered final self::E15b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E15b|_#new#tearOff(dynamic it) → self::E15b /* = invalid-type */
+static inline-class-member method E15b|_#new#tearOff(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   return self::E15b|(it);
-static inline-class-member method E16a|(dynamic it) → self::E16a /* = invalid-type */ {
+static inline-class-member method E16a|(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */ {
   lowered final self::E16a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E16a|_#new#tearOff(dynamic it) → self::E16a /* = invalid-type */
+static inline-class-member method E16a|_#new#tearOff(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */
   return self::E16a|(it);
-static inline-class-member method E16b|(dynamic it) → self::E16b /* = invalid-type */ {
+static inline-class-member method E16b|(core::List<self::E16a /* = invalid-type */> it) → self::E16b /* = invalid-type */ {
   lowered final self::E16b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E16b|_#new#tearOff(dynamic it) → self::E16b /* = invalid-type */
+static inline-class-member method E16b|_#new#tearOff(core::List<self::E16a /* = invalid-type */> it) → self::E16b /* = invalid-type */
   return self::E16b|(it);
-static inline-class-member method E17|(dynamic it) → self::E17 /* = invalid-type */ {
+static inline-class-member method E17|((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */ {
   lowered final self::E17 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E17|_#new#tearOff(dynamic it) → self::E17 /* = invalid-type */
+static inline-class-member method E17|_#new#tearOff((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   return self::E17|(it);
-static inline-class-member method E18|(dynamic it) → self::E18 /* = invalid-type */ {
+static inline-class-member method E18|((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
   lowered final self::E18 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E18|_#new#tearOff(dynamic it) → self::E18 /* = invalid-type */
+static inline-class-member method E18|_#new#tearOff((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   return self::E18|(it);
-static inline-class-member method E19a|(dynamic it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ {
+static inline-class-member method E19a|((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ {
   lowered final self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ #this = it;
   return #this;
 }
-static inline-class-member method E19a|_#new#tearOff(dynamic it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
+static inline-class-member method E19a|_#new#tearOff((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
   return self::E19a|(it);
-static inline-class-member method E19b|(dynamic it) → self::E19b /* = core::int */ {
+static inline-class-member method E19b|(core::int it) → self::E19b /* = core::int */ {
   lowered final self::E19b /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E19b|_#new#tearOff(dynamic it) → self::E19b /* = core::int */
+static inline-class-member method E19b|_#new#tearOff(core::int it) → self::E19b /* = core::int */
   return self::E19b|(it);
-static inline-class-member method E20|(dynamic it) → self::E20 /* = invalid-type */ {
+static inline-class-member method E20|(invalid-type it) → self::E20 /* = invalid-type */ {
   lowered final self::E20 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E20|_#new#tearOff(dynamic it) → self::E20 /* = invalid-type */
+static inline-class-member method E20|_#new#tearOff(invalid-type it) → self::E20 /* = invalid-type */
   return self::E20|(it);
-static inline-class-member method E21|(dynamic it) → self::E21 /* = invalid-type */ {
+static inline-class-member method E21|(invalid-type it) → self::E21 /* = invalid-type */ {
   lowered final self::E21 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E21|_#new#tearOff(dynamic it) → self::E21 /* = invalid-type */
+static inline-class-member method E21|_#new#tearOff(invalid-type it) → self::E21 /* = invalid-type */
   return self::E21|(it);
-static inline-class-member method E22|(dynamic it) → self::E22 /* = invalid-type */ {
+static inline-class-member method E22|(invalid-type it) → self::E22 /* = invalid-type */ {
   lowered final self::E22 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E22|_#new#tearOff(dynamic it) → self::E22 /* = invalid-type */
+static inline-class-member method E22|_#new#tearOff(invalid-type it) → self::E22 /* = invalid-type */
   return self::E22|(it);
-static inline-class-member method E23|(dynamic it) → self::E23 /* = invalid-type */ {
+static inline-class-member method E23|(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
   lowered final self::E23 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E23|_#new#tearOff(dynamic it) → self::E23 /* = invalid-type */
+static inline-class-member method E23|_#new#tearOff(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   return self::E23|(it);
-static inline-class-member method E24|<T extends core::Object? = dynamic>(dynamic it) → self::E24<self::E24|::T%> /* = invalid-type */ {
+static inline-class-member method E24|<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|::T%> /* = invalid-type */ {
   lowered final self::E24<self::E24|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E24|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E24<self::E24|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E24|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|_#new#tearOff::T%> /* = invalid-type */
   return self::E24|<self::E24|_#new#tearOff::T%>(it);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#Alias14#fromEnvironment#tearOff<unrelated T extends core::Object? = dynamic>(core::String name, {core::int defaultValue = #C1}) → core::int
   return core::int::fromEnvironment(name, defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.modular.expect
index f5a4965..89d82bc 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.modular.expect
@@ -331,185 +331,185 @@
   constructor • = self::E24|;
   tearoff • = self::E24|_#new#tearOff;
 }
-static inline-class-member method E1|(dynamic it) → self::E1 /* = invalid-type */ {
+static inline-class-member method E1|(self::E1 /* = invalid-type */ it) → self::E1 /* = invalid-type */ {
   lowered final self::E1 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E1|_#new#tearOff(dynamic it) → self::E1 /* = invalid-type */
+static inline-class-member method E1|_#new#tearOff(self::E1 /* = invalid-type */ it) → self::E1 /* = invalid-type */
   return self::E1|(it);
-static inline-class-member method E2a|(dynamic it) → self::E2a /* = invalid-type */ {
+static inline-class-member method E2a|(self::E2b /* = invalid-type */ it) → self::E2a /* = invalid-type */ {
   lowered final self::E2a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E2a|_#new#tearOff(dynamic it) → self::E2a /* = invalid-type */
+static inline-class-member method E2a|_#new#tearOff(self::E2b /* = invalid-type */ it) → self::E2a /* = invalid-type */
   return self::E2a|(it);
-static inline-class-member method E2b|(dynamic it) → self::E2b /* = invalid-type */ {
+static inline-class-member method E2b|(self::E2a /* = invalid-type */ it) → self::E2b /* = invalid-type */ {
   lowered final self::E2b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E2b|_#new#tearOff(dynamic it) → self::E2b /* = invalid-type */
+static inline-class-member method E2b|_#new#tearOff(self::E2a /* = invalid-type */ it) → self::E2b /* = invalid-type */
   return self::E2b|(it);
-static inline-class-member method E3a|(dynamic it) → self::E3a /* = invalid-type */ {
+static inline-class-member method E3a|(self::E3b /* = invalid-type */ it) → self::E3a /* = invalid-type */ {
   lowered final self::E3a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3a|_#new#tearOff(dynamic it) → self::E3a /* = invalid-type */
+static inline-class-member method E3a|_#new#tearOff(self::E3b /* = invalid-type */ it) → self::E3a /* = invalid-type */
   return self::E3a|(it);
-static inline-class-member method E3b|(dynamic it) → self::E3b /* = invalid-type */ {
+static inline-class-member method E3b|(self::E3c /* = invalid-type */ it) → self::E3b /* = invalid-type */ {
   lowered final self::E3b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3b|_#new#tearOff(dynamic it) → self::E3b /* = invalid-type */
+static inline-class-member method E3b|_#new#tearOff(self::E3c /* = invalid-type */ it) → self::E3b /* = invalid-type */
   return self::E3b|(it);
-static inline-class-member method E3c|(dynamic it) → self::E3c /* = invalid-type */ {
+static inline-class-member method E3c|(self::E3a /* = invalid-type */ it) → self::E3c /* = invalid-type */ {
   lowered final self::E3c /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3c|_#new#tearOff(dynamic it) → self::E3c /* = invalid-type */
+static inline-class-member method E3c|_#new#tearOff(self::E3a /* = invalid-type */ it) → self::E3c /* = invalid-type */
   return self::E3c|(it);
-static inline-class-member method E4|(dynamic it) → self::E4 /* = invalid-type */ {
+static inline-class-member method E4|(() → self::E4 /* = invalid-type */ it) → self::E4 /* = invalid-type */ {
   lowered final self::E4 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E4|_#new#tearOff(dynamic it) → self::E4 /* = invalid-type */
+static inline-class-member method E4|_#new#tearOff(() → self::E4 /* = invalid-type */ it) → self::E4 /* = invalid-type */
   return self::E4|(it);
-static inline-class-member method E5|(dynamic it) → self::E5 /* = invalid-type */ {
+static inline-class-member method E5|((self::E5 /* = invalid-type */) → void it) → self::E5 /* = invalid-type */ {
   lowered final self::E5 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E5|_#new#tearOff(dynamic it) → self::E5 /* = invalid-type */
+static inline-class-member method E5|_#new#tearOff((self::E5 /* = invalid-type */) → void it) → self::E5 /* = invalid-type */
   return self::E5|(it);
-static inline-class-member method E6|(dynamic it) → self::E6 /* = invalid-type */ {
+static inline-class-member method E6|((self::E6 /* = invalid-type */, core::int) it) → self::E6 /* = invalid-type */ {
   lowered final self::E6 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E6|_#new#tearOff(dynamic it) → self::E6 /* = invalid-type */
+static inline-class-member method E6|_#new#tearOff((self::E6 /* = invalid-type */, core::int) it) → self::E6 /* = invalid-type */
   return self::E6|(it);
-static inline-class-member method E7|_#new#tearOff(dynamic it) → self::E7 /* = invalid-type */
+static inline-class-member method E7|_#new#tearOff(<T extends self::E7 /* = invalid-type */ = dynamic>() → void it) → self::E7 /* = invalid-type */
   return self::E7|(it);
-static inline-class-member method E7|(dynamic it) → self::E7 /* = invalid-type */ {
+static inline-class-member method E7|(<T extends self::E7 /* = invalid-type */ = dynamic>() → void it) → self::E7 /* = invalid-type */ {
   lowered final self::E7 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E8|<T extends core::Object? = dynamic>(dynamic it) → self::E8<self::E8|::T%> /* = invalid-type */ {
+static inline-class-member method E8|<T extends core::Object? = dynamic>(core::List<self::E8<dynamic> /* = invalid-type */> it) → self::E8<self::E8|::T%> /* = invalid-type */ {
   lowered final self::E8<self::E8|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E8|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E8<self::E8|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E8|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E8<dynamic> /* = invalid-type */> it) → self::E8<self::E8|_#new#tearOff::T%> /* = invalid-type */
   return self::E8|<self::E8|_#new#tearOff::T%>(it);
-static inline-class-member method E9|(dynamic it) → self::E9 /* = invalid-type */ {
+static inline-class-member method E9|(self::E9 /* = invalid-type */ it) → self::E9 /* = invalid-type */ {
   lowered final self::E9 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E9|_#new#tearOff(dynamic it) → self::E9 /* = invalid-type */
+static inline-class-member method E9|_#new#tearOff(self::E9 /* = invalid-type */ it) → self::E9 /* = invalid-type */
   return self::E9|(it);
-static inline-class-member method E10|<T extends core::Object? = dynamic>(dynamic it) → self::E10<self::E10|::T%> /* = invalid-type */ {
+static inline-class-member method E10|<T extends core::Object? = dynamic>(self::E10<self::E10|::T%> /* = invalid-type */ it) → self::E10<self::E10|::T%> /* = invalid-type */ {
   lowered final self::E10<self::E10|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E10|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E10|_#new#tearOff<T extends core::Object? = dynamic>(self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */ it) → self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */
   return self::E10|<self::E10|_#new#tearOff::T%>(it);
-static inline-class-member method E11|(dynamic it) → self::E11 /* = invalid-type */ {
+static inline-class-member method E11|(() → self::E11 /* = invalid-type */ it) → self::E11 /* = invalid-type */ {
   lowered final self::E11 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E11|_#new#tearOff(dynamic it) → self::E11 /* = invalid-type */
+static inline-class-member method E11|_#new#tearOff(() → self::E11 /* = invalid-type */ it) → self::E11 /* = invalid-type */
   return self::E11|(it);
-static inline-class-member method E12|(dynamic it) → self::E12 /* = invalid-type */ {
+static inline-class-member method E12|((self::E12 /* = invalid-type */) → void it) → self::E12 /* = invalid-type */ {
   lowered final self::E12 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E12|_#new#tearOff(dynamic it) → self::E12 /* = invalid-type */
+static inline-class-member method E12|_#new#tearOff((self::E12 /* = invalid-type */) → void it) → self::E12 /* = invalid-type */
   return self::E12|(it);
-static inline-class-member method E13|(dynamic it) → self::E13 /* = invalid-type */ {
+static inline-class-member method E13|(<T extends self::E13 /* = invalid-type */ = dynamic>() → void it) → self::E13 /* = invalid-type */ {
   lowered final self::E13 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E13|_#new#tearOff(dynamic it) → self::E13 /* = invalid-type */
+static inline-class-member method E13|_#new#tearOff(<T extends self::E13 /* = invalid-type */ = dynamic>() → void it) → self::E13 /* = invalid-type */
   return self::E13|(it);
-static inline-class-member method E14|(dynamic it) → self::E14 /* = core::int */ {
+static inline-class-member method E14|(core::int it) → self::E14 /* = core::int */ {
   lowered final self::E14 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E14|_#new#tearOff(dynamic it) → self::E14 /* = core::int */
+static inline-class-member method E14|_#new#tearOff(core::int it) → self::E14 /* = core::int */
   return self::E14|(it);
-static inline-class-member method E15a|(dynamic it) → self::E15a /* = invalid-type */ {
+static inline-class-member method E15a|(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
   lowered final self::E15a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E15a|_#new#tearOff(dynamic it) → self::E15a /* = invalid-type */
+static inline-class-member method E15a|_#new#tearOff(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   return self::E15a|(it);
-static inline-class-member method E15b|(dynamic it) → self::E15b /* = invalid-type */ {
+static inline-class-member method E15b|(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
   lowered final self::E15b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E15b|_#new#tearOff(dynamic it) → self::E15b /* = invalid-type */
+static inline-class-member method E15b|_#new#tearOff(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   return self::E15b|(it);
-static inline-class-member method E16a|(dynamic it) → self::E16a /* = invalid-type */ {
+static inline-class-member method E16a|(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */ {
   lowered final self::E16a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E16a|_#new#tearOff(dynamic it) → self::E16a /* = invalid-type */
+static inline-class-member method E16a|_#new#tearOff(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */
   return self::E16a|(it);
-static inline-class-member method E16b|(dynamic it) → self::E16b /* = invalid-type */ {
+static inline-class-member method E16b|(core::List<self::E16a /* = invalid-type */> it) → self::E16b /* = invalid-type */ {
   lowered final self::E16b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E16b|_#new#tearOff(dynamic it) → self::E16b /* = invalid-type */
+static inline-class-member method E16b|_#new#tearOff(core::List<self::E16a /* = invalid-type */> it) → self::E16b /* = invalid-type */
   return self::E16b|(it);
-static inline-class-member method E17|(dynamic it) → self::E17 /* = invalid-type */ {
+static inline-class-member method E17|((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */ {
   lowered final self::E17 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E17|_#new#tearOff(dynamic it) → self::E17 /* = invalid-type */
+static inline-class-member method E17|_#new#tearOff((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   return self::E17|(it);
-static inline-class-member method E18|(dynamic it) → self::E18 /* = invalid-type */ {
+static inline-class-member method E18|((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
   lowered final self::E18 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E18|_#new#tearOff(dynamic it) → self::E18 /* = invalid-type */
+static inline-class-member method E18|_#new#tearOff((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   return self::E18|(it);
-static inline-class-member method E19a|(dynamic it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ {
+static inline-class-member method E19a|((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ {
   lowered final self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ #this = it;
   return #this;
 }
-static inline-class-member method E19a|_#new#tearOff(dynamic it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
+static inline-class-member method E19a|_#new#tearOff((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
   return self::E19a|(it);
-static inline-class-member method E19b|(dynamic it) → self::E19b /* = core::int */ {
+static inline-class-member method E19b|(core::int it) → self::E19b /* = core::int */ {
   lowered final self::E19b /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E19b|_#new#tearOff(dynamic it) → self::E19b /* = core::int */
+static inline-class-member method E19b|_#new#tearOff(core::int it) → self::E19b /* = core::int */
   return self::E19b|(it);
-static inline-class-member method E20|(dynamic it) → self::E20 /* = invalid-type */ {
+static inline-class-member method E20|(invalid-type it) → self::E20 /* = invalid-type */ {
   lowered final self::E20 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E20|_#new#tearOff(dynamic it) → self::E20 /* = invalid-type */
+static inline-class-member method E20|_#new#tearOff(invalid-type it) → self::E20 /* = invalid-type */
   return self::E20|(it);
-static inline-class-member method E21|(dynamic it) → self::E21 /* = invalid-type */ {
+static inline-class-member method E21|(invalid-type it) → self::E21 /* = invalid-type */ {
   lowered final self::E21 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E21|_#new#tearOff(dynamic it) → self::E21 /* = invalid-type */
+static inline-class-member method E21|_#new#tearOff(invalid-type it) → self::E21 /* = invalid-type */
   return self::E21|(it);
-static inline-class-member method E22|(dynamic it) → self::E22 /* = invalid-type */ {
+static inline-class-member method E22|(invalid-type it) → self::E22 /* = invalid-type */ {
   lowered final self::E22 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E22|_#new#tearOff(dynamic it) → self::E22 /* = invalid-type */
+static inline-class-member method E22|_#new#tearOff(invalid-type it) → self::E22 /* = invalid-type */
   return self::E22|(it);
-static inline-class-member method E23|(dynamic it) → self::E23 /* = invalid-type */ {
+static inline-class-member method E23|(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
   lowered final self::E23 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E23|_#new#tearOff(dynamic it) → self::E23 /* = invalid-type */
+static inline-class-member method E23|_#new#tearOff(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   return self::E23|(it);
-static inline-class-member method E24|<T extends core::Object? = dynamic>(dynamic it) → self::E24<self::E24|::T%> /* = invalid-type */ {
+static inline-class-member method E24|<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|::T%> /* = invalid-type */ {
   lowered final self::E24<self::E24|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E24|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E24<self::E24|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E24|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|_#new#tearOff::T%> /* = invalid-type */
   return self::E24|<self::E24|_#new#tearOff::T%>(it);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#Alias14#fromEnvironment#tearOff<unrelated T extends core::Object? = dynamic>(core::String name, {core::int defaultValue = #C1}) → core::int
   return core::int::fromEnvironment(name, defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.outline.expect
index b65ad3e..2042a18 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.outline.expect
@@ -331,125 +331,125 @@
   constructor • = self::E24|;
   tearoff • = self::E24|_#new#tearOff;
 }
-static inline-class-member method E1|(dynamic it) → self::E1 /* = invalid-type */
+static inline-class-member method E1|(self::E1 /* = invalid-type */ it) → self::E1 /* = invalid-type */
   ;
-static inline-class-member method E1|_#new#tearOff(dynamic it) → self::E1 /* = invalid-type */
+static inline-class-member method E1|_#new#tearOff(self::E1 /* = invalid-type */ it) → self::E1 /* = invalid-type */
   return self::E1|(it);
-static inline-class-member method E2a|(dynamic it) → self::E2a /* = invalid-type */
+static inline-class-member method E2a|(self::E2b /* = invalid-type */ it) → self::E2a /* = invalid-type */
   ;
-static inline-class-member method E2a|_#new#tearOff(dynamic it) → self::E2a /* = invalid-type */
+static inline-class-member method E2a|_#new#tearOff(self::E2b /* = invalid-type */ it) → self::E2a /* = invalid-type */
   return self::E2a|(it);
-static inline-class-member method E2b|(dynamic it) → self::E2b /* = invalid-type */
+static inline-class-member method E2b|(self::E2a /* = invalid-type */ it) → self::E2b /* = invalid-type */
   ;
-static inline-class-member method E2b|_#new#tearOff(dynamic it) → self::E2b /* = invalid-type */
+static inline-class-member method E2b|_#new#tearOff(self::E2a /* = invalid-type */ it) → self::E2b /* = invalid-type */
   return self::E2b|(it);
-static inline-class-member method E3a|(dynamic it) → self::E3a /* = invalid-type */
+static inline-class-member method E3a|(self::E3b /* = invalid-type */ it) → self::E3a /* = invalid-type */
   ;
-static inline-class-member method E3a|_#new#tearOff(dynamic it) → self::E3a /* = invalid-type */
+static inline-class-member method E3a|_#new#tearOff(self::E3b /* = invalid-type */ it) → self::E3a /* = invalid-type */
   return self::E3a|(it);
-static inline-class-member method E3b|(dynamic it) → self::E3b /* = invalid-type */
+static inline-class-member method E3b|(self::E3c /* = invalid-type */ it) → self::E3b /* = invalid-type */
   ;
-static inline-class-member method E3b|_#new#tearOff(dynamic it) → self::E3b /* = invalid-type */
+static inline-class-member method E3b|_#new#tearOff(self::E3c /* = invalid-type */ it) → self::E3b /* = invalid-type */
   return self::E3b|(it);
-static inline-class-member method E3c|(dynamic it) → self::E3c /* = invalid-type */
+static inline-class-member method E3c|(self::E3a /* = invalid-type */ it) → self::E3c /* = invalid-type */
   ;
-static inline-class-member method E3c|_#new#tearOff(dynamic it) → self::E3c /* = invalid-type */
+static inline-class-member method E3c|_#new#tearOff(self::E3a /* = invalid-type */ it) → self::E3c /* = invalid-type */
   return self::E3c|(it);
-static inline-class-member method E4|(dynamic it) → self::E4 /* = invalid-type */
+static inline-class-member method E4|(() → self::E4 /* = invalid-type */ it) → self::E4 /* = invalid-type */
   ;
-static inline-class-member method E4|_#new#tearOff(dynamic it) → self::E4 /* = invalid-type */
+static inline-class-member method E4|_#new#tearOff(() → self::E4 /* = invalid-type */ it) → self::E4 /* = invalid-type */
   return self::E4|(it);
-static inline-class-member method E5|(dynamic it) → self::E5 /* = invalid-type */
+static inline-class-member method E5|((self::E5 /* = invalid-type */) → void it) → self::E5 /* = invalid-type */
   ;
-static inline-class-member method E5|_#new#tearOff(dynamic it) → self::E5 /* = invalid-type */
+static inline-class-member method E5|_#new#tearOff((self::E5 /* = invalid-type */) → void it) → self::E5 /* = invalid-type */
   return self::E5|(it);
-static inline-class-member method E6|(dynamic it) → self::E6 /* = invalid-type */
+static inline-class-member method E6|((self::E6 /* = invalid-type */, core::int) it) → self::E6 /* = invalid-type */
   ;
-static inline-class-member method E6|_#new#tearOff(dynamic it) → self::E6 /* = invalid-type */
+static inline-class-member method E6|_#new#tearOff((self::E6 /* = invalid-type */, core::int) it) → self::E6 /* = invalid-type */
   return self::E6|(it);
-static inline-class-member method E7|_#new#tearOff(dynamic it) → self::E7 /* = invalid-type */
+static inline-class-member method E7|_#new#tearOff(<T extends self::E7 /* = invalid-type */ = dynamic>() → void it) → self::E7 /* = invalid-type */
   return self::E7|(it);
-static inline-class-member method E7|(dynamic it) → self::E7 /* = invalid-type */
+static inline-class-member method E7|(<T extends self::E7 /* = invalid-type */ = dynamic>() → void it) → self::E7 /* = invalid-type */
   ;
-static inline-class-member method E8|<T extends core::Object? = dynamic>(dynamic it) → self::E8<self::E8|::T%> /* = invalid-type */
+static inline-class-member method E8|<T extends core::Object? = dynamic>(core::List<self::E8<dynamic> /* = invalid-type */> it) → self::E8<self::E8|::T%> /* = invalid-type */
   ;
-static inline-class-member method E8|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E8<self::E8|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E8|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E8<dynamic> /* = invalid-type */> it) → self::E8<self::E8|_#new#tearOff::T%> /* = invalid-type */
   return self::E8|<self::E8|_#new#tearOff::T%>(it);
-static inline-class-member method E9|(dynamic it) → self::E9 /* = invalid-type */
+static inline-class-member method E9|(self::E9 /* = invalid-type */ it) → self::E9 /* = invalid-type */
   ;
-static inline-class-member method E9|_#new#tearOff(dynamic it) → self::E9 /* = invalid-type */
+static inline-class-member method E9|_#new#tearOff(self::E9 /* = invalid-type */ it) → self::E9 /* = invalid-type */
   return self::E9|(it);
-static inline-class-member method E10|<T extends core::Object? = dynamic>(dynamic it) → self::E10<self::E10|::T%> /* = invalid-type */
+static inline-class-member method E10|<T extends core::Object? = dynamic>(self::E10<self::E10|::T%> /* = invalid-type */ it) → self::E10<self::E10|::T%> /* = invalid-type */
   ;
-static inline-class-member method E10|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E10|_#new#tearOff<T extends core::Object? = dynamic>(self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */ it) → self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */
   return self::E10|<self::E10|_#new#tearOff::T%>(it);
-static inline-class-member method E11|(dynamic it) → self::E11 /* = invalid-type */
+static inline-class-member method E11|(() → self::E11 /* = invalid-type */ it) → self::E11 /* = invalid-type */
   ;
-static inline-class-member method E11|_#new#tearOff(dynamic it) → self::E11 /* = invalid-type */
+static inline-class-member method E11|_#new#tearOff(() → self::E11 /* = invalid-type */ it) → self::E11 /* = invalid-type */
   return self::E11|(it);
-static inline-class-member method E12|(dynamic it) → self::E12 /* = invalid-type */
+static inline-class-member method E12|((self::E12 /* = invalid-type */) → void it) → self::E12 /* = invalid-type */
   ;
-static inline-class-member method E12|_#new#tearOff(dynamic it) → self::E12 /* = invalid-type */
+static inline-class-member method E12|_#new#tearOff((self::E12 /* = invalid-type */) → void it) → self::E12 /* = invalid-type */
   return self::E12|(it);
-static inline-class-member method E13|(dynamic it) → self::E13 /* = invalid-type */
+static inline-class-member method E13|(<T extends self::E13 /* = invalid-type */ = dynamic>() → void it) → self::E13 /* = invalid-type */
   ;
-static inline-class-member method E13|_#new#tearOff(dynamic it) → self::E13 /* = invalid-type */
+static inline-class-member method E13|_#new#tearOff(<T extends self::E13 /* = invalid-type */ = dynamic>() → void it) → self::E13 /* = invalid-type */
   return self::E13|(it);
-static inline-class-member method E14|(dynamic it) → self::E14 /* = core::int */
+static inline-class-member method E14|(core::int it) → self::E14 /* = core::int */
   ;
-static inline-class-member method E14|_#new#tearOff(dynamic it) → self::E14 /* = core::int */
+static inline-class-member method E14|_#new#tearOff(core::int it) → self::E14 /* = core::int */
   return self::E14|(it);
-static inline-class-member method E15a|(dynamic it) → self::E15a /* = invalid-type */
+static inline-class-member method E15a|(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   ;
-static inline-class-member method E15a|_#new#tearOff(dynamic it) → self::E15a /* = invalid-type */
+static inline-class-member method E15a|_#new#tearOff(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   return self::E15a|(it);
-static inline-class-member method E15b|(dynamic it) → self::E15b /* = invalid-type */
+static inline-class-member method E15b|(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   ;
-static inline-class-member method E15b|_#new#tearOff(dynamic it) → self::E15b /* = invalid-type */
+static inline-class-member method E15b|_#new#tearOff(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   return self::E15b|(it);
-static inline-class-member method E16a|(dynamic it) → self::E16a /* = invalid-type */
+static inline-class-member method E16a|(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */
   ;
-static inline-class-member method E16a|_#new#tearOff(dynamic it) → self::E16a /* = invalid-type */
+static inline-class-member method E16a|_#new#tearOff(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */
   return self::E16a|(it);
-static inline-class-member method E16b|(dynamic it) → self::E16b /* = invalid-type */
+static inline-class-member method E16b|(core::List<self::E16a /* = invalid-type */> it) → self::E16b /* = invalid-type */
   ;
-static inline-class-member method E16b|_#new#tearOff(dynamic it) → self::E16b /* = invalid-type */
+static inline-class-member method E16b|_#new#tearOff(core::List<self::E16a /* = invalid-type */> it) → self::E16b /* = invalid-type */
   return self::E16b|(it);
-static inline-class-member method E17|(dynamic it) → self::E17 /* = invalid-type */
+static inline-class-member method E17|((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   ;
-static inline-class-member method E17|_#new#tearOff(dynamic it) → self::E17 /* = invalid-type */
+static inline-class-member method E17|_#new#tearOff((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   return self::E17|(it);
-static inline-class-member method E18|(dynamic it) → self::E18 /* = invalid-type */
+static inline-class-member method E18|((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   ;
-static inline-class-member method E18|_#new#tearOff(dynamic it) → self::E18 /* = invalid-type */
+static inline-class-member method E18|_#new#tearOff((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   return self::E18|(it);
-static inline-class-member method E19a|(dynamic it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
+static inline-class-member method E19a|((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
   ;
-static inline-class-member method E19a|_#new#tearOff(dynamic it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
+static inline-class-member method E19a|_#new#tearOff((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
   return self::E19a|(it);
-static inline-class-member method E19b|(dynamic it) → self::E19b /* = core::int */
+static inline-class-member method E19b|(core::int it) → self::E19b /* = core::int */
   ;
-static inline-class-member method E19b|_#new#tearOff(dynamic it) → self::E19b /* = core::int */
+static inline-class-member method E19b|_#new#tearOff(core::int it) → self::E19b /* = core::int */
   return self::E19b|(it);
-static inline-class-member method E20|(dynamic it) → self::E20 /* = invalid-type */
+static inline-class-member method E20|(invalid-type it) → self::E20 /* = invalid-type */
   ;
-static inline-class-member method E20|_#new#tearOff(dynamic it) → self::E20 /* = invalid-type */
+static inline-class-member method E20|_#new#tearOff(invalid-type it) → self::E20 /* = invalid-type */
   return self::E20|(it);
-static inline-class-member method E21|(dynamic it) → self::E21 /* = invalid-type */
+static inline-class-member method E21|(invalid-type it) → self::E21 /* = invalid-type */
   ;
-static inline-class-member method E21|_#new#tearOff(dynamic it) → self::E21 /* = invalid-type */
+static inline-class-member method E21|_#new#tearOff(invalid-type it) → self::E21 /* = invalid-type */
   return self::E21|(it);
-static inline-class-member method E22|(dynamic it) → self::E22 /* = invalid-type */
+static inline-class-member method E22|(invalid-type it) → self::E22 /* = invalid-type */
   ;
-static inline-class-member method E22|_#new#tearOff(dynamic it) → self::E22 /* = invalid-type */
+static inline-class-member method E22|_#new#tearOff(invalid-type it) → self::E22 /* = invalid-type */
   return self::E22|(it);
-static inline-class-member method E23|(dynamic it) → self::E23 /* = invalid-type */
+static inline-class-member method E23|(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   ;
-static inline-class-member method E23|_#new#tearOff(dynamic it) → self::E23 /* = invalid-type */
+static inline-class-member method E23|_#new#tearOff(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   return self::E23|(it);
-static inline-class-member method E24|<T extends core::Object? = dynamic>(dynamic it) → self::E24<self::E24|::T%> /* = invalid-type */
+static inline-class-member method E24|<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|::T%> /* = invalid-type */
   ;
-static inline-class-member method E24|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E24<self::E24|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E24|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|_#new#tearOff::T%> /* = invalid-type */
   return self::E24|<self::E24|_#new#tearOff::T%>(it);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#Alias14#fromEnvironment#tearOff<unrelated T extends core::Object? = dynamic>(core::String name, {has-declared-initializer core::int defaultValue}) → core::int
   return core::int::fromEnvironment(name, defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.transformed.expect
index f5a4965..89d82bc 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/cyclic_representation_type.dart.weak.transformed.expect
@@ -331,185 +331,185 @@
   constructor • = self::E24|;
   tearoff • = self::E24|_#new#tearOff;
 }
-static inline-class-member method E1|(dynamic it) → self::E1 /* = invalid-type */ {
+static inline-class-member method E1|(self::E1 /* = invalid-type */ it) → self::E1 /* = invalid-type */ {
   lowered final self::E1 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E1|_#new#tearOff(dynamic it) → self::E1 /* = invalid-type */
+static inline-class-member method E1|_#new#tearOff(self::E1 /* = invalid-type */ it) → self::E1 /* = invalid-type */
   return self::E1|(it);
-static inline-class-member method E2a|(dynamic it) → self::E2a /* = invalid-type */ {
+static inline-class-member method E2a|(self::E2b /* = invalid-type */ it) → self::E2a /* = invalid-type */ {
   lowered final self::E2a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E2a|_#new#tearOff(dynamic it) → self::E2a /* = invalid-type */
+static inline-class-member method E2a|_#new#tearOff(self::E2b /* = invalid-type */ it) → self::E2a /* = invalid-type */
   return self::E2a|(it);
-static inline-class-member method E2b|(dynamic it) → self::E2b /* = invalid-type */ {
+static inline-class-member method E2b|(self::E2a /* = invalid-type */ it) → self::E2b /* = invalid-type */ {
   lowered final self::E2b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E2b|_#new#tearOff(dynamic it) → self::E2b /* = invalid-type */
+static inline-class-member method E2b|_#new#tearOff(self::E2a /* = invalid-type */ it) → self::E2b /* = invalid-type */
   return self::E2b|(it);
-static inline-class-member method E3a|(dynamic it) → self::E3a /* = invalid-type */ {
+static inline-class-member method E3a|(self::E3b /* = invalid-type */ it) → self::E3a /* = invalid-type */ {
   lowered final self::E3a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3a|_#new#tearOff(dynamic it) → self::E3a /* = invalid-type */
+static inline-class-member method E3a|_#new#tearOff(self::E3b /* = invalid-type */ it) → self::E3a /* = invalid-type */
   return self::E3a|(it);
-static inline-class-member method E3b|(dynamic it) → self::E3b /* = invalid-type */ {
+static inline-class-member method E3b|(self::E3c /* = invalid-type */ it) → self::E3b /* = invalid-type */ {
   lowered final self::E3b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3b|_#new#tearOff(dynamic it) → self::E3b /* = invalid-type */
+static inline-class-member method E3b|_#new#tearOff(self::E3c /* = invalid-type */ it) → self::E3b /* = invalid-type */
   return self::E3b|(it);
-static inline-class-member method E3c|(dynamic it) → self::E3c /* = invalid-type */ {
+static inline-class-member method E3c|(self::E3a /* = invalid-type */ it) → self::E3c /* = invalid-type */ {
   lowered final self::E3c /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E3c|_#new#tearOff(dynamic it) → self::E3c /* = invalid-type */
+static inline-class-member method E3c|_#new#tearOff(self::E3a /* = invalid-type */ it) → self::E3c /* = invalid-type */
   return self::E3c|(it);
-static inline-class-member method E4|(dynamic it) → self::E4 /* = invalid-type */ {
+static inline-class-member method E4|(() → self::E4 /* = invalid-type */ it) → self::E4 /* = invalid-type */ {
   lowered final self::E4 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E4|_#new#tearOff(dynamic it) → self::E4 /* = invalid-type */
+static inline-class-member method E4|_#new#tearOff(() → self::E4 /* = invalid-type */ it) → self::E4 /* = invalid-type */
   return self::E4|(it);
-static inline-class-member method E5|(dynamic it) → self::E5 /* = invalid-type */ {
+static inline-class-member method E5|((self::E5 /* = invalid-type */) → void it) → self::E5 /* = invalid-type */ {
   lowered final self::E5 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E5|_#new#tearOff(dynamic it) → self::E5 /* = invalid-type */
+static inline-class-member method E5|_#new#tearOff((self::E5 /* = invalid-type */) → void it) → self::E5 /* = invalid-type */
   return self::E5|(it);
-static inline-class-member method E6|(dynamic it) → self::E6 /* = invalid-type */ {
+static inline-class-member method E6|((self::E6 /* = invalid-type */, core::int) it) → self::E6 /* = invalid-type */ {
   lowered final self::E6 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E6|_#new#tearOff(dynamic it) → self::E6 /* = invalid-type */
+static inline-class-member method E6|_#new#tearOff((self::E6 /* = invalid-type */, core::int) it) → self::E6 /* = invalid-type */
   return self::E6|(it);
-static inline-class-member method E7|_#new#tearOff(dynamic it) → self::E7 /* = invalid-type */
+static inline-class-member method E7|_#new#tearOff(<T extends self::E7 /* = invalid-type */ = dynamic>() → void it) → self::E7 /* = invalid-type */
   return self::E7|(it);
-static inline-class-member method E7|(dynamic it) → self::E7 /* = invalid-type */ {
+static inline-class-member method E7|(<T extends self::E7 /* = invalid-type */ = dynamic>() → void it) → self::E7 /* = invalid-type */ {
   lowered final self::E7 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E8|<T extends core::Object? = dynamic>(dynamic it) → self::E8<self::E8|::T%> /* = invalid-type */ {
+static inline-class-member method E8|<T extends core::Object? = dynamic>(core::List<self::E8<dynamic> /* = invalid-type */> it) → self::E8<self::E8|::T%> /* = invalid-type */ {
   lowered final self::E8<self::E8|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E8|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E8<self::E8|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E8|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E8<dynamic> /* = invalid-type */> it) → self::E8<self::E8|_#new#tearOff::T%> /* = invalid-type */
   return self::E8|<self::E8|_#new#tearOff::T%>(it);
-static inline-class-member method E9|(dynamic it) → self::E9 /* = invalid-type */ {
+static inline-class-member method E9|(self::E9 /* = invalid-type */ it) → self::E9 /* = invalid-type */ {
   lowered final self::E9 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E9|_#new#tearOff(dynamic it) → self::E9 /* = invalid-type */
+static inline-class-member method E9|_#new#tearOff(self::E9 /* = invalid-type */ it) → self::E9 /* = invalid-type */
   return self::E9|(it);
-static inline-class-member method E10|<T extends core::Object? = dynamic>(dynamic it) → self::E10<self::E10|::T%> /* = invalid-type */ {
+static inline-class-member method E10|<T extends core::Object? = dynamic>(self::E10<self::E10|::T%> /* = invalid-type */ it) → self::E10<self::E10|::T%> /* = invalid-type */ {
   lowered final self::E10<self::E10|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E10|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E10|_#new#tearOff<T extends core::Object? = dynamic>(self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */ it) → self::E10<self::E10|_#new#tearOff::T%> /* = invalid-type */
   return self::E10|<self::E10|_#new#tearOff::T%>(it);
-static inline-class-member method E11|(dynamic it) → self::E11 /* = invalid-type */ {
+static inline-class-member method E11|(() → self::E11 /* = invalid-type */ it) → self::E11 /* = invalid-type */ {
   lowered final self::E11 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E11|_#new#tearOff(dynamic it) → self::E11 /* = invalid-type */
+static inline-class-member method E11|_#new#tearOff(() → self::E11 /* = invalid-type */ it) → self::E11 /* = invalid-type */
   return self::E11|(it);
-static inline-class-member method E12|(dynamic it) → self::E12 /* = invalid-type */ {
+static inline-class-member method E12|((self::E12 /* = invalid-type */) → void it) → self::E12 /* = invalid-type */ {
   lowered final self::E12 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E12|_#new#tearOff(dynamic it) → self::E12 /* = invalid-type */
+static inline-class-member method E12|_#new#tearOff((self::E12 /* = invalid-type */) → void it) → self::E12 /* = invalid-type */
   return self::E12|(it);
-static inline-class-member method E13|(dynamic it) → self::E13 /* = invalid-type */ {
+static inline-class-member method E13|(<T extends self::E13 /* = invalid-type */ = dynamic>() → void it) → self::E13 /* = invalid-type */ {
   lowered final self::E13 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E13|_#new#tearOff(dynamic it) → self::E13 /* = invalid-type */
+static inline-class-member method E13|_#new#tearOff(<T extends self::E13 /* = invalid-type */ = dynamic>() → void it) → self::E13 /* = invalid-type */
   return self::E13|(it);
-static inline-class-member method E14|(dynamic it) → self::E14 /* = core::int */ {
+static inline-class-member method E14|(core::int it) → self::E14 /* = core::int */ {
   lowered final self::E14 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E14|_#new#tearOff(dynamic it) → self::E14 /* = core::int */
+static inline-class-member method E14|_#new#tearOff(core::int it) → self::E14 /* = core::int */
   return self::E14|(it);
-static inline-class-member method E15a|(dynamic it) → self::E15a /* = invalid-type */ {
+static inline-class-member method E15a|(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
   lowered final self::E15a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E15a|_#new#tearOff(dynamic it) → self::E15a /* = invalid-type */
+static inline-class-member method E15a|_#new#tearOff(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   return self::E15a|(it);
-static inline-class-member method E15b|(dynamic it) → self::E15b /* = invalid-type */ {
+static inline-class-member method E15b|(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
   lowered final self::E15b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E15b|_#new#tearOff(dynamic it) → self::E15b /* = invalid-type */
+static inline-class-member method E15b|_#new#tearOff(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   return self::E15b|(it);
-static inline-class-member method E16a|(dynamic it) → self::E16a /* = invalid-type */ {
+static inline-class-member method E16a|(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */ {
   lowered final self::E16a /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E16a|_#new#tearOff(dynamic it) → self::E16a /* = invalid-type */
+static inline-class-member method E16a|_#new#tearOff(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */
   return self::E16a|(it);
-static inline-class-member method E16b|(dynamic it) → self::E16b /* = invalid-type */ {
+static inline-class-member method E16b|(core::List<self::E16a /* = invalid-type */> it) → self::E16b /* = invalid-type */ {
   lowered final self::E16b /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E16b|_#new#tearOff(dynamic it) → self::E16b /* = invalid-type */
+static inline-class-member method E16b|_#new#tearOff(core::List<self::E16a /* = invalid-type */> it) → self::E16b /* = invalid-type */
   return self::E16b|(it);
-static inline-class-member method E17|(dynamic it) → self::E17 /* = invalid-type */ {
+static inline-class-member method E17|((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */ {
   lowered final self::E17 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E17|_#new#tearOff(dynamic it) → self::E17 /* = invalid-type */
+static inline-class-member method E17|_#new#tearOff((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   return self::E17|(it);
-static inline-class-member method E18|(dynamic it) → self::E18 /* = invalid-type */ {
+static inline-class-member method E18|((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
   lowered final self::E18 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E18|_#new#tearOff(dynamic it) → self::E18 /* = invalid-type */
+static inline-class-member method E18|_#new#tearOff((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   return self::E18|(it);
-static inline-class-member method E19a|(dynamic it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ {
+static inline-class-member method E19a|((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ {
   lowered final self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */ #this = it;
   return #this;
 }
-static inline-class-member method E19a|_#new#tearOff(dynamic it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
+static inline-class-member method E19a|_#new#tearOff((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(self::E19b /* = core::int */, self::E19b /* = core::int */) */
   return self::E19a|(it);
-static inline-class-member method E19b|(dynamic it) → self::E19b /* = core::int */ {
+static inline-class-member method E19b|(core::int it) → self::E19b /* = core::int */ {
   lowered final self::E19b /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E19b|_#new#tearOff(dynamic it) → self::E19b /* = core::int */
+static inline-class-member method E19b|_#new#tearOff(core::int it) → self::E19b /* = core::int */
   return self::E19b|(it);
-static inline-class-member method E20|(dynamic it) → self::E20 /* = invalid-type */ {
+static inline-class-member method E20|(invalid-type it) → self::E20 /* = invalid-type */ {
   lowered final self::E20 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E20|_#new#tearOff(dynamic it) → self::E20 /* = invalid-type */
+static inline-class-member method E20|_#new#tearOff(invalid-type it) → self::E20 /* = invalid-type */
   return self::E20|(it);
-static inline-class-member method E21|(dynamic it) → self::E21 /* = invalid-type */ {
+static inline-class-member method E21|(invalid-type it) → self::E21 /* = invalid-type */ {
   lowered final self::E21 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E21|_#new#tearOff(dynamic it) → self::E21 /* = invalid-type */
+static inline-class-member method E21|_#new#tearOff(invalid-type it) → self::E21 /* = invalid-type */
   return self::E21|(it);
-static inline-class-member method E22|(dynamic it) → self::E22 /* = invalid-type */ {
+static inline-class-member method E22|(invalid-type it) → self::E22 /* = invalid-type */ {
   lowered final self::E22 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E22|_#new#tearOff(dynamic it) → self::E22 /* = invalid-type */
+static inline-class-member method E22|_#new#tearOff(invalid-type it) → self::E22 /* = invalid-type */
   return self::E22|(it);
-static inline-class-member method E23|(dynamic it) → self::E23 /* = invalid-type */ {
+static inline-class-member method E23|(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
   lowered final self::E23 /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E23|_#new#tearOff(dynamic it) → self::E23 /* = invalid-type */
+static inline-class-member method E23|_#new#tearOff(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   return self::E23|(it);
-static inline-class-member method E24|<T extends core::Object? = dynamic>(dynamic it) → self::E24<self::E24|::T%> /* = invalid-type */ {
+static inline-class-member method E24|<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|::T%> /* = invalid-type */ {
   lowered final self::E24<self::E24|::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method E24|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::E24<self::E24|_#new#tearOff::T%> /* = invalid-type */
+static inline-class-member method E24|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|_#new#tearOff::T%> /* = invalid-type */
   return self::E24|<self::E24|_#new#tearOff::T%>(it);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/integers_patch.dart */ _#Alias14#fromEnvironment#tearOff<unrelated T extends core::Object? = dynamic>(core::String name, {core::int defaultValue = #C1}) → core::int
   return core::int::fromEnvironment(name, defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.expect
index 9f84a45..ae387dd 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.expect
@@ -49,29 +49,29 @@
   tearoff id = self::ExtensionType7|_#id#tearOff;
 }
 static field core::int ExtensionType4|staticField = 42;
-static inline-class-member method ExtensionType1|(dynamic it) → self::ExtensionType1 /* = core::int */ {
+static inline-class-member method ExtensionType1|(core::int it) → self::ExtensionType1 /* = core::int */ {
   lowered final self::ExtensionType1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType1|_#new#tearOff(dynamic it) → self::ExtensionType1 /* = core::int */
+static inline-class-member method ExtensionType1|_#new#tearOff(core::int it) → self::ExtensionType1 /* = core::int */
   return self::ExtensionType1|(it);
-static inline-class-member method ExtensionType2|(dynamic it) → self::ExtensionType2 /* = core::int */ {
+static inline-class-member method ExtensionType2|(core::int it) → self::ExtensionType2 /* = core::int */ {
   lowered final self::ExtensionType2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType2|_#new#tearOff(dynamic it) → self::ExtensionType2 /* = core::int */
+static inline-class-member method ExtensionType2|_#new#tearOff(core::int it) → self::ExtensionType2 /* = core::int */
   return self::ExtensionType2|(it);
-static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ {
+static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(self::ExtensionType3|::T it) → self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ {
   lowered final self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T> /* = self::ExtensionType3|_#new#tearOff::T */
+static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(self::ExtensionType3|_#new#tearOff::T it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T> /* = self::ExtensionType3|_#new#tearOff::T */
   return self::ExtensionType3|<self::ExtensionType3|_#new#tearOff::T>(it);
-static inline-class-member method ExtensionType4|(dynamic it) → self::ExtensionType4 /* = core::int */ {
+static inline-class-member method ExtensionType4|(core::int it) → self::ExtensionType4 /* = core::int */ {
   lowered final self::ExtensionType4 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType4|_#new#tearOff(dynamic it) → self::ExtensionType4 /* = core::int */
+static inline-class-member method ExtensionType4|_#new#tearOff(core::int it) → self::ExtensionType4 /* = core::int */
   return self::ExtensionType4|(it);
 static inline-class-member method ExtensionType4|constructor(core::int it) → self::ExtensionType4 /* = core::int */ {
   lowered final self::ExtensionType4 /* = core::int */ #this = it;
@@ -109,21 +109,21 @@
 static inline-class-member set ExtensionType4|staticSetter(core::int value) → void {}
 static inline-class-member method ExtensionType4|staticMethod() → core::int
   return 42;
-static inline-class-member method ExtensionType5|(dynamic it) → self::ExtensionType5 /* = core::int */ {
+static inline-class-member method ExtensionType5|(core::int it) → self::ExtensionType5 /* = core::int */ {
   lowered final self::ExtensionType5 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType5|_#new#tearOff(dynamic it) → self::ExtensionType5 /* = core::int */
+static inline-class-member method ExtensionType5|_#new#tearOff(core::int it) → self::ExtensionType5 /* = core::int */
   return self::ExtensionType5|(it);
-static inline-class-member method ExtensionType6|id(dynamic it) → self::ExtensionType6 /* = core::int */ {
+static inline-class-member method ExtensionType6|id(core::int it) → self::ExtensionType6 /* = core::int */ {
   lowered final self::ExtensionType6 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType6|_#id#tearOff(dynamic it) → self::ExtensionType6 /* = core::int */
+static inline-class-member method ExtensionType6|_#id#tearOff(core::int it) → self::ExtensionType6 /* = core::int */
   return self::ExtensionType6|id(it);
-static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ {
+static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(core::int it) → self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ {
   lowered final self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T> /* = core::int */
+static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(core::int it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T> /* = core::int */
   return self::ExtensionType7|id<self::ExtensionType7|_#id#tearOff::T>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.transformed.expect
index 9f84a45..ae387dd 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.strong.transformed.expect
@@ -49,29 +49,29 @@
   tearoff id = self::ExtensionType7|_#id#tearOff;
 }
 static field core::int ExtensionType4|staticField = 42;
-static inline-class-member method ExtensionType1|(dynamic it) → self::ExtensionType1 /* = core::int */ {
+static inline-class-member method ExtensionType1|(core::int it) → self::ExtensionType1 /* = core::int */ {
   lowered final self::ExtensionType1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType1|_#new#tearOff(dynamic it) → self::ExtensionType1 /* = core::int */
+static inline-class-member method ExtensionType1|_#new#tearOff(core::int it) → self::ExtensionType1 /* = core::int */
   return self::ExtensionType1|(it);
-static inline-class-member method ExtensionType2|(dynamic it) → self::ExtensionType2 /* = core::int */ {
+static inline-class-member method ExtensionType2|(core::int it) → self::ExtensionType2 /* = core::int */ {
   lowered final self::ExtensionType2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType2|_#new#tearOff(dynamic it) → self::ExtensionType2 /* = core::int */
+static inline-class-member method ExtensionType2|_#new#tearOff(core::int it) → self::ExtensionType2 /* = core::int */
   return self::ExtensionType2|(it);
-static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ {
+static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(self::ExtensionType3|::T it) → self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ {
   lowered final self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T> /* = self::ExtensionType3|_#new#tearOff::T */
+static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(self::ExtensionType3|_#new#tearOff::T it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T> /* = self::ExtensionType3|_#new#tearOff::T */
   return self::ExtensionType3|<self::ExtensionType3|_#new#tearOff::T>(it);
-static inline-class-member method ExtensionType4|(dynamic it) → self::ExtensionType4 /* = core::int */ {
+static inline-class-member method ExtensionType4|(core::int it) → self::ExtensionType4 /* = core::int */ {
   lowered final self::ExtensionType4 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType4|_#new#tearOff(dynamic it) → self::ExtensionType4 /* = core::int */
+static inline-class-member method ExtensionType4|_#new#tearOff(core::int it) → self::ExtensionType4 /* = core::int */
   return self::ExtensionType4|(it);
 static inline-class-member method ExtensionType4|constructor(core::int it) → self::ExtensionType4 /* = core::int */ {
   lowered final self::ExtensionType4 /* = core::int */ #this = it;
@@ -109,21 +109,21 @@
 static inline-class-member set ExtensionType4|staticSetter(core::int value) → void {}
 static inline-class-member method ExtensionType4|staticMethod() → core::int
   return 42;
-static inline-class-member method ExtensionType5|(dynamic it) → self::ExtensionType5 /* = core::int */ {
+static inline-class-member method ExtensionType5|(core::int it) → self::ExtensionType5 /* = core::int */ {
   lowered final self::ExtensionType5 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType5|_#new#tearOff(dynamic it) → self::ExtensionType5 /* = core::int */
+static inline-class-member method ExtensionType5|_#new#tearOff(core::int it) → self::ExtensionType5 /* = core::int */
   return self::ExtensionType5|(it);
-static inline-class-member method ExtensionType6|id(dynamic it) → self::ExtensionType6 /* = core::int */ {
+static inline-class-member method ExtensionType6|id(core::int it) → self::ExtensionType6 /* = core::int */ {
   lowered final self::ExtensionType6 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType6|_#id#tearOff(dynamic it) → self::ExtensionType6 /* = core::int */
+static inline-class-member method ExtensionType6|_#id#tearOff(core::int it) → self::ExtensionType6 /* = core::int */
   return self::ExtensionType6|id(it);
-static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ {
+static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(core::int it) → self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ {
   lowered final self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T> /* = core::int */
+static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(core::int it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T> /* = core::int */
   return self::ExtensionType7|id<self::ExtensionType7|_#id#tearOff::T>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.expect
index 9f84a45..ae387dd 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.expect
@@ -49,29 +49,29 @@
   tearoff id = self::ExtensionType7|_#id#tearOff;
 }
 static field core::int ExtensionType4|staticField = 42;
-static inline-class-member method ExtensionType1|(dynamic it) → self::ExtensionType1 /* = core::int */ {
+static inline-class-member method ExtensionType1|(core::int it) → self::ExtensionType1 /* = core::int */ {
   lowered final self::ExtensionType1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType1|_#new#tearOff(dynamic it) → self::ExtensionType1 /* = core::int */
+static inline-class-member method ExtensionType1|_#new#tearOff(core::int it) → self::ExtensionType1 /* = core::int */
   return self::ExtensionType1|(it);
-static inline-class-member method ExtensionType2|(dynamic it) → self::ExtensionType2 /* = core::int */ {
+static inline-class-member method ExtensionType2|(core::int it) → self::ExtensionType2 /* = core::int */ {
   lowered final self::ExtensionType2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType2|_#new#tearOff(dynamic it) → self::ExtensionType2 /* = core::int */
+static inline-class-member method ExtensionType2|_#new#tearOff(core::int it) → self::ExtensionType2 /* = core::int */
   return self::ExtensionType2|(it);
-static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ {
+static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(self::ExtensionType3|::T it) → self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ {
   lowered final self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T> /* = self::ExtensionType3|_#new#tearOff::T */
+static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(self::ExtensionType3|_#new#tearOff::T it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T> /* = self::ExtensionType3|_#new#tearOff::T */
   return self::ExtensionType3|<self::ExtensionType3|_#new#tearOff::T>(it);
-static inline-class-member method ExtensionType4|(dynamic it) → self::ExtensionType4 /* = core::int */ {
+static inline-class-member method ExtensionType4|(core::int it) → self::ExtensionType4 /* = core::int */ {
   lowered final self::ExtensionType4 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType4|_#new#tearOff(dynamic it) → self::ExtensionType4 /* = core::int */
+static inline-class-member method ExtensionType4|_#new#tearOff(core::int it) → self::ExtensionType4 /* = core::int */
   return self::ExtensionType4|(it);
 static inline-class-member method ExtensionType4|constructor(core::int it) → self::ExtensionType4 /* = core::int */ {
   lowered final self::ExtensionType4 /* = core::int */ #this = it;
@@ -109,21 +109,21 @@
 static inline-class-member set ExtensionType4|staticSetter(core::int value) → void {}
 static inline-class-member method ExtensionType4|staticMethod() → core::int
   return 42;
-static inline-class-member method ExtensionType5|(dynamic it) → self::ExtensionType5 /* = core::int */ {
+static inline-class-member method ExtensionType5|(core::int it) → self::ExtensionType5 /* = core::int */ {
   lowered final self::ExtensionType5 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType5|_#new#tearOff(dynamic it) → self::ExtensionType5 /* = core::int */
+static inline-class-member method ExtensionType5|_#new#tearOff(core::int it) → self::ExtensionType5 /* = core::int */
   return self::ExtensionType5|(it);
-static inline-class-member method ExtensionType6|id(dynamic it) → self::ExtensionType6 /* = core::int */ {
+static inline-class-member method ExtensionType6|id(core::int it) → self::ExtensionType6 /* = core::int */ {
   lowered final self::ExtensionType6 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType6|_#id#tearOff(dynamic it) → self::ExtensionType6 /* = core::int */
+static inline-class-member method ExtensionType6|_#id#tearOff(core::int it) → self::ExtensionType6 /* = core::int */
   return self::ExtensionType6|id(it);
-static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ {
+static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(core::int it) → self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ {
   lowered final self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T> /* = core::int */
+static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(core::int it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T> /* = core::int */
   return self::ExtensionType7|id<self::ExtensionType7|_#id#tearOff::T>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.modular.expect
index 9f84a45..ae387dd 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.modular.expect
@@ -49,29 +49,29 @@
   tearoff id = self::ExtensionType7|_#id#tearOff;
 }
 static field core::int ExtensionType4|staticField = 42;
-static inline-class-member method ExtensionType1|(dynamic it) → self::ExtensionType1 /* = core::int */ {
+static inline-class-member method ExtensionType1|(core::int it) → self::ExtensionType1 /* = core::int */ {
   lowered final self::ExtensionType1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType1|_#new#tearOff(dynamic it) → self::ExtensionType1 /* = core::int */
+static inline-class-member method ExtensionType1|_#new#tearOff(core::int it) → self::ExtensionType1 /* = core::int */
   return self::ExtensionType1|(it);
-static inline-class-member method ExtensionType2|(dynamic it) → self::ExtensionType2 /* = core::int */ {
+static inline-class-member method ExtensionType2|(core::int it) → self::ExtensionType2 /* = core::int */ {
   lowered final self::ExtensionType2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType2|_#new#tearOff(dynamic it) → self::ExtensionType2 /* = core::int */
+static inline-class-member method ExtensionType2|_#new#tearOff(core::int it) → self::ExtensionType2 /* = core::int */
   return self::ExtensionType2|(it);
-static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ {
+static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(self::ExtensionType3|::T it) → self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ {
   lowered final self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T> /* = self::ExtensionType3|_#new#tearOff::T */
+static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(self::ExtensionType3|_#new#tearOff::T it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T> /* = self::ExtensionType3|_#new#tearOff::T */
   return self::ExtensionType3|<self::ExtensionType3|_#new#tearOff::T>(it);
-static inline-class-member method ExtensionType4|(dynamic it) → self::ExtensionType4 /* = core::int */ {
+static inline-class-member method ExtensionType4|(core::int it) → self::ExtensionType4 /* = core::int */ {
   lowered final self::ExtensionType4 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType4|_#new#tearOff(dynamic it) → self::ExtensionType4 /* = core::int */
+static inline-class-member method ExtensionType4|_#new#tearOff(core::int it) → self::ExtensionType4 /* = core::int */
   return self::ExtensionType4|(it);
 static inline-class-member method ExtensionType4|constructor(core::int it) → self::ExtensionType4 /* = core::int */ {
   lowered final self::ExtensionType4 /* = core::int */ #this = it;
@@ -109,21 +109,21 @@
 static inline-class-member set ExtensionType4|staticSetter(core::int value) → void {}
 static inline-class-member method ExtensionType4|staticMethod() → core::int
   return 42;
-static inline-class-member method ExtensionType5|(dynamic it) → self::ExtensionType5 /* = core::int */ {
+static inline-class-member method ExtensionType5|(core::int it) → self::ExtensionType5 /* = core::int */ {
   lowered final self::ExtensionType5 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType5|_#new#tearOff(dynamic it) → self::ExtensionType5 /* = core::int */
+static inline-class-member method ExtensionType5|_#new#tearOff(core::int it) → self::ExtensionType5 /* = core::int */
   return self::ExtensionType5|(it);
-static inline-class-member method ExtensionType6|id(dynamic it) → self::ExtensionType6 /* = core::int */ {
+static inline-class-member method ExtensionType6|id(core::int it) → self::ExtensionType6 /* = core::int */ {
   lowered final self::ExtensionType6 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType6|_#id#tearOff(dynamic it) → self::ExtensionType6 /* = core::int */
+static inline-class-member method ExtensionType6|_#id#tearOff(core::int it) → self::ExtensionType6 /* = core::int */
   return self::ExtensionType6|id(it);
-static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ {
+static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(core::int it) → self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ {
   lowered final self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T> /* = core::int */
+static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(core::int it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T> /* = core::int */
   return self::ExtensionType7|id<self::ExtensionType7|_#id#tearOff::T>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.outline.expect
index 54c847c..10f20f9 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.outline.expect
@@ -49,21 +49,21 @@
   tearoff id = self::ExtensionType7|_#id#tearOff;
 }
 static field core::int ExtensionType4|staticField;
-static inline-class-member method ExtensionType1|(dynamic it) → self::ExtensionType1 /* = core::int */
+static inline-class-member method ExtensionType1|(core::int it) → self::ExtensionType1 /* = core::int */
   ;
-static inline-class-member method ExtensionType1|_#new#tearOff(dynamic it) → self::ExtensionType1 /* = core::int */
+static inline-class-member method ExtensionType1|_#new#tearOff(core::int it) → self::ExtensionType1 /* = core::int */
   return self::ExtensionType1|(it);
-static inline-class-member method ExtensionType2|(dynamic it) → self::ExtensionType2 /* = core::int */
+static inline-class-member method ExtensionType2|(core::int it) → self::ExtensionType2 /* = core::int */
   ;
-static inline-class-member method ExtensionType2|_#new#tearOff(dynamic it) → self::ExtensionType2 /* = core::int */
+static inline-class-member method ExtensionType2|_#new#tearOff(core::int it) → self::ExtensionType2 /* = core::int */
   return self::ExtensionType2|(it);
-static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */
+static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(self::ExtensionType3|::T it) → self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */
   ;
-static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T> /* = self::ExtensionType3|_#new#tearOff::T */
+static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(self::ExtensionType3|_#new#tearOff::T it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T> /* = self::ExtensionType3|_#new#tearOff::T */
   return self::ExtensionType3|<self::ExtensionType3|_#new#tearOff::T>(it);
-static inline-class-member method ExtensionType4|(dynamic it) → self::ExtensionType4 /* = core::int */
+static inline-class-member method ExtensionType4|(core::int it) → self::ExtensionType4 /* = core::int */
   ;
-static inline-class-member method ExtensionType4|_#new#tearOff(dynamic it) → self::ExtensionType4 /* = core::int */
+static inline-class-member method ExtensionType4|_#new#tearOff(core::int it) → self::ExtensionType4 /* = core::int */
   return self::ExtensionType4|(it);
 static inline-class-member method ExtensionType4|constructor(core::int it) → self::ExtensionType4 /* = core::int */
   ;
@@ -99,15 +99,15 @@
   ;
 static inline-class-member method ExtensionType4|staticMethod() → core::int
   ;
-static inline-class-member method ExtensionType5|(dynamic it) → self::ExtensionType5 /* = core::int */
+static inline-class-member method ExtensionType5|(core::int it) → self::ExtensionType5 /* = core::int */
   ;
-static inline-class-member method ExtensionType5|_#new#tearOff(dynamic it) → self::ExtensionType5 /* = core::int */
+static inline-class-member method ExtensionType5|_#new#tearOff(core::int it) → self::ExtensionType5 /* = core::int */
   return self::ExtensionType5|(it);
-static inline-class-member method ExtensionType6|id(dynamic it) → self::ExtensionType6 /* = core::int */
+static inline-class-member method ExtensionType6|id(core::int it) → self::ExtensionType6 /* = core::int */
   ;
-static inline-class-member method ExtensionType6|_#id#tearOff(dynamic it) → self::ExtensionType6 /* = core::int */
+static inline-class-member method ExtensionType6|_#id#tearOff(core::int it) → self::ExtensionType6 /* = core::int */
   return self::ExtensionType6|id(it);
-static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */
+static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(core::int it) → self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */
   ;
-static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T> /* = core::int */
+static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(core::int it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T> /* = core::int */
   return self::ExtensionType7|id<self::ExtensionType7|_#id#tearOff::T>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.transformed.expect
index 9f84a45..ae387dd 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/extension_type_declarations.dart.weak.transformed.expect
@@ -49,29 +49,29 @@
   tearoff id = self::ExtensionType7|_#id#tearOff;
 }
 static field core::int ExtensionType4|staticField = 42;
-static inline-class-member method ExtensionType1|(dynamic it) → self::ExtensionType1 /* = core::int */ {
+static inline-class-member method ExtensionType1|(core::int it) → self::ExtensionType1 /* = core::int */ {
   lowered final self::ExtensionType1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType1|_#new#tearOff(dynamic it) → self::ExtensionType1 /* = core::int */
+static inline-class-member method ExtensionType1|_#new#tearOff(core::int it) → self::ExtensionType1 /* = core::int */
   return self::ExtensionType1|(it);
-static inline-class-member method ExtensionType2|(dynamic it) → self::ExtensionType2 /* = core::int */ {
+static inline-class-member method ExtensionType2|(core::int it) → self::ExtensionType2 /* = core::int */ {
   lowered final self::ExtensionType2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType2|_#new#tearOff(dynamic it) → self::ExtensionType2 /* = core::int */
+static inline-class-member method ExtensionType2|_#new#tearOff(core::int it) → self::ExtensionType2 /* = core::int */
   return self::ExtensionType2|(it);
-static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ {
+static inline-class-member method ExtensionType3|<T extends core::num = dynamic>(self::ExtensionType3|::T it) → self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ {
   lowered final self::ExtensionType3<self::ExtensionType3|::T> /* = self::ExtensionType3|::T */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T> /* = self::ExtensionType3|_#new#tearOff::T */
+static inline-class-member method ExtensionType3|_#new#tearOff<T extends core::num = dynamic>(self::ExtensionType3|_#new#tearOff::T it) → self::ExtensionType3<self::ExtensionType3|_#new#tearOff::T> /* = self::ExtensionType3|_#new#tearOff::T */
   return self::ExtensionType3|<self::ExtensionType3|_#new#tearOff::T>(it);
-static inline-class-member method ExtensionType4|(dynamic it) → self::ExtensionType4 /* = core::int */ {
+static inline-class-member method ExtensionType4|(core::int it) → self::ExtensionType4 /* = core::int */ {
   lowered final self::ExtensionType4 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType4|_#new#tearOff(dynamic it) → self::ExtensionType4 /* = core::int */
+static inline-class-member method ExtensionType4|_#new#tearOff(core::int it) → self::ExtensionType4 /* = core::int */
   return self::ExtensionType4|(it);
 static inline-class-member method ExtensionType4|constructor(core::int it) → self::ExtensionType4 /* = core::int */ {
   lowered final self::ExtensionType4 /* = core::int */ #this = it;
@@ -109,21 +109,21 @@
 static inline-class-member set ExtensionType4|staticSetter(core::int value) → void {}
 static inline-class-member method ExtensionType4|staticMethod() → core::int
   return 42;
-static inline-class-member method ExtensionType5|(dynamic it) → self::ExtensionType5 /* = core::int */ {
+static inline-class-member method ExtensionType5|(core::int it) → self::ExtensionType5 /* = core::int */ {
   lowered final self::ExtensionType5 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType5|_#new#tearOff(dynamic it) → self::ExtensionType5 /* = core::int */
+static inline-class-member method ExtensionType5|_#new#tearOff(core::int it) → self::ExtensionType5 /* = core::int */
   return self::ExtensionType5|(it);
-static inline-class-member method ExtensionType6|id(dynamic it) → self::ExtensionType6 /* = core::int */ {
+static inline-class-member method ExtensionType6|id(core::int it) → self::ExtensionType6 /* = core::int */ {
   lowered final self::ExtensionType6 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType6|_#id#tearOff(dynamic it) → self::ExtensionType6 /* = core::int */
+static inline-class-member method ExtensionType6|_#id#tearOff(core::int it) → self::ExtensionType6 /* = core::int */
   return self::ExtensionType6|id(it);
-static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ {
+static inline-class-member method ExtensionType7|id<T extends core::num = dynamic>(core::int it) → self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ {
   lowered final self::ExtensionType7<self::ExtensionType7|id::T> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(dynamic it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T> /* = core::int */
+static inline-class-member method ExtensionType7|_#id#tearOff<T extends core::num = dynamic>(core::int it) → self::ExtensionType7<self::ExtensionType7|_#id#tearOff::T> /* = core::int */
   return self::ExtensionType7|id<self::ExtensionType7|_#id#tearOff::T>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.expect
index f386cdf..016afb6 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.expect
@@ -37,11 +37,11 @@
   constructor named = self::B|named;
   tearoff named = self::B|_#named#tearOff;
 }
-static inline-class-member method B|_(dynamic a) → self::B /* = self::A */ {
+static inline-class-member method B|_(self::A a) → self::B /* = self::A */ {
   lowered final self::B /* = self::A */ #this = a;
   return #this;
 }
-static inline-class-member method B|_#_#tearOff(dynamic a) → self::B /* = self::A */
+static inline-class-member method B|_#_#tearOff(self::A a) → self::B /* = self::A */
   return self::B|_(a);
 external static inline-class-member method B|(self::A a) → self::B /* = self::A */;
 static inline-class-member method B|_#new#tearOff(self::A a) → self::B /* = self::A */
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.transformed.expect
index f386cdf..016afb6 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.strong.transformed.expect
@@ -37,11 +37,11 @@
   constructor named = self::B|named;
   tearoff named = self::B|_#named#tearOff;
 }
-static inline-class-member method B|_(dynamic a) → self::B /* = self::A */ {
+static inline-class-member method B|_(self::A a) → self::B /* = self::A */ {
   lowered final self::B /* = self::A */ #this = a;
   return #this;
 }
-static inline-class-member method B|_#_#tearOff(dynamic a) → self::B /* = self::A */
+static inline-class-member method B|_#_#tearOff(self::A a) → self::B /* = self::A */
   return self::B|_(a);
 external static inline-class-member method B|(self::A a) → self::B /* = self::A */;
 static inline-class-member method B|_#new#tearOff(self::A a) → self::B /* = self::A */
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.expect
index 5dc61aa..a194788 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.expect
@@ -37,11 +37,11 @@
   constructor named = self::B|named;
   tearoff named = self::B|_#named#tearOff;
 }
-static inline-class-member method B|_(dynamic a) → self::B /* = self::A */ {
+static inline-class-member method B|_(self::A a) → self::B /* = self::A */ {
   lowered final self::B /* = self::A */ #this = a;
   return #this;
 }
-static inline-class-member method B|_#_#tearOff(dynamic a) → self::B /* = self::A */
+static inline-class-member method B|_#_#tearOff(self::A a) → self::B /* = self::A */
   return self::B|_(a);
 external static inline-class-member method B|(self::A a) → self::B /* = self::A */;
 static inline-class-member method B|_#new#tearOff(self::A a) → self::B /* = self::A */
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.modular.expect
index 5dc61aa..a194788 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.modular.expect
@@ -37,11 +37,11 @@
   constructor named = self::B|named;
   tearoff named = self::B|_#named#tearOff;
 }
-static inline-class-member method B|_(dynamic a) → self::B /* = self::A */ {
+static inline-class-member method B|_(self::A a) → self::B /* = self::A */ {
   lowered final self::B /* = self::A */ #this = a;
   return #this;
 }
-static inline-class-member method B|_#_#tearOff(dynamic a) → self::B /* = self::A */
+static inline-class-member method B|_#_#tearOff(self::A a) → self::B /* = self::A */
   return self::B|_(a);
 external static inline-class-member method B|(self::A a) → self::B /* = self::A */;
 static inline-class-member method B|_#new#tearOff(self::A a) → self::B /* = self::A */
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.outline.expect
index 27b3887..143caf4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.outline.expect
@@ -28,9 +28,9 @@
   constructor named = self::B|named;
   tearoff named = self::B|_#named#tearOff;
 }
-static inline-class-member method B|_(dynamic a) → self::B /* = self::A */
+static inline-class-member method B|_(self::A a) → self::B /* = self::A */
   ;
-static inline-class-member method B|_#_#tearOff(dynamic a) → self::B /* = self::A */
+static inline-class-member method B|_#_#tearOff(self::A a) → self::B /* = self::A */
   return self::B|_(a);
 external static inline-class-member method B|(self::A a) → self::B /* = self::A */;
 static inline-class-member method B|_#new#tearOff(self::A a) → self::B /* = self::A */
diff --git a/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.transformed.expect
index 5dc61aa..a194788 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/external.dart.weak.transformed.expect
@@ -37,11 +37,11 @@
   constructor named = self::B|named;
   tearoff named = self::B|_#named#tearOff;
 }
-static inline-class-member method B|_(dynamic a) → self::B /* = self::A */ {
+static inline-class-member method B|_(self::A a) → self::B /* = self::A */ {
   lowered final self::B /* = self::A */ #this = a;
   return #this;
 }
-static inline-class-member method B|_#_#tearOff(dynamic a) → self::B /* = self::A */
+static inline-class-member method B|_#_#tearOff(self::A a) → self::B /* = self::A */
   return self::B|_(a);
 external static inline-class-member method B|(self::A a) → self::B /* = self::A */;
 static inline-class-member method B|_#new#tearOff(self::A a) → self::B /* = self::A */
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.expect
index 00bb75e..ecbd0df 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.expect
@@ -337,11 +337,11 @@
   tearoff • = self::ErroneousInlineClass|_#new#tearOff;
 }
 static extension-member method _extension#0|set#it(lowered final dynamic #this, dynamic value) → void {}
-static inline-class-member method InlineClass|(dynamic it) → self::InlineClass /* = core::int */ {
+static inline-class-member method InlineClass|(core::int it) → self::InlineClass /* = core::int */ {
   lowered final self::InlineClass /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|_#new#tearOff(core::int it) → self::InlineClass /* = core::int */
   return self::InlineClass|(it);
 static inline-class-member method InlineClass|test(lowered final self::InlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
@@ -365,11 +365,11 @@
 }
 static inline-class-member method InlineClass|get#test(lowered final self::InlineClass /* = core::int */ #this) → () → void
   return () → void => self::InlineClass|test(#this);
-static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ {
+static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(self::GenericInlineClass|::T% it) → self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ {
   lowered final self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%> /* = self::GenericInlineClass|_#new#tearOff::T% */
+static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericInlineClass|_#new#tearOff::T% it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%> /* = self::GenericInlineClass|_#new#tearOff::T% */
   return self::GenericInlineClass|<self::GenericInlineClass|_#new#tearOff::T%>(it);
 static inline-class-member method GenericInlineClass|test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|test::T%> /* = self::GenericInlineClass|test::T% */ #this, self::GenericInlineClass|test::T% t) → void {
   self::GenericInlineClass|test::T% a1 = #this as{Unchecked} self::GenericInlineClass|test::T%;
@@ -393,11 +393,11 @@
 }
 static inline-class-member method GenericInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|get#test::T%> /* = self::GenericInlineClass|get#test::T% */ #this) → (self::GenericInlineClass|get#test::T%) → void
   return (self::GenericInlineClass|get#test::T% t) → void => self::GenericInlineClass|test<self::GenericInlineClass|get#test::T%>(#this, t);
-static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ {
+static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(() → self::FunctionInlineClass|::T% it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ {
   lowered final self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%> /* = () → self::FunctionInlineClass|_#new#tearOff::T% */
+static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(() → self::FunctionInlineClass|_#new#tearOff::T% it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%> /* = () → self::FunctionInlineClass|_#new#tearOff::T% */
   return self::FunctionInlineClass|<self::FunctionInlineClass|_#new#tearOff::T%>(it);
 static inline-class-member method FunctionInlineClass|test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|test::T%> /* = () → self::FunctionInlineClass|test::T% */ #this, () → self::FunctionInlineClass|test::T% t) → void {
   () → self::FunctionInlineClass|test::T% a1 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
@@ -425,11 +425,11 @@
 }
 static inline-class-member method FunctionInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|get#test::T%> /* = () → self::FunctionInlineClass|get#test::T% */ #this) → (() → self::FunctionInlineClass|get#test::T%) → void
   return (() → self::FunctionInlineClass|get#test::T% t) → void => self::FunctionInlineClass|test<self::FunctionInlineClass|get#test::T%>(#this, t);
-static inline-class-member method GenericFunctionInlineClass|(dynamic it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ {
+static inline-class-member method GenericFunctionInlineClass|(<T extends core::Object? = dynamic>() → T% it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ {
   lowered final self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(dynamic it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
+static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(<T extends core::Object? = dynamic>() → T% it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
   return self::GenericFunctionInlineClass|(it);
 static inline-class-member method GenericFunctionInlineClass|test(lowered final self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ #this) → void {
   <T extends core::Object? = dynamic>() → T% a1 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
@@ -493,11 +493,11 @@
 }
 static inline-class-member method DynamicInlineClass|get#test(lowered final self::DynamicInlineClass /* = dynamic */ #this) → () → void
   return () → void => self::DynamicInlineClass|test(#this);
-static inline-class-member method ErroneousInlineClass|(dynamic a, dynamic b) → self::ErroneousInlineClass /* = core::int */ {
+static inline-class-member method ErroneousInlineClass|(core::int a, core::String b) → self::ErroneousInlineClass /* = core::int */ {
   lowered final self::ErroneousInlineClass /* = core::int */ #this = b;
   return #this;
 }
-static inline-class-member method ErroneousInlineClass|_#new#tearOff(dynamic a, dynamic b) → self::ErroneousInlineClass /* = core::int */
+static inline-class-member method ErroneousInlineClass|_#new#tearOff(core::int a, core::String b) → self::ErroneousInlineClass /* = core::int */
   return self::ErroneousInlineClass|(a, b);
 static inline-class-member method ErroneousInlineClass|test(lowered final self::ErroneousInlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
@@ -694,11 +694,11 @@
   constructor • = self2::PrivateInlineClass|;
   tearoff • = self2::PrivateInlineClass|_#new#tearOff;
 }
-static inline-class-member method PrivateInlineClass|(dynamic _it) → self2::PrivateInlineClass /* = core::int */ {
+static inline-class-member method PrivateInlineClass|(core::int _it) → self2::PrivateInlineClass /* = core::int */ {
   lowered final self2::PrivateInlineClass /* = core::int */ #this = _it;
   return #this;
 }
-static inline-class-member method PrivateInlineClass|_#new#tearOff(dynamic _it) → self2::PrivateInlineClass /* = core::int */
+static inline-class-member method PrivateInlineClass|_#new#tearOff(core::int _it) → self2::PrivateInlineClass /* = core::int */
   return self2::PrivateInlineClass|(_it);
 static inline-class-member method PrivateInlineClass|test(lowered final self2::PrivateInlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.transformed.expect
index 00bb75e..ecbd0df 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.strong.transformed.expect
@@ -337,11 +337,11 @@
   tearoff • = self::ErroneousInlineClass|_#new#tearOff;
 }
 static extension-member method _extension#0|set#it(lowered final dynamic #this, dynamic value) → void {}
-static inline-class-member method InlineClass|(dynamic it) → self::InlineClass /* = core::int */ {
+static inline-class-member method InlineClass|(core::int it) → self::InlineClass /* = core::int */ {
   lowered final self::InlineClass /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|_#new#tearOff(core::int it) → self::InlineClass /* = core::int */
   return self::InlineClass|(it);
 static inline-class-member method InlineClass|test(lowered final self::InlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
@@ -365,11 +365,11 @@
 }
 static inline-class-member method InlineClass|get#test(lowered final self::InlineClass /* = core::int */ #this) → () → void
   return () → void => self::InlineClass|test(#this);
-static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ {
+static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(self::GenericInlineClass|::T% it) → self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ {
   lowered final self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%> /* = self::GenericInlineClass|_#new#tearOff::T% */
+static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericInlineClass|_#new#tearOff::T% it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%> /* = self::GenericInlineClass|_#new#tearOff::T% */
   return self::GenericInlineClass|<self::GenericInlineClass|_#new#tearOff::T%>(it);
 static inline-class-member method GenericInlineClass|test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|test::T%> /* = self::GenericInlineClass|test::T% */ #this, self::GenericInlineClass|test::T% t) → void {
   self::GenericInlineClass|test::T% a1 = #this as{Unchecked} self::GenericInlineClass|test::T%;
@@ -393,11 +393,11 @@
 }
 static inline-class-member method GenericInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|get#test::T%> /* = self::GenericInlineClass|get#test::T% */ #this) → (self::GenericInlineClass|get#test::T%) → void
   return (self::GenericInlineClass|get#test::T% t) → void => self::GenericInlineClass|test<self::GenericInlineClass|get#test::T%>(#this, t);
-static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ {
+static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(() → self::FunctionInlineClass|::T% it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ {
   lowered final self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%> /* = () → self::FunctionInlineClass|_#new#tearOff::T% */
+static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(() → self::FunctionInlineClass|_#new#tearOff::T% it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%> /* = () → self::FunctionInlineClass|_#new#tearOff::T% */
   return self::FunctionInlineClass|<self::FunctionInlineClass|_#new#tearOff::T%>(it);
 static inline-class-member method FunctionInlineClass|test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|test::T%> /* = () → self::FunctionInlineClass|test::T% */ #this, () → self::FunctionInlineClass|test::T% t) → void {
   () → self::FunctionInlineClass|test::T% a1 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
@@ -425,11 +425,11 @@
 }
 static inline-class-member method FunctionInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|get#test::T%> /* = () → self::FunctionInlineClass|get#test::T% */ #this) → (() → self::FunctionInlineClass|get#test::T%) → void
   return (() → self::FunctionInlineClass|get#test::T% t) → void => self::FunctionInlineClass|test<self::FunctionInlineClass|get#test::T%>(#this, t);
-static inline-class-member method GenericFunctionInlineClass|(dynamic it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ {
+static inline-class-member method GenericFunctionInlineClass|(<T extends core::Object? = dynamic>() → T% it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ {
   lowered final self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(dynamic it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
+static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(<T extends core::Object? = dynamic>() → T% it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
   return self::GenericFunctionInlineClass|(it);
 static inline-class-member method GenericFunctionInlineClass|test(lowered final self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ #this) → void {
   <T extends core::Object? = dynamic>() → T% a1 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
@@ -493,11 +493,11 @@
 }
 static inline-class-member method DynamicInlineClass|get#test(lowered final self::DynamicInlineClass /* = dynamic */ #this) → () → void
   return () → void => self::DynamicInlineClass|test(#this);
-static inline-class-member method ErroneousInlineClass|(dynamic a, dynamic b) → self::ErroneousInlineClass /* = core::int */ {
+static inline-class-member method ErroneousInlineClass|(core::int a, core::String b) → self::ErroneousInlineClass /* = core::int */ {
   lowered final self::ErroneousInlineClass /* = core::int */ #this = b;
   return #this;
 }
-static inline-class-member method ErroneousInlineClass|_#new#tearOff(dynamic a, dynamic b) → self::ErroneousInlineClass /* = core::int */
+static inline-class-member method ErroneousInlineClass|_#new#tearOff(core::int a, core::String b) → self::ErroneousInlineClass /* = core::int */
   return self::ErroneousInlineClass|(a, b);
 static inline-class-member method ErroneousInlineClass|test(lowered final self::ErroneousInlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
@@ -694,11 +694,11 @@
   constructor • = self2::PrivateInlineClass|;
   tearoff • = self2::PrivateInlineClass|_#new#tearOff;
 }
-static inline-class-member method PrivateInlineClass|(dynamic _it) → self2::PrivateInlineClass /* = core::int */ {
+static inline-class-member method PrivateInlineClass|(core::int _it) → self2::PrivateInlineClass /* = core::int */ {
   lowered final self2::PrivateInlineClass /* = core::int */ #this = _it;
   return #this;
 }
-static inline-class-member method PrivateInlineClass|_#new#tearOff(dynamic _it) → self2::PrivateInlineClass /* = core::int */
+static inline-class-member method PrivateInlineClass|_#new#tearOff(core::int _it) → self2::PrivateInlineClass /* = core::int */
   return self2::PrivateInlineClass|(_it);
 static inline-class-member method PrivateInlineClass|test(lowered final self2::PrivateInlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.expect
index 00bb75e..ecbd0df 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.expect
@@ -337,11 +337,11 @@
   tearoff • = self::ErroneousInlineClass|_#new#tearOff;
 }
 static extension-member method _extension#0|set#it(lowered final dynamic #this, dynamic value) → void {}
-static inline-class-member method InlineClass|(dynamic it) → self::InlineClass /* = core::int */ {
+static inline-class-member method InlineClass|(core::int it) → self::InlineClass /* = core::int */ {
   lowered final self::InlineClass /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|_#new#tearOff(core::int it) → self::InlineClass /* = core::int */
   return self::InlineClass|(it);
 static inline-class-member method InlineClass|test(lowered final self::InlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
@@ -365,11 +365,11 @@
 }
 static inline-class-member method InlineClass|get#test(lowered final self::InlineClass /* = core::int */ #this) → () → void
   return () → void => self::InlineClass|test(#this);
-static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ {
+static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(self::GenericInlineClass|::T% it) → self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ {
   lowered final self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%> /* = self::GenericInlineClass|_#new#tearOff::T% */
+static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericInlineClass|_#new#tearOff::T% it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%> /* = self::GenericInlineClass|_#new#tearOff::T% */
   return self::GenericInlineClass|<self::GenericInlineClass|_#new#tearOff::T%>(it);
 static inline-class-member method GenericInlineClass|test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|test::T%> /* = self::GenericInlineClass|test::T% */ #this, self::GenericInlineClass|test::T% t) → void {
   self::GenericInlineClass|test::T% a1 = #this as{Unchecked} self::GenericInlineClass|test::T%;
@@ -393,11 +393,11 @@
 }
 static inline-class-member method GenericInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|get#test::T%> /* = self::GenericInlineClass|get#test::T% */ #this) → (self::GenericInlineClass|get#test::T%) → void
   return (self::GenericInlineClass|get#test::T% t) → void => self::GenericInlineClass|test<self::GenericInlineClass|get#test::T%>(#this, t);
-static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ {
+static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(() → self::FunctionInlineClass|::T% it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ {
   lowered final self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%> /* = () → self::FunctionInlineClass|_#new#tearOff::T% */
+static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(() → self::FunctionInlineClass|_#new#tearOff::T% it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%> /* = () → self::FunctionInlineClass|_#new#tearOff::T% */
   return self::FunctionInlineClass|<self::FunctionInlineClass|_#new#tearOff::T%>(it);
 static inline-class-member method FunctionInlineClass|test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|test::T%> /* = () → self::FunctionInlineClass|test::T% */ #this, () → self::FunctionInlineClass|test::T% t) → void {
   () → self::FunctionInlineClass|test::T% a1 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
@@ -425,11 +425,11 @@
 }
 static inline-class-member method FunctionInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|get#test::T%> /* = () → self::FunctionInlineClass|get#test::T% */ #this) → (() → self::FunctionInlineClass|get#test::T%) → void
   return (() → self::FunctionInlineClass|get#test::T% t) → void => self::FunctionInlineClass|test<self::FunctionInlineClass|get#test::T%>(#this, t);
-static inline-class-member method GenericFunctionInlineClass|(dynamic it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ {
+static inline-class-member method GenericFunctionInlineClass|(<T extends core::Object? = dynamic>() → T% it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ {
   lowered final self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(dynamic it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
+static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(<T extends core::Object? = dynamic>() → T% it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
   return self::GenericFunctionInlineClass|(it);
 static inline-class-member method GenericFunctionInlineClass|test(lowered final self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ #this) → void {
   <T extends core::Object? = dynamic>() → T% a1 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
@@ -493,11 +493,11 @@
 }
 static inline-class-member method DynamicInlineClass|get#test(lowered final self::DynamicInlineClass /* = dynamic */ #this) → () → void
   return () → void => self::DynamicInlineClass|test(#this);
-static inline-class-member method ErroneousInlineClass|(dynamic a, dynamic b) → self::ErroneousInlineClass /* = core::int */ {
+static inline-class-member method ErroneousInlineClass|(core::int a, core::String b) → self::ErroneousInlineClass /* = core::int */ {
   lowered final self::ErroneousInlineClass /* = core::int */ #this = b;
   return #this;
 }
-static inline-class-member method ErroneousInlineClass|_#new#tearOff(dynamic a, dynamic b) → self::ErroneousInlineClass /* = core::int */
+static inline-class-member method ErroneousInlineClass|_#new#tearOff(core::int a, core::String b) → self::ErroneousInlineClass /* = core::int */
   return self::ErroneousInlineClass|(a, b);
 static inline-class-member method ErroneousInlineClass|test(lowered final self::ErroneousInlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
@@ -694,11 +694,11 @@
   constructor • = self2::PrivateInlineClass|;
   tearoff • = self2::PrivateInlineClass|_#new#tearOff;
 }
-static inline-class-member method PrivateInlineClass|(dynamic _it) → self2::PrivateInlineClass /* = core::int */ {
+static inline-class-member method PrivateInlineClass|(core::int _it) → self2::PrivateInlineClass /* = core::int */ {
   lowered final self2::PrivateInlineClass /* = core::int */ #this = _it;
   return #this;
 }
-static inline-class-member method PrivateInlineClass|_#new#tearOff(dynamic _it) → self2::PrivateInlineClass /* = core::int */
+static inline-class-member method PrivateInlineClass|_#new#tearOff(core::int _it) → self2::PrivateInlineClass /* = core::int */
   return self2::PrivateInlineClass|(_it);
 static inline-class-member method PrivateInlineClass|test(lowered final self2::PrivateInlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.modular.expect
index 00bb75e..ecbd0df 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.modular.expect
@@ -337,11 +337,11 @@
   tearoff • = self::ErroneousInlineClass|_#new#tearOff;
 }
 static extension-member method _extension#0|set#it(lowered final dynamic #this, dynamic value) → void {}
-static inline-class-member method InlineClass|(dynamic it) → self::InlineClass /* = core::int */ {
+static inline-class-member method InlineClass|(core::int it) → self::InlineClass /* = core::int */ {
   lowered final self::InlineClass /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|_#new#tearOff(core::int it) → self::InlineClass /* = core::int */
   return self::InlineClass|(it);
 static inline-class-member method InlineClass|test(lowered final self::InlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
@@ -365,11 +365,11 @@
 }
 static inline-class-member method InlineClass|get#test(lowered final self::InlineClass /* = core::int */ #this) → () → void
   return () → void => self::InlineClass|test(#this);
-static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ {
+static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(self::GenericInlineClass|::T% it) → self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ {
   lowered final self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%> /* = self::GenericInlineClass|_#new#tearOff::T% */
+static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericInlineClass|_#new#tearOff::T% it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%> /* = self::GenericInlineClass|_#new#tearOff::T% */
   return self::GenericInlineClass|<self::GenericInlineClass|_#new#tearOff::T%>(it);
 static inline-class-member method GenericInlineClass|test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|test::T%> /* = self::GenericInlineClass|test::T% */ #this, self::GenericInlineClass|test::T% t) → void {
   self::GenericInlineClass|test::T% a1 = #this as{Unchecked} self::GenericInlineClass|test::T%;
@@ -393,11 +393,11 @@
 }
 static inline-class-member method GenericInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|get#test::T%> /* = self::GenericInlineClass|get#test::T% */ #this) → (self::GenericInlineClass|get#test::T%) → void
   return (self::GenericInlineClass|get#test::T% t) → void => self::GenericInlineClass|test<self::GenericInlineClass|get#test::T%>(#this, t);
-static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ {
+static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(() → self::FunctionInlineClass|::T% it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ {
   lowered final self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%> /* = () → self::FunctionInlineClass|_#new#tearOff::T% */
+static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(() → self::FunctionInlineClass|_#new#tearOff::T% it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%> /* = () → self::FunctionInlineClass|_#new#tearOff::T% */
   return self::FunctionInlineClass|<self::FunctionInlineClass|_#new#tearOff::T%>(it);
 static inline-class-member method FunctionInlineClass|test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|test::T%> /* = () → self::FunctionInlineClass|test::T% */ #this, () → self::FunctionInlineClass|test::T% t) → void {
   () → self::FunctionInlineClass|test::T% a1 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
@@ -425,11 +425,11 @@
 }
 static inline-class-member method FunctionInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|get#test::T%> /* = () → self::FunctionInlineClass|get#test::T% */ #this) → (() → self::FunctionInlineClass|get#test::T%) → void
   return (() → self::FunctionInlineClass|get#test::T% t) → void => self::FunctionInlineClass|test<self::FunctionInlineClass|get#test::T%>(#this, t);
-static inline-class-member method GenericFunctionInlineClass|(dynamic it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ {
+static inline-class-member method GenericFunctionInlineClass|(<T extends core::Object? = dynamic>() → T% it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ {
   lowered final self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(dynamic it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
+static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(<T extends core::Object? = dynamic>() → T% it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
   return self::GenericFunctionInlineClass|(it);
 static inline-class-member method GenericFunctionInlineClass|test(lowered final self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ #this) → void {
   <T extends core::Object? = dynamic>() → T% a1 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
@@ -493,11 +493,11 @@
 }
 static inline-class-member method DynamicInlineClass|get#test(lowered final self::DynamicInlineClass /* = dynamic */ #this) → () → void
   return () → void => self::DynamicInlineClass|test(#this);
-static inline-class-member method ErroneousInlineClass|(dynamic a, dynamic b) → self::ErroneousInlineClass /* = core::int */ {
+static inline-class-member method ErroneousInlineClass|(core::int a, core::String b) → self::ErroneousInlineClass /* = core::int */ {
   lowered final self::ErroneousInlineClass /* = core::int */ #this = b;
   return #this;
 }
-static inline-class-member method ErroneousInlineClass|_#new#tearOff(dynamic a, dynamic b) → self::ErroneousInlineClass /* = core::int */
+static inline-class-member method ErroneousInlineClass|_#new#tearOff(core::int a, core::String b) → self::ErroneousInlineClass /* = core::int */
   return self::ErroneousInlineClass|(a, b);
 static inline-class-member method ErroneousInlineClass|test(lowered final self::ErroneousInlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
@@ -694,11 +694,11 @@
   constructor • = self2::PrivateInlineClass|;
   tearoff • = self2::PrivateInlineClass|_#new#tearOff;
 }
-static inline-class-member method PrivateInlineClass|(dynamic _it) → self2::PrivateInlineClass /* = core::int */ {
+static inline-class-member method PrivateInlineClass|(core::int _it) → self2::PrivateInlineClass /* = core::int */ {
   lowered final self2::PrivateInlineClass /* = core::int */ #this = _it;
   return #this;
 }
-static inline-class-member method PrivateInlineClass|_#new#tearOff(dynamic _it) → self2::PrivateInlineClass /* = core::int */
+static inline-class-member method PrivateInlineClass|_#new#tearOff(core::int _it) → self2::PrivateInlineClass /* = core::int */
   return self2::PrivateInlineClass|(_it);
 static inline-class-member method PrivateInlineClass|test(lowered final self2::PrivateInlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.outline.expect
index ae96c28..edb9755 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.outline.expect
@@ -45,33 +45,33 @@
 }
 static extension-member method _extension#0|set#it(lowered final dynamic #this, dynamic value) → void
   ;
-static inline-class-member method InlineClass|(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|(core::int it) → self::InlineClass /* = core::int */
   ;
-static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|_#new#tearOff(core::int it) → self::InlineClass /* = core::int */
   return self::InlineClass|(it);
 static inline-class-member method InlineClass|test(lowered final self::InlineClass /* = core::int */ #this) → void
   ;
 static inline-class-member method InlineClass|get#test(lowered final self::InlineClass /* = core::int */ #this) → () → void
   return () → void => self::InlineClass|test(#this);
-static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */
+static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(self::GenericInlineClass|::T% it) → self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */
   ;
-static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%> /* = self::GenericInlineClass|_#new#tearOff::T% */
+static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericInlineClass|_#new#tearOff::T% it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%> /* = self::GenericInlineClass|_#new#tearOff::T% */
   return self::GenericInlineClass|<self::GenericInlineClass|_#new#tearOff::T%>(it);
 static inline-class-member method GenericInlineClass|test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|test::T%> /* = self::GenericInlineClass|test::T% */ #this, self::GenericInlineClass|test::T% t) → void
   ;
 static inline-class-member method GenericInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|get#test::T%> /* = self::GenericInlineClass|get#test::T% */ #this) → (self::GenericInlineClass|get#test::T%) → void
   return (self::GenericInlineClass|get#test::T% t) → void => self::GenericInlineClass|test<self::GenericInlineClass|get#test::T%>(#this, t);
-static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */
+static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(() → self::FunctionInlineClass|::T% it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */
   ;
-static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%> /* = () → self::FunctionInlineClass|_#new#tearOff::T% */
+static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(() → self::FunctionInlineClass|_#new#tearOff::T% it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%> /* = () → self::FunctionInlineClass|_#new#tearOff::T% */
   return self::FunctionInlineClass|<self::FunctionInlineClass|_#new#tearOff::T%>(it);
 static inline-class-member method FunctionInlineClass|test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|test::T%> /* = () → self::FunctionInlineClass|test::T% */ #this, () → self::FunctionInlineClass|test::T% t) → void
   ;
 static inline-class-member method FunctionInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|get#test::T%> /* = () → self::FunctionInlineClass|get#test::T% */ #this) → (() → self::FunctionInlineClass|get#test::T%) → void
   return (() → self::FunctionInlineClass|get#test::T% t) → void => self::FunctionInlineClass|test<self::FunctionInlineClass|get#test::T%>(#this, t);
-static inline-class-member method GenericFunctionInlineClass|(dynamic it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
+static inline-class-member method GenericFunctionInlineClass|(<T extends core::Object? = dynamic>() → T% it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
   ;
-static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(dynamic it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
+static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(<T extends core::Object? = dynamic>() → T% it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
   return self::GenericFunctionInlineClass|(it);
 static inline-class-member method GenericFunctionInlineClass|test(lowered final self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ #this) → void
   ;
@@ -85,9 +85,9 @@
   ;
 static inline-class-member method DynamicInlineClass|get#test(lowered final self::DynamicInlineClass /* = dynamic */ #this) → () → void
   return () → void => self::DynamicInlineClass|test(#this);
-static inline-class-member method ErroneousInlineClass|(dynamic a, dynamic b) → self::ErroneousInlineClass /* = core::int */
+static inline-class-member method ErroneousInlineClass|(core::int a, core::String b) → self::ErroneousInlineClass /* = core::int */
   ;
-static inline-class-member method ErroneousInlineClass|_#new#tearOff(dynamic a, dynamic b) → self::ErroneousInlineClass /* = core::int */
+static inline-class-member method ErroneousInlineClass|_#new#tearOff(core::int a, core::String b) → self::ErroneousInlineClass /* = core::int */
   return self::ErroneousInlineClass|(a, b);
 static inline-class-member method ErroneousInlineClass|test(lowered final self::ErroneousInlineClass /* = core::int */ #this) → void
   ;
@@ -106,9 +106,9 @@
   constructor • = self2::PrivateInlineClass|;
   tearoff • = self2::PrivateInlineClass|_#new#tearOff;
 }
-static inline-class-member method PrivateInlineClass|(dynamic _it) → self2::PrivateInlineClass /* = core::int */
+static inline-class-member method PrivateInlineClass|(core::int _it) → self2::PrivateInlineClass /* = core::int */
   ;
-static inline-class-member method PrivateInlineClass|_#new#tearOff(dynamic _it) → self2::PrivateInlineClass /* = core::int */
+static inline-class-member method PrivateInlineClass|_#new#tearOff(core::int _it) → self2::PrivateInlineClass /* = core::int */
   return self2::PrivateInlineClass|(_it);
 static inline-class-member method PrivateInlineClass|test(lowered final self2::PrivateInlineClass /* = core::int */ #this) → void
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.transformed.expect
index 00bb75e..ecbd0df 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/field_access.dart.weak.transformed.expect
@@ -337,11 +337,11 @@
   tearoff • = self::ErroneousInlineClass|_#new#tearOff;
 }
 static extension-member method _extension#0|set#it(lowered final dynamic #this, dynamic value) → void {}
-static inline-class-member method InlineClass|(dynamic it) → self::InlineClass /* = core::int */ {
+static inline-class-member method InlineClass|(core::int it) → self::InlineClass /* = core::int */ {
   lowered final self::InlineClass /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|_#new#tearOff(core::int it) → self::InlineClass /* = core::int */
   return self::InlineClass|(it);
 static inline-class-member method InlineClass|test(lowered final self::InlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
@@ -365,11 +365,11 @@
 }
 static inline-class-member method InlineClass|get#test(lowered final self::InlineClass /* = core::int */ #this) → () → void
   return () → void => self::InlineClass|test(#this);
-static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ {
+static inline-class-member method GenericInlineClass|<T extends core::Object? = dynamic>(self::GenericInlineClass|::T% it) → self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ {
   lowered final self::GenericInlineClass<self::GenericInlineClass|::T%> /* = self::GenericInlineClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%> /* = self::GenericInlineClass|_#new#tearOff::T% */
+static inline-class-member method GenericInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericInlineClass|_#new#tearOff::T% it) → self::GenericInlineClass<self::GenericInlineClass|_#new#tearOff::T%> /* = self::GenericInlineClass|_#new#tearOff::T% */
   return self::GenericInlineClass|<self::GenericInlineClass|_#new#tearOff::T%>(it);
 static inline-class-member method GenericInlineClass|test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|test::T%> /* = self::GenericInlineClass|test::T% */ #this, self::GenericInlineClass|test::T% t) → void {
   self::GenericInlineClass|test::T% a1 = #this as{Unchecked} self::GenericInlineClass|test::T%;
@@ -393,11 +393,11 @@
 }
 static inline-class-member method GenericInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::GenericInlineClass<self::GenericInlineClass|get#test::T%> /* = self::GenericInlineClass|get#test::T% */ #this) → (self::GenericInlineClass|get#test::T%) → void
   return (self::GenericInlineClass|get#test::T% t) → void => self::GenericInlineClass|test<self::GenericInlineClass|get#test::T%>(#this, t);
-static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ {
+static inline-class-member method FunctionInlineClass|<T extends core::Object? = dynamic>(() → self::FunctionInlineClass|::T% it) → self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ {
   lowered final self::FunctionInlineClass<self::FunctionInlineClass|::T%> /* = () → self::FunctionInlineClass|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%> /* = () → self::FunctionInlineClass|_#new#tearOff::T% */
+static inline-class-member method FunctionInlineClass|_#new#tearOff<T extends core::Object? = dynamic>(() → self::FunctionInlineClass|_#new#tearOff::T% it) → self::FunctionInlineClass<self::FunctionInlineClass|_#new#tearOff::T%> /* = () → self::FunctionInlineClass|_#new#tearOff::T% */
   return self::FunctionInlineClass|<self::FunctionInlineClass|_#new#tearOff::T%>(it);
 static inline-class-member method FunctionInlineClass|test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|test::T%> /* = () → self::FunctionInlineClass|test::T% */ #this, () → self::FunctionInlineClass|test::T% t) → void {
   () → self::FunctionInlineClass|test::T% a1 = #this as{Unchecked} () → self::FunctionInlineClass|test::T%;
@@ -425,11 +425,11 @@
 }
 static inline-class-member method FunctionInlineClass|get#test<T extends core::Object? = dynamic>(lowered final self::FunctionInlineClass<self::FunctionInlineClass|get#test::T%> /* = () → self::FunctionInlineClass|get#test::T% */ #this) → (() → self::FunctionInlineClass|get#test::T%) → void
   return (() → self::FunctionInlineClass|get#test::T% t) → void => self::FunctionInlineClass|test<self::FunctionInlineClass|get#test::T%>(#this, t);
-static inline-class-member method GenericFunctionInlineClass|(dynamic it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ {
+static inline-class-member method GenericFunctionInlineClass|(<T extends core::Object? = dynamic>() → T% it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ {
   lowered final self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(dynamic it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
+static inline-class-member method GenericFunctionInlineClass|_#new#tearOff(<T extends core::Object? = dynamic>() → T% it) → self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */
   return self::GenericFunctionInlineClass|(it);
 static inline-class-member method GenericFunctionInlineClass|test(lowered final self::GenericFunctionInlineClass /* = <T extends core::Object? = dynamic>() → T% */ #this) → void {
   <T extends core::Object? = dynamic>() → T% a1 = #this as{Unchecked} <T extends core::Object? = dynamic>() → T%;
@@ -493,11 +493,11 @@
 }
 static inline-class-member method DynamicInlineClass|get#test(lowered final self::DynamicInlineClass /* = dynamic */ #this) → () → void
   return () → void => self::DynamicInlineClass|test(#this);
-static inline-class-member method ErroneousInlineClass|(dynamic a, dynamic b) → self::ErroneousInlineClass /* = core::int */ {
+static inline-class-member method ErroneousInlineClass|(core::int a, core::String b) → self::ErroneousInlineClass /* = core::int */ {
   lowered final self::ErroneousInlineClass /* = core::int */ #this = b;
   return #this;
 }
-static inline-class-member method ErroneousInlineClass|_#new#tearOff(dynamic a, dynamic b) → self::ErroneousInlineClass /* = core::int */
+static inline-class-member method ErroneousInlineClass|_#new#tearOff(core::int a, core::String b) → self::ErroneousInlineClass /* = core::int */
   return self::ErroneousInlineClass|(a, b);
 static inline-class-member method ErroneousInlineClass|test(lowered final self::ErroneousInlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
@@ -694,11 +694,11 @@
   constructor • = self2::PrivateInlineClass|;
   tearoff • = self2::PrivateInlineClass|_#new#tearOff;
 }
-static inline-class-member method PrivateInlineClass|(dynamic _it) → self2::PrivateInlineClass /* = core::int */ {
+static inline-class-member method PrivateInlineClass|(core::int _it) → self2::PrivateInlineClass /* = core::int */ {
   lowered final self2::PrivateInlineClass /* = core::int */ #this = _it;
   return #this;
 }
-static inline-class-member method PrivateInlineClass|_#new#tearOff(dynamic _it) → self2::PrivateInlineClass /* = core::int */
+static inline-class-member method PrivateInlineClass|_#new#tearOff(core::int _it) → self2::PrivateInlineClass /* = core::int */
   return self2::PrivateInlineClass|(_it);
 static inline-class-member method PrivateInlineClass|test(lowered final self2::PrivateInlineClass /* = core::int */ #this) → void {
   core::int a1 = #this as{Unchecked} core::int;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.strong.expect
index 05d1aa9..eaa6a97 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.strong.expect
@@ -29,7 +29,7 @@
   mai2::ExtensionType|staticSetter = 124;
   mai::expect(124, mai2::ExtensionType|staticField);
   mai::expect(124, mai2::ExtensionType|staticGetter);
-  mai::expect(42, #C2(42){(dynamic) → mai2::ExtensionType /* = core::int */});
+  mai::expect(42, #C2(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(43, mai2::ExtensionType|named(42));
   mai::expect(43, #C3(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(44, mai2::ExtensionType|redirectingGenerative(42));
@@ -70,11 +70,11 @@
   static tearoff redirectingFactory = mai2::ExtensionType|_#redirectingFactory#tearOff;
 }
 static field core::int ExtensionType|staticField = 123;
-static inline-class-member method ExtensionType|(dynamic it) → mai2::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → mai2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → mai2::ExtensionType /* = core::int */
   return mai2::ExtensionType|(it);
 static inline-class-member method ExtensionType|named(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.strong.transformed.expect
index 05d1aa9..eaa6a97 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.strong.transformed.expect
@@ -29,7 +29,7 @@
   mai2::ExtensionType|staticSetter = 124;
   mai::expect(124, mai2::ExtensionType|staticField);
   mai::expect(124, mai2::ExtensionType|staticGetter);
-  mai::expect(42, #C2(42){(dynamic) → mai2::ExtensionType /* = core::int */});
+  mai::expect(42, #C2(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(43, mai2::ExtensionType|named(42));
   mai::expect(43, #C3(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(44, mai2::ExtensionType|redirectingGenerative(42));
@@ -70,11 +70,11 @@
   static tearoff redirectingFactory = mai2::ExtensionType|_#redirectingFactory#tearOff;
 }
 static field core::int ExtensionType|staticField = 123;
-static inline-class-member method ExtensionType|(dynamic it) → mai2::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → mai2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → mai2::ExtensionType /* = core::int */
   return mai2::ExtensionType|(it);
 static inline-class-member method ExtensionType|named(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.expect
index 05d1aa9..eaa6a97 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.expect
@@ -29,7 +29,7 @@
   mai2::ExtensionType|staticSetter = 124;
   mai::expect(124, mai2::ExtensionType|staticField);
   mai::expect(124, mai2::ExtensionType|staticGetter);
-  mai::expect(42, #C2(42){(dynamic) → mai2::ExtensionType /* = core::int */});
+  mai::expect(42, #C2(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(43, mai2::ExtensionType|named(42));
   mai::expect(43, #C3(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(44, mai2::ExtensionType|redirectingGenerative(42));
@@ -70,11 +70,11 @@
   static tearoff redirectingFactory = mai2::ExtensionType|_#redirectingFactory#tearOff;
 }
 static field core::int ExtensionType|staticField = 123;
-static inline-class-member method ExtensionType|(dynamic it) → mai2::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → mai2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → mai2::ExtensionType /* = core::int */
   return mai2::ExtensionType|(it);
 static inline-class-member method ExtensionType|named(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.modular.expect
index d1413af..1088356 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.modular.expect
@@ -29,7 +29,7 @@
   mai2::ExtensionType|staticSetter = 124;
   mai::expect(124, mai2::ExtensionType|staticField);
   mai::expect(124, mai2::ExtensionType|staticGetter);
-  mai::expect(42, #C2(42){(dynamic) → mai2::ExtensionType /* = core::int */});
+  mai::expect(42, #C2(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(43, mai2::ExtensionType|named(42));
   mai::expect(43, #C3(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(44, mai2::ExtensionType|redirectingGenerative(42));
diff --git a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.outline.expect
index c4384a4..f85bcdb 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.outline.expect
@@ -43,9 +43,9 @@
   static tearoff redirectingFactory = self2::ExtensionType|_#redirectingFactory#tearOff;
 }
 static field core::int ExtensionType|staticField;
-static inline-class-member method ExtensionType|(dynamic it) → self2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|(core::int it) → self2::ExtensionType /* = core::int */
   ;
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → self2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → self2::ExtensionType /* = core::int */
   return self2::ExtensionType|(it);
 static inline-class-member method ExtensionType|named(core::int it) → self2::ExtensionType /* = core::int */
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.transformed.expect
index 05d1aa9..eaa6a97 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
   mai2::ExtensionType|staticSetter = 124;
   mai::expect(124, mai2::ExtensionType|staticField);
   mai::expect(124, mai2::ExtensionType|staticGetter);
-  mai::expect(42, #C2(42){(dynamic) → mai2::ExtensionType /* = core::int */});
+  mai::expect(42, #C2(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(43, mai2::ExtensionType|named(42));
   mai::expect(43, #C3(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(44, mai2::ExtensionType|redirectingGenerative(42));
@@ -70,11 +70,11 @@
   static tearoff redirectingFactory = mai2::ExtensionType|_#redirectingFactory#tearOff;
 }
 static field core::int ExtensionType|staticField = 123;
-static inline-class-member method ExtensionType|(dynamic it) → mai2::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → mai2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → mai2::ExtensionType /* = core::int */
   return mai2::ExtensionType|(it);
 static inline-class-member method ExtensionType|named(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.strong.expect
index 05d1aa9..eaa6a97 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.strong.expect
@@ -29,7 +29,7 @@
   mai2::ExtensionType|staticSetter = 124;
   mai::expect(124, mai2::ExtensionType|staticField);
   mai::expect(124, mai2::ExtensionType|staticGetter);
-  mai::expect(42, #C2(42){(dynamic) → mai2::ExtensionType /* = core::int */});
+  mai::expect(42, #C2(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(43, mai2::ExtensionType|named(42));
   mai::expect(43, #C3(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(44, mai2::ExtensionType|redirectingGenerative(42));
@@ -70,11 +70,11 @@
   static tearoff redirectingFactory = mai2::ExtensionType|_#redirectingFactory#tearOff;
 }
 static field core::int ExtensionType|staticField = 123;
-static inline-class-member method ExtensionType|(dynamic it) → mai2::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → mai2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → mai2::ExtensionType /* = core::int */
   return mai2::ExtensionType|(it);
 static inline-class-member method ExtensionType|named(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.strong.transformed.expect
index 05d1aa9..eaa6a97 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.strong.transformed.expect
@@ -29,7 +29,7 @@
   mai2::ExtensionType|staticSetter = 124;
   mai::expect(124, mai2::ExtensionType|staticField);
   mai::expect(124, mai2::ExtensionType|staticGetter);
-  mai::expect(42, #C2(42){(dynamic) → mai2::ExtensionType /* = core::int */});
+  mai::expect(42, #C2(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(43, mai2::ExtensionType|named(42));
   mai::expect(43, #C3(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(44, mai2::ExtensionType|redirectingGenerative(42));
@@ -70,11 +70,11 @@
   static tearoff redirectingFactory = mai2::ExtensionType|_#redirectingFactory#tearOff;
 }
 static field core::int ExtensionType|staticField = 123;
-static inline-class-member method ExtensionType|(dynamic it) → mai2::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → mai2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → mai2::ExtensionType /* = core::int */
   return mai2::ExtensionType|(it);
 static inline-class-member method ExtensionType|named(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.expect
index 05d1aa9..eaa6a97 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.expect
@@ -29,7 +29,7 @@
   mai2::ExtensionType|staticSetter = 124;
   mai::expect(124, mai2::ExtensionType|staticField);
   mai::expect(124, mai2::ExtensionType|staticGetter);
-  mai::expect(42, #C2(42){(dynamic) → mai2::ExtensionType /* = core::int */});
+  mai::expect(42, #C2(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(43, mai2::ExtensionType|named(42));
   mai::expect(43, #C3(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(44, mai2::ExtensionType|redirectingGenerative(42));
@@ -70,11 +70,11 @@
   static tearoff redirectingFactory = mai2::ExtensionType|_#redirectingFactory#tearOff;
 }
 static field core::int ExtensionType|staticField = 123;
-static inline-class-member method ExtensionType|(dynamic it) → mai2::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → mai2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → mai2::ExtensionType /* = core::int */
   return mai2::ExtensionType|(it);
 static inline-class-member method ExtensionType|named(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.modular.expect
index 05d1aa9..eaa6a97 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.modular.expect
@@ -29,7 +29,7 @@
   mai2::ExtensionType|staticSetter = 124;
   mai::expect(124, mai2::ExtensionType|staticField);
   mai::expect(124, mai2::ExtensionType|staticGetter);
-  mai::expect(42, #C2(42){(dynamic) → mai2::ExtensionType /* = core::int */});
+  mai::expect(42, #C2(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(43, mai2::ExtensionType|named(42));
   mai::expect(43, #C3(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(44, mai2::ExtensionType|redirectingGenerative(42));
@@ -70,11 +70,11 @@
   static tearoff redirectingFactory = mai2::ExtensionType|_#redirectingFactory#tearOff;
 }
 static field core::int ExtensionType|staticField = 123;
-static inline-class-member method ExtensionType|(dynamic it) → mai2::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → mai2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → mai2::ExtensionType /* = core::int */
   return mai2::ExtensionType|(it);
 static inline-class-member method ExtensionType|named(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.outline.expect
index c4384a4..f85bcdb 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.outline.expect
@@ -43,9 +43,9 @@
   static tearoff redirectingFactory = self2::ExtensionType|_#redirectingFactory#tearOff;
 }
 static field core::int ExtensionType|staticField;
-static inline-class-member method ExtensionType|(dynamic it) → self2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|(core::int it) → self2::ExtensionType /* = core::int */
   ;
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → self2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → self2::ExtensionType /* = core::int */
   return self2::ExtensionType|(it);
 static inline-class-member method ExtensionType|named(core::int it) → self2::ExtensionType /* = core::int */
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.transformed.expect
index 05d1aa9..eaa6a97 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/from_dill/main.no_link.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
   mai2::ExtensionType|staticSetter = 124;
   mai::expect(124, mai2::ExtensionType|staticField);
   mai::expect(124, mai2::ExtensionType|staticGetter);
-  mai::expect(42, #C2(42){(dynamic) → mai2::ExtensionType /* = core::int */});
+  mai::expect(42, #C2(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(43, mai2::ExtensionType|named(42));
   mai::expect(43, #C3(42){(core::int) → mai2::ExtensionType /* = core::int */});
   mai::expect(44, mai2::ExtensionType|redirectingGenerative(42));
@@ -70,11 +70,11 @@
   static tearoff redirectingFactory = mai2::ExtensionType|_#redirectingFactory#tearOff;
 }
 static field core::int ExtensionType|staticField = 123;
-static inline-class-member method ExtensionType|(dynamic it) → mai2::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → mai2::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → mai2::ExtensionType /* = core::int */
   return mai2::ExtensionType|(it);
 static inline-class-member method ExtensionType|named(core::int it) → mai2::ExtensionType /* = core::int */ {
   lowered final mai2::ExtensionType /* = core::int */ #this = it.{core::num::+}(1){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.expect
index 8205e71..ac457c4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.expect
@@ -16,9 +16,9 @@
   constructor • = has::C|;
   tearoff • = has::_#new#tearOff;
 }
-static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(dynamic i) → has::C /* = core::int */ {
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(core::int i) → has::C /* = core::int */ {
   lowered final has::C /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(dynamic i) → has::C /* = core::int */
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(core::int i) → has::C /* = core::int */
   return has::C|(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.transformed.expect
index 8205e71..ac457c4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.strong.transformed.expect
@@ -16,9 +16,9 @@
   constructor • = has::C|;
   tearoff • = has::_#new#tearOff;
 }
-static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(dynamic i) → has::C /* = core::int */ {
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(core::int i) → has::C /* = core::int */ {
   lowered final has::C /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(dynamic i) → has::C /* = core::int */
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(core::int i) → has::C /* = core::int */
   return has::C|(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.expect
index 8205e71..ac457c4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.expect
@@ -16,9 +16,9 @@
   constructor • = has::C|;
   tearoff • = has::_#new#tearOff;
 }
-static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(dynamic i) → has::C /* = core::int */ {
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(core::int i) → has::C /* = core::int */ {
   lowered final has::C /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(dynamic i) → has::C /* = core::int */
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(core::int i) → has::C /* = core::int */
   return has::C|(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.modular.expect
index 8205e71..ac457c4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.modular.expect
@@ -16,9 +16,9 @@
   constructor • = has::C|;
   tearoff • = has::_#new#tearOff;
 }
-static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(dynamic i) → has::C /* = core::int */ {
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(core::int i) → has::C /* = core::int */ {
   lowered final has::C /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(dynamic i) → has::C /* = core::int */
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(core::int i) → has::C /* = core::int */
   return has::C|(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.outline.expect
index 181c1bb..2814bf2 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.outline.expect
@@ -17,7 +17,7 @@
   constructor • = has::C|;
   tearoff • = has::_#new#tearOff;
 }
-static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(dynamic i) → has::C /* = core::int */
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(core::int i) → has::C /* = core::int */
   ;
-static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(dynamic i) → has::C /* = core::int */
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(core::int i) → has::C /* = core::int */
   return has::C|(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.transformed.expect
index 8205e71..ac457c4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/has_export.dart.weak.transformed.expect
@@ -16,9 +16,9 @@
   constructor • = has::C|;
   tearoff • = has::_#new#tearOff;
 }
-static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(dynamic i) → has::C /* = core::int */ {
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ C|(core::int i) → has::C /* = core::int */ {
   lowered final has::C /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(dynamic i) → has::C /* = core::int */
+static inline-class-member method /* from org-dartlang-testcase:///has_part_of_lib.dart */ _#new#tearOff(core::int i) → has::C /* = core::int */
   return has::C|(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.strong.expect
index 2df0ca3..d1231b5 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.strong.expect
@@ -194,23 +194,23 @@
   constructor • = self::ET_GenericExtensionType|;
   tearoff • = self::ET_GenericExtensionType|_#new#tearOff;
 }
-static inline-class-member method ExtensionType|(dynamic it) → self::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → self::ExtensionType /* = core::int */ {
   lowered final self::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → self::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → self::ExtensionType /* = core::int */
   return self::ExtensionType|(it);
-static inline-class-member method GenericExtensionType|<T extends core::Object? = dynamic>(dynamic it) → self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ {
+static inline-class-member method GenericExtensionType|<T extends core::Object? = dynamic>(self::GenericExtensionType|::T% it) → self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ {
   lowered final self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericExtensionType<self::GenericExtensionType|_#new#tearOff::T%> /* = self::GenericExtensionType|_#new#tearOff::T% */
+static inline-class-member method GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericExtensionType|_#new#tearOff::T% it) → self::GenericExtensionType<self::GenericExtensionType|_#new#tearOff::T%> /* = self::GenericExtensionType|_#new#tearOff::T% */
   return self::GenericExtensionType|<self::GenericExtensionType|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Null|(dynamic it) → self::ET_Null /* = Null */ {
+static inline-class-member method ET_Null|(Null it) → self::ET_Null /* = Null */ {
   lowered final self::ET_Null /* = Null */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Null|_#new#tearOff(dynamic it) → self::ET_Null /* = Null */
+static inline-class-member method ET_Null|_#new#tearOff(Null it) → self::ET_Null /* = Null */
   return self::ET_Null|(it);
 static inline-class-member method ET_Dynamic|(dynamic it) → self::ET_Dynamic /* = dynamic */ {
   lowered final self::ET_Dynamic /* = dynamic */ #this = it;
@@ -218,111 +218,111 @@
 }
 static inline-class-member method ET_Dynamic|_#new#tearOff(dynamic it) → self::ET_Dynamic /* = dynamic */
   return self::ET_Dynamic|(it);
-static inline-class-member method ET_Void|(dynamic it) → self::ET_Void /* = Never */ {
+static inline-class-member method ET_Void|(Never it) → self::ET_Void /* = Never */ {
   lowered final self::ET_Void /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Void|_#new#tearOff(dynamic it) → self::ET_Void /* = Never */
+static inline-class-member method ET_Void|_#new#tearOff(Never it) → self::ET_Void /* = Never */
   return self::ET_Void|(it);
-static inline-class-member method ET_Never|(dynamic it) → self::ET_Never /* = Never */ {
+static inline-class-member method ET_Never|(Never it) → self::ET_Never /* = Never */ {
   lowered final self::ET_Never /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Never|_#new#tearOff(dynamic it) → self::ET_Never /* = Never */
+static inline-class-member method ET_Never|_#new#tearOff(Never it) → self::ET_Never /* = Never */
   return self::ET_Never|(it);
-static inline-class-member method ET_Object|(dynamic it) → self::ET_Object /* = core::Object */ {
+static inline-class-member method ET_Object|(core::Object it) → self::ET_Object /* = core::Object */ {
   lowered final self::ET_Object /* = core::Object */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Object|_#new#tearOff(dynamic it) → self::ET_Object /* = core::Object */
+static inline-class-member method ET_Object|_#new#tearOff(core::Object it) → self::ET_Object /* = core::Object */
   return self::ET_Object|(it);
-static inline-class-member method ET_Record|(dynamic it) → self::ET_Record /* = core::Record */ {
+static inline-class-member method ET_Record|(core::Record it) → self::ET_Record /* = core::Record */ {
   lowered final self::ET_Record /* = core::Record */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Record|_#new#tearOff(dynamic it) → self::ET_Record /* = core::Record */
+static inline-class-member method ET_Record|_#new#tearOff(core::Record it) → self::ET_Record /* = core::Record */
   return self::ET_Record|(it);
-static inline-class-member method ET_RecordType|(dynamic it) → self::ET_RecordType /* =(core::int, core::String) */ {
+static inline-class-member method ET_RecordType|((core::int, core::String) it) → self::ET_RecordType /* =(core::int, core::String) */ {
   lowered final self::ET_RecordType /* =(core::int, core::String) */ #this = it;
   return #this;
 }
-static inline-class-member method ET_RecordType|_#new#tearOff(dynamic it) → self::ET_RecordType /* =(core::int, core::String) */
+static inline-class-member method ET_RecordType|_#new#tearOff((core::int, core::String) it) → self::ET_RecordType /* =(core::int, core::String) */
   return self::ET_RecordType|(it);
-static inline-class-member method ET_Function|(dynamic it) → self::ET_Function /* = core::Function */ {
+static inline-class-member method ET_Function|(core::Function it) → self::ET_Function /* = core::Function */ {
   lowered final self::ET_Function /* = core::Function */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Function|_#new#tearOff(dynamic it) → self::ET_Function /* = core::Function */
+static inline-class-member method ET_Function|_#new#tearOff(core::Function it) → self::ET_Function /* = core::Function */
   return self::ET_Function|(it);
-static inline-class-member method ET_FunctionType|(dynamic it) → self::ET_FunctionType /* = () → void */ {
+static inline-class-member method ET_FunctionType|(() → void it) → self::ET_FunctionType /* = () → void */ {
   lowered final self::ET_FunctionType /* = () → void */ #this = it;
   return #this;
 }
-static inline-class-member method ET_FunctionType|_#new#tearOff(dynamic it) → self::ET_FunctionType /* = () → void */
+static inline-class-member method ET_FunctionType|_#new#tearOff(() → void it) → self::ET_FunctionType /* = () → void */
   return self::ET_FunctionType|(it);
-static inline-class-member method ET_NullableInterfaceType|(dynamic it) → self::ET_NullableInterfaceType /* = core::String? */ {
+static inline-class-member method ET_NullableInterfaceType|(core::String? it) → self::ET_NullableInterfaceType /* = core::String? */ {
   lowered final self::ET_NullableInterfaceType /* = core::String? */ #this = it;
   return #this;
 }
-static inline-class-member method ET_NullableInterfaceType|_#new#tearOff(dynamic it) → self::ET_NullableInterfaceType /* = core::String? */
+static inline-class-member method ET_NullableInterfaceType|_#new#tearOff(core::String? it) → self::ET_NullableInterfaceType /* = core::String? */
   return self::ET_NullableInterfaceType|(it);
-static inline-class-member method ET_NullableExtensionType|(dynamic it) → self::ET_NullableExtensionType /* = core::int? */ {
+static inline-class-member method ET_NullableExtensionType|(self::ExtensionType? /* = core::int? */ it) → self::ET_NullableExtensionType /* = core::int? */ {
   lowered final self::ET_NullableExtensionType /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method ET_NullableExtensionType|_#new#tearOff(dynamic it) → self::ET_NullableExtensionType /* = core::int? */
+static inline-class-member method ET_NullableExtensionType|_#new#tearOff(self::ExtensionType? /* = core::int? */ it) → self::ET_NullableExtensionType /* = core::int? */
   return self::ET_NullableExtensionType|(it);
-static inline-class-member method ET_FutureOr|(dynamic it) → self::ET_FutureOr /* = FutureOr<core::int>*/ {
+static inline-class-member method ET_FutureOr|(FutureOr<core::int>it) → self::ET_FutureOr /* = FutureOr<core::int>*/ {
   lowered final self::ET_FutureOr /* = FutureOr<core::int>*/ #this = it;
   return #this;
 }
-static inline-class-member method ET_FutureOr|_#new#tearOff(dynamic it) → self::ET_FutureOr /* = FutureOr<core::int>*/
+static inline-class-member method ET_FutureOr|_#new#tearOff(FutureOr<core::int>it) → self::ET_FutureOr /* = FutureOr<core::int>*/
   return self::ET_FutureOr|(it);
-static inline-class-member method ET_Extension|_#new#tearOff(dynamic it) → self::ET_Extension /* = Never */
+static inline-class-member method ET_Extension|_#new#tearOff(Never it) → self::ET_Extension /* = Never */
   return self::ET_Extension|(it);
-static inline-class-member method ET_Extension|(dynamic it) → self::ET_Extension /* = Never */ {
+static inline-class-member method ET_Extension|(Never it) → self::ET_Extension /* = Never */ {
   lowered final self::ET_Extension /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_TypeVariable|<T extends core::Object? = dynamic>(dynamic it) → self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ {
+static inline-class-member method ET_TypeVariable|<T extends core::Object? = dynamic>(self::ET_TypeVariable|::T% it) → self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ {
   lowered final self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method ET_TypeVariable|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_TypeVariable<self::ET_TypeVariable|_#new#tearOff::T%> /* = self::ET_TypeVariable|_#new#tearOff::T% */
+static inline-class-member method ET_TypeVariable|_#new#tearOff<T extends core::Object? = dynamic>(self::ET_TypeVariable|_#new#tearOff::T% it) → self::ET_TypeVariable<self::ET_TypeVariable|_#new#tearOff::T%> /* = self::ET_TypeVariable|_#new#tearOff::T% */
   return self::ET_TypeVariable|<self::ET_TypeVariable|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Class|(dynamic it) → self::ET_Class /* = self::Class */ {
+static inline-class-member method ET_Class|(self::Class it) → self::ET_Class /* = self::Class */ {
   lowered final self::ET_Class /* = self::Class */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Class|_#new#tearOff(dynamic it) → self::ET_Class /* = self::Class */
+static inline-class-member method ET_Class|_#new#tearOff(self::Class it) → self::ET_Class /* = self::Class */
   return self::ET_Class|(it);
-static inline-class-member method ET_GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ {
+static inline-class-member method ET_GenericClass|<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericClass|::T%> it) → self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ {
   lowered final self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericClass<self::ET_GenericClass|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> */
+static inline-class-member method ET_GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> it) → self::ET_GenericClass<self::ET_GenericClass|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> */
   return self::ET_GenericClass|<self::ET_GenericClass|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Alias|(dynamic it) → self::ET_Alias /* = self::Class */ {
+static inline-class-member method ET_Alias|(self::Class it) → self::ET_Alias /* = self::Class */ {
   lowered final self::ET_Alias /* = self::Class */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Alias|_#new#tearOff(dynamic it) → self::ET_Alias /* = self::Class */
+static inline-class-member method ET_Alias|_#new#tearOff(self::Class it) → self::ET_Alias /* = self::Class */
   return self::ET_Alias|(it);
-static inline-class-member method ET_GenericAlias|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ {
+static inline-class-member method ET_GenericAlias|<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericAlias|::T%> it) → self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ {
   lowered final self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericAlias<self::ET_GenericAlias|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> */
+static inline-class-member method ET_GenericAlias|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> it) → self::ET_GenericAlias<self::ET_GenericAlias|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> */
   return self::ET_GenericAlias|<self::ET_GenericAlias|_#new#tearOff::T%>(it);
-static inline-class-member method ET_ExtensionType|(dynamic it) → self::ET_ExtensionType /* = core::int */ {
+static inline-class-member method ET_ExtensionType|(self::ExtensionType /* = core::int */ it) → self::ET_ExtensionType /* = core::int */ {
   lowered final self::ET_ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ET_ExtensionType|_#new#tearOff(dynamic it) → self::ET_ExtensionType /* = core::int */
+static inline-class-member method ET_ExtensionType|_#new#tearOff(self::ExtensionType /* = core::int */ it) → self::ET_ExtensionType /* = core::int */
   return self::ET_ExtensionType|(it);
-static inline-class-member method ET_GenericExtensionType|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ {
+static inline-class-member method ET_GenericExtensionType|<T extends core::Object? = dynamic>(self::GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ {
   lowered final self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */
+static inline-class-member method ET_GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */ it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */
   return self::ET_GenericExtensionType|<self::ET_GenericExtensionType|_#new#tearOff::T%>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.strong.transformed.expect
index 2df0ca3..d1231b5 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.strong.transformed.expect
@@ -194,23 +194,23 @@
   constructor • = self::ET_GenericExtensionType|;
   tearoff • = self::ET_GenericExtensionType|_#new#tearOff;
 }
-static inline-class-member method ExtensionType|(dynamic it) → self::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → self::ExtensionType /* = core::int */ {
   lowered final self::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → self::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → self::ExtensionType /* = core::int */
   return self::ExtensionType|(it);
-static inline-class-member method GenericExtensionType|<T extends core::Object? = dynamic>(dynamic it) → self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ {
+static inline-class-member method GenericExtensionType|<T extends core::Object? = dynamic>(self::GenericExtensionType|::T% it) → self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ {
   lowered final self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericExtensionType<self::GenericExtensionType|_#new#tearOff::T%> /* = self::GenericExtensionType|_#new#tearOff::T% */
+static inline-class-member method GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericExtensionType|_#new#tearOff::T% it) → self::GenericExtensionType<self::GenericExtensionType|_#new#tearOff::T%> /* = self::GenericExtensionType|_#new#tearOff::T% */
   return self::GenericExtensionType|<self::GenericExtensionType|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Null|(dynamic it) → self::ET_Null /* = Null */ {
+static inline-class-member method ET_Null|(Null it) → self::ET_Null /* = Null */ {
   lowered final self::ET_Null /* = Null */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Null|_#new#tearOff(dynamic it) → self::ET_Null /* = Null */
+static inline-class-member method ET_Null|_#new#tearOff(Null it) → self::ET_Null /* = Null */
   return self::ET_Null|(it);
 static inline-class-member method ET_Dynamic|(dynamic it) → self::ET_Dynamic /* = dynamic */ {
   lowered final self::ET_Dynamic /* = dynamic */ #this = it;
@@ -218,111 +218,111 @@
 }
 static inline-class-member method ET_Dynamic|_#new#tearOff(dynamic it) → self::ET_Dynamic /* = dynamic */
   return self::ET_Dynamic|(it);
-static inline-class-member method ET_Void|(dynamic it) → self::ET_Void /* = Never */ {
+static inline-class-member method ET_Void|(Never it) → self::ET_Void /* = Never */ {
   lowered final self::ET_Void /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Void|_#new#tearOff(dynamic it) → self::ET_Void /* = Never */
+static inline-class-member method ET_Void|_#new#tearOff(Never it) → self::ET_Void /* = Never */
   return self::ET_Void|(it);
-static inline-class-member method ET_Never|(dynamic it) → self::ET_Never /* = Never */ {
+static inline-class-member method ET_Never|(Never it) → self::ET_Never /* = Never */ {
   lowered final self::ET_Never /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Never|_#new#tearOff(dynamic it) → self::ET_Never /* = Never */
+static inline-class-member method ET_Never|_#new#tearOff(Never it) → self::ET_Never /* = Never */
   return self::ET_Never|(it);
-static inline-class-member method ET_Object|(dynamic it) → self::ET_Object /* = core::Object */ {
+static inline-class-member method ET_Object|(core::Object it) → self::ET_Object /* = core::Object */ {
   lowered final self::ET_Object /* = core::Object */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Object|_#new#tearOff(dynamic it) → self::ET_Object /* = core::Object */
+static inline-class-member method ET_Object|_#new#tearOff(core::Object it) → self::ET_Object /* = core::Object */
   return self::ET_Object|(it);
-static inline-class-member method ET_Record|(dynamic it) → self::ET_Record /* = core::Record */ {
+static inline-class-member method ET_Record|(core::Record it) → self::ET_Record /* = core::Record */ {
   lowered final self::ET_Record /* = core::Record */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Record|_#new#tearOff(dynamic it) → self::ET_Record /* = core::Record */
+static inline-class-member method ET_Record|_#new#tearOff(core::Record it) → self::ET_Record /* = core::Record */
   return self::ET_Record|(it);
-static inline-class-member method ET_RecordType|(dynamic it) → self::ET_RecordType /* =(core::int, core::String) */ {
+static inline-class-member method ET_RecordType|((core::int, core::String) it) → self::ET_RecordType /* =(core::int, core::String) */ {
   lowered final self::ET_RecordType /* =(core::int, core::String) */ #this = it;
   return #this;
 }
-static inline-class-member method ET_RecordType|_#new#tearOff(dynamic it) → self::ET_RecordType /* =(core::int, core::String) */
+static inline-class-member method ET_RecordType|_#new#tearOff((core::int, core::String) it) → self::ET_RecordType /* =(core::int, core::String) */
   return self::ET_RecordType|(it);
-static inline-class-member method ET_Function|(dynamic it) → self::ET_Function /* = core::Function */ {
+static inline-class-member method ET_Function|(core::Function it) → self::ET_Function /* = core::Function */ {
   lowered final self::ET_Function /* = core::Function */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Function|_#new#tearOff(dynamic it) → self::ET_Function /* = core::Function */
+static inline-class-member method ET_Function|_#new#tearOff(core::Function it) → self::ET_Function /* = core::Function */
   return self::ET_Function|(it);
-static inline-class-member method ET_FunctionType|(dynamic it) → self::ET_FunctionType /* = () → void */ {
+static inline-class-member method ET_FunctionType|(() → void it) → self::ET_FunctionType /* = () → void */ {
   lowered final self::ET_FunctionType /* = () → void */ #this = it;
   return #this;
 }
-static inline-class-member method ET_FunctionType|_#new#tearOff(dynamic it) → self::ET_FunctionType /* = () → void */
+static inline-class-member method ET_FunctionType|_#new#tearOff(() → void it) → self::ET_FunctionType /* = () → void */
   return self::ET_FunctionType|(it);
-static inline-class-member method ET_NullableInterfaceType|(dynamic it) → self::ET_NullableInterfaceType /* = core::String? */ {
+static inline-class-member method ET_NullableInterfaceType|(core::String? it) → self::ET_NullableInterfaceType /* = core::String? */ {
   lowered final self::ET_NullableInterfaceType /* = core::String? */ #this = it;
   return #this;
 }
-static inline-class-member method ET_NullableInterfaceType|_#new#tearOff(dynamic it) → self::ET_NullableInterfaceType /* = core::String? */
+static inline-class-member method ET_NullableInterfaceType|_#new#tearOff(core::String? it) → self::ET_NullableInterfaceType /* = core::String? */
   return self::ET_NullableInterfaceType|(it);
-static inline-class-member method ET_NullableExtensionType|(dynamic it) → self::ET_NullableExtensionType /* = core::int? */ {
+static inline-class-member method ET_NullableExtensionType|(self::ExtensionType? /* = core::int? */ it) → self::ET_NullableExtensionType /* = core::int? */ {
   lowered final self::ET_NullableExtensionType /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method ET_NullableExtensionType|_#new#tearOff(dynamic it) → self::ET_NullableExtensionType /* = core::int? */
+static inline-class-member method ET_NullableExtensionType|_#new#tearOff(self::ExtensionType? /* = core::int? */ it) → self::ET_NullableExtensionType /* = core::int? */
   return self::ET_NullableExtensionType|(it);
-static inline-class-member method ET_FutureOr|(dynamic it) → self::ET_FutureOr /* = FutureOr<core::int>*/ {
+static inline-class-member method ET_FutureOr|(FutureOr<core::int>it) → self::ET_FutureOr /* = FutureOr<core::int>*/ {
   lowered final self::ET_FutureOr /* = FutureOr<core::int>*/ #this = it;
   return #this;
 }
-static inline-class-member method ET_FutureOr|_#new#tearOff(dynamic it) → self::ET_FutureOr /* = FutureOr<core::int>*/
+static inline-class-member method ET_FutureOr|_#new#tearOff(FutureOr<core::int>it) → self::ET_FutureOr /* = FutureOr<core::int>*/
   return self::ET_FutureOr|(it);
-static inline-class-member method ET_Extension|_#new#tearOff(dynamic it) → self::ET_Extension /* = Never */
+static inline-class-member method ET_Extension|_#new#tearOff(Never it) → self::ET_Extension /* = Never */
   return self::ET_Extension|(it);
-static inline-class-member method ET_Extension|(dynamic it) → self::ET_Extension /* = Never */ {
+static inline-class-member method ET_Extension|(Never it) → self::ET_Extension /* = Never */ {
   lowered final self::ET_Extension /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_TypeVariable|<T extends core::Object? = dynamic>(dynamic it) → self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ {
+static inline-class-member method ET_TypeVariable|<T extends core::Object? = dynamic>(self::ET_TypeVariable|::T% it) → self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ {
   lowered final self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method ET_TypeVariable|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_TypeVariable<self::ET_TypeVariable|_#new#tearOff::T%> /* = self::ET_TypeVariable|_#new#tearOff::T% */
+static inline-class-member method ET_TypeVariable|_#new#tearOff<T extends core::Object? = dynamic>(self::ET_TypeVariable|_#new#tearOff::T% it) → self::ET_TypeVariable<self::ET_TypeVariable|_#new#tearOff::T%> /* = self::ET_TypeVariable|_#new#tearOff::T% */
   return self::ET_TypeVariable|<self::ET_TypeVariable|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Class|(dynamic it) → self::ET_Class /* = self::Class */ {
+static inline-class-member method ET_Class|(self::Class it) → self::ET_Class /* = self::Class */ {
   lowered final self::ET_Class /* = self::Class */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Class|_#new#tearOff(dynamic it) → self::ET_Class /* = self::Class */
+static inline-class-member method ET_Class|_#new#tearOff(self::Class it) → self::ET_Class /* = self::Class */
   return self::ET_Class|(it);
-static inline-class-member method ET_GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ {
+static inline-class-member method ET_GenericClass|<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericClass|::T%> it) → self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ {
   lowered final self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericClass<self::ET_GenericClass|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> */
+static inline-class-member method ET_GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> it) → self::ET_GenericClass<self::ET_GenericClass|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> */
   return self::ET_GenericClass|<self::ET_GenericClass|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Alias|(dynamic it) → self::ET_Alias /* = self::Class */ {
+static inline-class-member method ET_Alias|(self::Class it) → self::ET_Alias /* = self::Class */ {
   lowered final self::ET_Alias /* = self::Class */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Alias|_#new#tearOff(dynamic it) → self::ET_Alias /* = self::Class */
+static inline-class-member method ET_Alias|_#new#tearOff(self::Class it) → self::ET_Alias /* = self::Class */
   return self::ET_Alias|(it);
-static inline-class-member method ET_GenericAlias|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ {
+static inline-class-member method ET_GenericAlias|<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericAlias|::T%> it) → self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ {
   lowered final self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericAlias<self::ET_GenericAlias|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> */
+static inline-class-member method ET_GenericAlias|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> it) → self::ET_GenericAlias<self::ET_GenericAlias|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> */
   return self::ET_GenericAlias|<self::ET_GenericAlias|_#new#tearOff::T%>(it);
-static inline-class-member method ET_ExtensionType|(dynamic it) → self::ET_ExtensionType /* = core::int */ {
+static inline-class-member method ET_ExtensionType|(self::ExtensionType /* = core::int */ it) → self::ET_ExtensionType /* = core::int */ {
   lowered final self::ET_ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ET_ExtensionType|_#new#tearOff(dynamic it) → self::ET_ExtensionType /* = core::int */
+static inline-class-member method ET_ExtensionType|_#new#tearOff(self::ExtensionType /* = core::int */ it) → self::ET_ExtensionType /* = core::int */
   return self::ET_ExtensionType|(it);
-static inline-class-member method ET_GenericExtensionType|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ {
+static inline-class-member method ET_GenericExtensionType|<T extends core::Object? = dynamic>(self::GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ {
   lowered final self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */
+static inline-class-member method ET_GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */ it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */
   return self::ET_GenericExtensionType|<self::ET_GenericExtensionType|_#new#tearOff::T%>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.expect
index 2df0ca3..d1231b5 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.expect
@@ -194,23 +194,23 @@
   constructor • = self::ET_GenericExtensionType|;
   tearoff • = self::ET_GenericExtensionType|_#new#tearOff;
 }
-static inline-class-member method ExtensionType|(dynamic it) → self::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → self::ExtensionType /* = core::int */ {
   lowered final self::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → self::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → self::ExtensionType /* = core::int */
   return self::ExtensionType|(it);
-static inline-class-member method GenericExtensionType|<T extends core::Object? = dynamic>(dynamic it) → self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ {
+static inline-class-member method GenericExtensionType|<T extends core::Object? = dynamic>(self::GenericExtensionType|::T% it) → self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ {
   lowered final self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericExtensionType<self::GenericExtensionType|_#new#tearOff::T%> /* = self::GenericExtensionType|_#new#tearOff::T% */
+static inline-class-member method GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericExtensionType|_#new#tearOff::T% it) → self::GenericExtensionType<self::GenericExtensionType|_#new#tearOff::T%> /* = self::GenericExtensionType|_#new#tearOff::T% */
   return self::GenericExtensionType|<self::GenericExtensionType|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Null|(dynamic it) → self::ET_Null /* = Null */ {
+static inline-class-member method ET_Null|(Null it) → self::ET_Null /* = Null */ {
   lowered final self::ET_Null /* = Null */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Null|_#new#tearOff(dynamic it) → self::ET_Null /* = Null */
+static inline-class-member method ET_Null|_#new#tearOff(Null it) → self::ET_Null /* = Null */
   return self::ET_Null|(it);
 static inline-class-member method ET_Dynamic|(dynamic it) → self::ET_Dynamic /* = dynamic */ {
   lowered final self::ET_Dynamic /* = dynamic */ #this = it;
@@ -218,111 +218,111 @@
 }
 static inline-class-member method ET_Dynamic|_#new#tearOff(dynamic it) → self::ET_Dynamic /* = dynamic */
   return self::ET_Dynamic|(it);
-static inline-class-member method ET_Void|(dynamic it) → self::ET_Void /* = Never */ {
+static inline-class-member method ET_Void|(Never it) → self::ET_Void /* = Never */ {
   lowered final self::ET_Void /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Void|_#new#tearOff(dynamic it) → self::ET_Void /* = Never */
+static inline-class-member method ET_Void|_#new#tearOff(Never it) → self::ET_Void /* = Never */
   return self::ET_Void|(it);
-static inline-class-member method ET_Never|(dynamic it) → self::ET_Never /* = Never */ {
+static inline-class-member method ET_Never|(Never it) → self::ET_Never /* = Never */ {
   lowered final self::ET_Never /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Never|_#new#tearOff(dynamic it) → self::ET_Never /* = Never */
+static inline-class-member method ET_Never|_#new#tearOff(Never it) → self::ET_Never /* = Never */
   return self::ET_Never|(it);
-static inline-class-member method ET_Object|(dynamic it) → self::ET_Object /* = core::Object */ {
+static inline-class-member method ET_Object|(core::Object it) → self::ET_Object /* = core::Object */ {
   lowered final self::ET_Object /* = core::Object */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Object|_#new#tearOff(dynamic it) → self::ET_Object /* = core::Object */
+static inline-class-member method ET_Object|_#new#tearOff(core::Object it) → self::ET_Object /* = core::Object */
   return self::ET_Object|(it);
-static inline-class-member method ET_Record|(dynamic it) → self::ET_Record /* = core::Record */ {
+static inline-class-member method ET_Record|(core::Record it) → self::ET_Record /* = core::Record */ {
   lowered final self::ET_Record /* = core::Record */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Record|_#new#tearOff(dynamic it) → self::ET_Record /* = core::Record */
+static inline-class-member method ET_Record|_#new#tearOff(core::Record it) → self::ET_Record /* = core::Record */
   return self::ET_Record|(it);
-static inline-class-member method ET_RecordType|(dynamic it) → self::ET_RecordType /* =(core::int, core::String) */ {
+static inline-class-member method ET_RecordType|((core::int, core::String) it) → self::ET_RecordType /* =(core::int, core::String) */ {
   lowered final self::ET_RecordType /* =(core::int, core::String) */ #this = it;
   return #this;
 }
-static inline-class-member method ET_RecordType|_#new#tearOff(dynamic it) → self::ET_RecordType /* =(core::int, core::String) */
+static inline-class-member method ET_RecordType|_#new#tearOff((core::int, core::String) it) → self::ET_RecordType /* =(core::int, core::String) */
   return self::ET_RecordType|(it);
-static inline-class-member method ET_Function|(dynamic it) → self::ET_Function /* = core::Function */ {
+static inline-class-member method ET_Function|(core::Function it) → self::ET_Function /* = core::Function */ {
   lowered final self::ET_Function /* = core::Function */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Function|_#new#tearOff(dynamic it) → self::ET_Function /* = core::Function */
+static inline-class-member method ET_Function|_#new#tearOff(core::Function it) → self::ET_Function /* = core::Function */
   return self::ET_Function|(it);
-static inline-class-member method ET_FunctionType|(dynamic it) → self::ET_FunctionType /* = () → void */ {
+static inline-class-member method ET_FunctionType|(() → void it) → self::ET_FunctionType /* = () → void */ {
   lowered final self::ET_FunctionType /* = () → void */ #this = it;
   return #this;
 }
-static inline-class-member method ET_FunctionType|_#new#tearOff(dynamic it) → self::ET_FunctionType /* = () → void */
+static inline-class-member method ET_FunctionType|_#new#tearOff(() → void it) → self::ET_FunctionType /* = () → void */
   return self::ET_FunctionType|(it);
-static inline-class-member method ET_NullableInterfaceType|(dynamic it) → self::ET_NullableInterfaceType /* = core::String? */ {
+static inline-class-member method ET_NullableInterfaceType|(core::String? it) → self::ET_NullableInterfaceType /* = core::String? */ {
   lowered final self::ET_NullableInterfaceType /* = core::String? */ #this = it;
   return #this;
 }
-static inline-class-member method ET_NullableInterfaceType|_#new#tearOff(dynamic it) → self::ET_NullableInterfaceType /* = core::String? */
+static inline-class-member method ET_NullableInterfaceType|_#new#tearOff(core::String? it) → self::ET_NullableInterfaceType /* = core::String? */
   return self::ET_NullableInterfaceType|(it);
-static inline-class-member method ET_NullableExtensionType|(dynamic it) → self::ET_NullableExtensionType /* = core::int? */ {
+static inline-class-member method ET_NullableExtensionType|(self::ExtensionType? /* = core::int? */ it) → self::ET_NullableExtensionType /* = core::int? */ {
   lowered final self::ET_NullableExtensionType /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method ET_NullableExtensionType|_#new#tearOff(dynamic it) → self::ET_NullableExtensionType /* = core::int? */
+static inline-class-member method ET_NullableExtensionType|_#new#tearOff(self::ExtensionType? /* = core::int? */ it) → self::ET_NullableExtensionType /* = core::int? */
   return self::ET_NullableExtensionType|(it);
-static inline-class-member method ET_FutureOr|(dynamic it) → self::ET_FutureOr /* = FutureOr<core::int>*/ {
+static inline-class-member method ET_FutureOr|(FutureOr<core::int>it) → self::ET_FutureOr /* = FutureOr<core::int>*/ {
   lowered final self::ET_FutureOr /* = FutureOr<core::int>*/ #this = it;
   return #this;
 }
-static inline-class-member method ET_FutureOr|_#new#tearOff(dynamic it) → self::ET_FutureOr /* = FutureOr<core::int>*/
+static inline-class-member method ET_FutureOr|_#new#tearOff(FutureOr<core::int>it) → self::ET_FutureOr /* = FutureOr<core::int>*/
   return self::ET_FutureOr|(it);
-static inline-class-member method ET_Extension|_#new#tearOff(dynamic it) → self::ET_Extension /* = Never */
+static inline-class-member method ET_Extension|_#new#tearOff(Never it) → self::ET_Extension /* = Never */
   return self::ET_Extension|(it);
-static inline-class-member method ET_Extension|(dynamic it) → self::ET_Extension /* = Never */ {
+static inline-class-member method ET_Extension|(Never it) → self::ET_Extension /* = Never */ {
   lowered final self::ET_Extension /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_TypeVariable|<T extends core::Object? = dynamic>(dynamic it) → self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ {
+static inline-class-member method ET_TypeVariable|<T extends core::Object? = dynamic>(self::ET_TypeVariable|::T% it) → self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ {
   lowered final self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method ET_TypeVariable|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_TypeVariable<self::ET_TypeVariable|_#new#tearOff::T%> /* = self::ET_TypeVariable|_#new#tearOff::T% */
+static inline-class-member method ET_TypeVariable|_#new#tearOff<T extends core::Object? = dynamic>(self::ET_TypeVariable|_#new#tearOff::T% it) → self::ET_TypeVariable<self::ET_TypeVariable|_#new#tearOff::T%> /* = self::ET_TypeVariable|_#new#tearOff::T% */
   return self::ET_TypeVariable|<self::ET_TypeVariable|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Class|(dynamic it) → self::ET_Class /* = self::Class */ {
+static inline-class-member method ET_Class|(self::Class it) → self::ET_Class /* = self::Class */ {
   lowered final self::ET_Class /* = self::Class */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Class|_#new#tearOff(dynamic it) → self::ET_Class /* = self::Class */
+static inline-class-member method ET_Class|_#new#tearOff(self::Class it) → self::ET_Class /* = self::Class */
   return self::ET_Class|(it);
-static inline-class-member method ET_GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ {
+static inline-class-member method ET_GenericClass|<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericClass|::T%> it) → self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ {
   lowered final self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericClass<self::ET_GenericClass|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> */
+static inline-class-member method ET_GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> it) → self::ET_GenericClass<self::ET_GenericClass|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> */
   return self::ET_GenericClass|<self::ET_GenericClass|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Alias|(dynamic it) → self::ET_Alias /* = self::Class */ {
+static inline-class-member method ET_Alias|(self::Class it) → self::ET_Alias /* = self::Class */ {
   lowered final self::ET_Alias /* = self::Class */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Alias|_#new#tearOff(dynamic it) → self::ET_Alias /* = self::Class */
+static inline-class-member method ET_Alias|_#new#tearOff(self::Class it) → self::ET_Alias /* = self::Class */
   return self::ET_Alias|(it);
-static inline-class-member method ET_GenericAlias|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ {
+static inline-class-member method ET_GenericAlias|<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericAlias|::T%> it) → self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ {
   lowered final self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericAlias<self::ET_GenericAlias|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> */
+static inline-class-member method ET_GenericAlias|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> it) → self::ET_GenericAlias<self::ET_GenericAlias|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> */
   return self::ET_GenericAlias|<self::ET_GenericAlias|_#new#tearOff::T%>(it);
-static inline-class-member method ET_ExtensionType|(dynamic it) → self::ET_ExtensionType /* = core::int */ {
+static inline-class-member method ET_ExtensionType|(self::ExtensionType /* = core::int */ it) → self::ET_ExtensionType /* = core::int */ {
   lowered final self::ET_ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ET_ExtensionType|_#new#tearOff(dynamic it) → self::ET_ExtensionType /* = core::int */
+static inline-class-member method ET_ExtensionType|_#new#tearOff(self::ExtensionType /* = core::int */ it) → self::ET_ExtensionType /* = core::int */
   return self::ET_ExtensionType|(it);
-static inline-class-member method ET_GenericExtensionType|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ {
+static inline-class-member method ET_GenericExtensionType|<T extends core::Object? = dynamic>(self::GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ {
   lowered final self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */
+static inline-class-member method ET_GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */ it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */
   return self::ET_GenericExtensionType|<self::ET_GenericExtensionType|_#new#tearOff::T%>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.modular.expect
index 2df0ca3..d1231b5 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.modular.expect
@@ -194,23 +194,23 @@
   constructor • = self::ET_GenericExtensionType|;
   tearoff • = self::ET_GenericExtensionType|_#new#tearOff;
 }
-static inline-class-member method ExtensionType|(dynamic it) → self::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → self::ExtensionType /* = core::int */ {
   lowered final self::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → self::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → self::ExtensionType /* = core::int */
   return self::ExtensionType|(it);
-static inline-class-member method GenericExtensionType|<T extends core::Object? = dynamic>(dynamic it) → self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ {
+static inline-class-member method GenericExtensionType|<T extends core::Object? = dynamic>(self::GenericExtensionType|::T% it) → self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ {
   lowered final self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericExtensionType<self::GenericExtensionType|_#new#tearOff::T%> /* = self::GenericExtensionType|_#new#tearOff::T% */
+static inline-class-member method GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericExtensionType|_#new#tearOff::T% it) → self::GenericExtensionType<self::GenericExtensionType|_#new#tearOff::T%> /* = self::GenericExtensionType|_#new#tearOff::T% */
   return self::GenericExtensionType|<self::GenericExtensionType|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Null|(dynamic it) → self::ET_Null /* = Null */ {
+static inline-class-member method ET_Null|(Null it) → self::ET_Null /* = Null */ {
   lowered final self::ET_Null /* = Null */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Null|_#new#tearOff(dynamic it) → self::ET_Null /* = Null */
+static inline-class-member method ET_Null|_#new#tearOff(Null it) → self::ET_Null /* = Null */
   return self::ET_Null|(it);
 static inline-class-member method ET_Dynamic|(dynamic it) → self::ET_Dynamic /* = dynamic */ {
   lowered final self::ET_Dynamic /* = dynamic */ #this = it;
@@ -218,111 +218,111 @@
 }
 static inline-class-member method ET_Dynamic|_#new#tearOff(dynamic it) → self::ET_Dynamic /* = dynamic */
   return self::ET_Dynamic|(it);
-static inline-class-member method ET_Void|(dynamic it) → self::ET_Void /* = Never */ {
+static inline-class-member method ET_Void|(Never it) → self::ET_Void /* = Never */ {
   lowered final self::ET_Void /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Void|_#new#tearOff(dynamic it) → self::ET_Void /* = Never */
+static inline-class-member method ET_Void|_#new#tearOff(Never it) → self::ET_Void /* = Never */
   return self::ET_Void|(it);
-static inline-class-member method ET_Never|(dynamic it) → self::ET_Never /* = Never */ {
+static inline-class-member method ET_Never|(Never it) → self::ET_Never /* = Never */ {
   lowered final self::ET_Never /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Never|_#new#tearOff(dynamic it) → self::ET_Never /* = Never */
+static inline-class-member method ET_Never|_#new#tearOff(Never it) → self::ET_Never /* = Never */
   return self::ET_Never|(it);
-static inline-class-member method ET_Object|(dynamic it) → self::ET_Object /* = core::Object */ {
+static inline-class-member method ET_Object|(core::Object it) → self::ET_Object /* = core::Object */ {
   lowered final self::ET_Object /* = core::Object */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Object|_#new#tearOff(dynamic it) → self::ET_Object /* = core::Object */
+static inline-class-member method ET_Object|_#new#tearOff(core::Object it) → self::ET_Object /* = core::Object */
   return self::ET_Object|(it);
-static inline-class-member method ET_Record|(dynamic it) → self::ET_Record /* = core::Record */ {
+static inline-class-member method ET_Record|(core::Record it) → self::ET_Record /* = core::Record */ {
   lowered final self::ET_Record /* = core::Record */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Record|_#new#tearOff(dynamic it) → self::ET_Record /* = core::Record */
+static inline-class-member method ET_Record|_#new#tearOff(core::Record it) → self::ET_Record /* = core::Record */
   return self::ET_Record|(it);
-static inline-class-member method ET_RecordType|(dynamic it) → self::ET_RecordType /* =(core::int, core::String) */ {
+static inline-class-member method ET_RecordType|((core::int, core::String) it) → self::ET_RecordType /* =(core::int, core::String) */ {
   lowered final self::ET_RecordType /* =(core::int, core::String) */ #this = it;
   return #this;
 }
-static inline-class-member method ET_RecordType|_#new#tearOff(dynamic it) → self::ET_RecordType /* =(core::int, core::String) */
+static inline-class-member method ET_RecordType|_#new#tearOff((core::int, core::String) it) → self::ET_RecordType /* =(core::int, core::String) */
   return self::ET_RecordType|(it);
-static inline-class-member method ET_Function|(dynamic it) → self::ET_Function /* = core::Function */ {
+static inline-class-member method ET_Function|(core::Function it) → self::ET_Function /* = core::Function */ {
   lowered final self::ET_Function /* = core::Function */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Function|_#new#tearOff(dynamic it) → self::ET_Function /* = core::Function */
+static inline-class-member method ET_Function|_#new#tearOff(core::Function it) → self::ET_Function /* = core::Function */
   return self::ET_Function|(it);
-static inline-class-member method ET_FunctionType|(dynamic it) → self::ET_FunctionType /* = () → void */ {
+static inline-class-member method ET_FunctionType|(() → void it) → self::ET_FunctionType /* = () → void */ {
   lowered final self::ET_FunctionType /* = () → void */ #this = it;
   return #this;
 }
-static inline-class-member method ET_FunctionType|_#new#tearOff(dynamic it) → self::ET_FunctionType /* = () → void */
+static inline-class-member method ET_FunctionType|_#new#tearOff(() → void it) → self::ET_FunctionType /* = () → void */
   return self::ET_FunctionType|(it);
-static inline-class-member method ET_NullableInterfaceType|(dynamic it) → self::ET_NullableInterfaceType /* = core::String? */ {
+static inline-class-member method ET_NullableInterfaceType|(core::String? it) → self::ET_NullableInterfaceType /* = core::String? */ {
   lowered final self::ET_NullableInterfaceType /* = core::String? */ #this = it;
   return #this;
 }
-static inline-class-member method ET_NullableInterfaceType|_#new#tearOff(dynamic it) → self::ET_NullableInterfaceType /* = core::String? */
+static inline-class-member method ET_NullableInterfaceType|_#new#tearOff(core::String? it) → self::ET_NullableInterfaceType /* = core::String? */
   return self::ET_NullableInterfaceType|(it);
-static inline-class-member method ET_NullableExtensionType|(dynamic it) → self::ET_NullableExtensionType /* = core::int? */ {
+static inline-class-member method ET_NullableExtensionType|(self::ExtensionType? /* = core::int? */ it) → self::ET_NullableExtensionType /* = core::int? */ {
   lowered final self::ET_NullableExtensionType /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method ET_NullableExtensionType|_#new#tearOff(dynamic it) → self::ET_NullableExtensionType /* = core::int? */
+static inline-class-member method ET_NullableExtensionType|_#new#tearOff(self::ExtensionType? /* = core::int? */ it) → self::ET_NullableExtensionType /* = core::int? */
   return self::ET_NullableExtensionType|(it);
-static inline-class-member method ET_FutureOr|(dynamic it) → self::ET_FutureOr /* = FutureOr<core::int>*/ {
+static inline-class-member method ET_FutureOr|(FutureOr<core::int>it) → self::ET_FutureOr /* = FutureOr<core::int>*/ {
   lowered final self::ET_FutureOr /* = FutureOr<core::int>*/ #this = it;
   return #this;
 }
-static inline-class-member method ET_FutureOr|_#new#tearOff(dynamic it) → self::ET_FutureOr /* = FutureOr<core::int>*/
+static inline-class-member method ET_FutureOr|_#new#tearOff(FutureOr<core::int>it) → self::ET_FutureOr /* = FutureOr<core::int>*/
   return self::ET_FutureOr|(it);
-static inline-class-member method ET_Extension|_#new#tearOff(dynamic it) → self::ET_Extension /* = Never */
+static inline-class-member method ET_Extension|_#new#tearOff(Never it) → self::ET_Extension /* = Never */
   return self::ET_Extension|(it);
-static inline-class-member method ET_Extension|(dynamic it) → self::ET_Extension /* = Never */ {
+static inline-class-member method ET_Extension|(Never it) → self::ET_Extension /* = Never */ {
   lowered final self::ET_Extension /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_TypeVariable|<T extends core::Object? = dynamic>(dynamic it) → self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ {
+static inline-class-member method ET_TypeVariable|<T extends core::Object? = dynamic>(self::ET_TypeVariable|::T% it) → self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ {
   lowered final self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method ET_TypeVariable|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_TypeVariable<self::ET_TypeVariable|_#new#tearOff::T%> /* = self::ET_TypeVariable|_#new#tearOff::T% */
+static inline-class-member method ET_TypeVariable|_#new#tearOff<T extends core::Object? = dynamic>(self::ET_TypeVariable|_#new#tearOff::T% it) → self::ET_TypeVariable<self::ET_TypeVariable|_#new#tearOff::T%> /* = self::ET_TypeVariable|_#new#tearOff::T% */
   return self::ET_TypeVariable|<self::ET_TypeVariable|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Class|(dynamic it) → self::ET_Class /* = self::Class */ {
+static inline-class-member method ET_Class|(self::Class it) → self::ET_Class /* = self::Class */ {
   lowered final self::ET_Class /* = self::Class */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Class|_#new#tearOff(dynamic it) → self::ET_Class /* = self::Class */
+static inline-class-member method ET_Class|_#new#tearOff(self::Class it) → self::ET_Class /* = self::Class */
   return self::ET_Class|(it);
-static inline-class-member method ET_GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ {
+static inline-class-member method ET_GenericClass|<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericClass|::T%> it) → self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ {
   lowered final self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericClass<self::ET_GenericClass|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> */
+static inline-class-member method ET_GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> it) → self::ET_GenericClass<self::ET_GenericClass|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> */
   return self::ET_GenericClass|<self::ET_GenericClass|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Alias|(dynamic it) → self::ET_Alias /* = self::Class */ {
+static inline-class-member method ET_Alias|(self::Class it) → self::ET_Alias /* = self::Class */ {
   lowered final self::ET_Alias /* = self::Class */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Alias|_#new#tearOff(dynamic it) → self::ET_Alias /* = self::Class */
+static inline-class-member method ET_Alias|_#new#tearOff(self::Class it) → self::ET_Alias /* = self::Class */
   return self::ET_Alias|(it);
-static inline-class-member method ET_GenericAlias|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ {
+static inline-class-member method ET_GenericAlias|<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericAlias|::T%> it) → self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ {
   lowered final self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericAlias<self::ET_GenericAlias|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> */
+static inline-class-member method ET_GenericAlias|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> it) → self::ET_GenericAlias<self::ET_GenericAlias|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> */
   return self::ET_GenericAlias|<self::ET_GenericAlias|_#new#tearOff::T%>(it);
-static inline-class-member method ET_ExtensionType|(dynamic it) → self::ET_ExtensionType /* = core::int */ {
+static inline-class-member method ET_ExtensionType|(self::ExtensionType /* = core::int */ it) → self::ET_ExtensionType /* = core::int */ {
   lowered final self::ET_ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ET_ExtensionType|_#new#tearOff(dynamic it) → self::ET_ExtensionType /* = core::int */
+static inline-class-member method ET_ExtensionType|_#new#tearOff(self::ExtensionType /* = core::int */ it) → self::ET_ExtensionType /* = core::int */
   return self::ET_ExtensionType|(it);
-static inline-class-member method ET_GenericExtensionType|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ {
+static inline-class-member method ET_GenericExtensionType|<T extends core::Object? = dynamic>(self::GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ {
   lowered final self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */
+static inline-class-member method ET_GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */ it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */
   return self::ET_GenericExtensionType|<self::ET_GenericExtensionType|_#new#tearOff::T%>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.outline.expect
index 6a2903a..7bfcf7a 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.outline.expect
@@ -192,91 +192,91 @@
   constructor • = self::ET_GenericExtensionType|;
   tearoff • = self::ET_GenericExtensionType|_#new#tearOff;
 }
-static inline-class-member method ExtensionType|(dynamic it) → self::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|(core::int it) → self::ExtensionType /* = core::int */
   ;
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → self::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → self::ExtensionType /* = core::int */
   return self::ExtensionType|(it);
-static inline-class-member method GenericExtensionType|<T extends core::Object? = dynamic>(dynamic it) → self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */
+static inline-class-member method GenericExtensionType|<T extends core::Object? = dynamic>(self::GenericExtensionType|::T% it) → self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */
   ;
-static inline-class-member method GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericExtensionType<self::GenericExtensionType|_#new#tearOff::T%> /* = self::GenericExtensionType|_#new#tearOff::T% */
+static inline-class-member method GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericExtensionType|_#new#tearOff::T% it) → self::GenericExtensionType<self::GenericExtensionType|_#new#tearOff::T%> /* = self::GenericExtensionType|_#new#tearOff::T% */
   return self::GenericExtensionType|<self::GenericExtensionType|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Null|(dynamic it) → self::ET_Null /* = Null */
+static inline-class-member method ET_Null|(Null it) → self::ET_Null /* = Null */
   ;
-static inline-class-member method ET_Null|_#new#tearOff(dynamic it) → self::ET_Null /* = Null */
+static inline-class-member method ET_Null|_#new#tearOff(Null it) → self::ET_Null /* = Null */
   return self::ET_Null|(it);
 static inline-class-member method ET_Dynamic|(dynamic it) → self::ET_Dynamic /* = dynamic */
   ;
 static inline-class-member method ET_Dynamic|_#new#tearOff(dynamic it) → self::ET_Dynamic /* = dynamic */
   return self::ET_Dynamic|(it);
-static inline-class-member method ET_Void|(dynamic it) → self::ET_Void /* = Never */
+static inline-class-member method ET_Void|(Never it) → self::ET_Void /* = Never */
   ;
-static inline-class-member method ET_Void|_#new#tearOff(dynamic it) → self::ET_Void /* = Never */
+static inline-class-member method ET_Void|_#new#tearOff(Never it) → self::ET_Void /* = Never */
   return self::ET_Void|(it);
-static inline-class-member method ET_Never|(dynamic it) → self::ET_Never /* = Never */
+static inline-class-member method ET_Never|(Never it) → self::ET_Never /* = Never */
   ;
-static inline-class-member method ET_Never|_#new#tearOff(dynamic it) → self::ET_Never /* = Never */
+static inline-class-member method ET_Never|_#new#tearOff(Never it) → self::ET_Never /* = Never */
   return self::ET_Never|(it);
-static inline-class-member method ET_Object|(dynamic it) → self::ET_Object /* = core::Object */
+static inline-class-member method ET_Object|(core::Object it) → self::ET_Object /* = core::Object */
   ;
-static inline-class-member method ET_Object|_#new#tearOff(dynamic it) → self::ET_Object /* = core::Object */
+static inline-class-member method ET_Object|_#new#tearOff(core::Object it) → self::ET_Object /* = core::Object */
   return self::ET_Object|(it);
-static inline-class-member method ET_Record|(dynamic it) → self::ET_Record /* = core::Record */
+static inline-class-member method ET_Record|(core::Record it) → self::ET_Record /* = core::Record */
   ;
-static inline-class-member method ET_Record|_#new#tearOff(dynamic it) → self::ET_Record /* = core::Record */
+static inline-class-member method ET_Record|_#new#tearOff(core::Record it) → self::ET_Record /* = core::Record */
   return self::ET_Record|(it);
-static inline-class-member method ET_RecordType|(dynamic it) → self::ET_RecordType /* =(core::int, core::String) */
+static inline-class-member method ET_RecordType|((core::int, core::String) it) → self::ET_RecordType /* =(core::int, core::String) */
   ;
-static inline-class-member method ET_RecordType|_#new#tearOff(dynamic it) → self::ET_RecordType /* =(core::int, core::String) */
+static inline-class-member method ET_RecordType|_#new#tearOff((core::int, core::String) it) → self::ET_RecordType /* =(core::int, core::String) */
   return self::ET_RecordType|(it);
-static inline-class-member method ET_Function|(dynamic it) → self::ET_Function /* = core::Function */
+static inline-class-member method ET_Function|(core::Function it) → self::ET_Function /* = core::Function */
   ;
-static inline-class-member method ET_Function|_#new#tearOff(dynamic it) → self::ET_Function /* = core::Function */
+static inline-class-member method ET_Function|_#new#tearOff(core::Function it) → self::ET_Function /* = core::Function */
   return self::ET_Function|(it);
-static inline-class-member method ET_FunctionType|(dynamic it) → self::ET_FunctionType /* = () → void */
+static inline-class-member method ET_FunctionType|(() → void it) → self::ET_FunctionType /* = () → void */
   ;
-static inline-class-member method ET_FunctionType|_#new#tearOff(dynamic it) → self::ET_FunctionType /* = () → void */
+static inline-class-member method ET_FunctionType|_#new#tearOff(() → void it) → self::ET_FunctionType /* = () → void */
   return self::ET_FunctionType|(it);
-static inline-class-member method ET_NullableInterfaceType|(dynamic it) → self::ET_NullableInterfaceType /* = core::String? */
+static inline-class-member method ET_NullableInterfaceType|(core::String? it) → self::ET_NullableInterfaceType /* = core::String? */
   ;
-static inline-class-member method ET_NullableInterfaceType|_#new#tearOff(dynamic it) → self::ET_NullableInterfaceType /* = core::String? */
+static inline-class-member method ET_NullableInterfaceType|_#new#tearOff(core::String? it) → self::ET_NullableInterfaceType /* = core::String? */
   return self::ET_NullableInterfaceType|(it);
-static inline-class-member method ET_NullableExtensionType|(dynamic it) → self::ET_NullableExtensionType /* = core::int? */
+static inline-class-member method ET_NullableExtensionType|(self::ExtensionType? /* = core::int? */ it) → self::ET_NullableExtensionType /* = core::int? */
   ;
-static inline-class-member method ET_NullableExtensionType|_#new#tearOff(dynamic it) → self::ET_NullableExtensionType /* = core::int? */
+static inline-class-member method ET_NullableExtensionType|_#new#tearOff(self::ExtensionType? /* = core::int? */ it) → self::ET_NullableExtensionType /* = core::int? */
   return self::ET_NullableExtensionType|(it);
-static inline-class-member method ET_FutureOr|(dynamic it) → self::ET_FutureOr /* = FutureOr<core::int>*/
+static inline-class-member method ET_FutureOr|(FutureOr<core::int>it) → self::ET_FutureOr /* = FutureOr<core::int>*/
   ;
-static inline-class-member method ET_FutureOr|_#new#tearOff(dynamic it) → self::ET_FutureOr /* = FutureOr<core::int>*/
+static inline-class-member method ET_FutureOr|_#new#tearOff(FutureOr<core::int>it) → self::ET_FutureOr /* = FutureOr<core::int>*/
   return self::ET_FutureOr|(it);
-static inline-class-member method ET_Extension|_#new#tearOff(dynamic it) → self::ET_Extension /* = Never */
+static inline-class-member method ET_Extension|_#new#tearOff(Never it) → self::ET_Extension /* = Never */
   return self::ET_Extension|(it);
-static inline-class-member method ET_Extension|(dynamic it) → self::ET_Extension /* = Never */
+static inline-class-member method ET_Extension|(Never it) → self::ET_Extension /* = Never */
   ;
-static inline-class-member method ET_TypeVariable|<T extends core::Object? = dynamic>(dynamic it) → self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */
+static inline-class-member method ET_TypeVariable|<T extends core::Object? = dynamic>(self::ET_TypeVariable|::T% it) → self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */
   ;
-static inline-class-member method ET_TypeVariable|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_TypeVariable<self::ET_TypeVariable|_#new#tearOff::T%> /* = self::ET_TypeVariable|_#new#tearOff::T% */
+static inline-class-member method ET_TypeVariable|_#new#tearOff<T extends core::Object? = dynamic>(self::ET_TypeVariable|_#new#tearOff::T% it) → self::ET_TypeVariable<self::ET_TypeVariable|_#new#tearOff::T%> /* = self::ET_TypeVariable|_#new#tearOff::T% */
   return self::ET_TypeVariable|<self::ET_TypeVariable|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Class|(dynamic it) → self::ET_Class /* = self::Class */
+static inline-class-member method ET_Class|(self::Class it) → self::ET_Class /* = self::Class */
   ;
-static inline-class-member method ET_Class|_#new#tearOff(dynamic it) → self::ET_Class /* = self::Class */
+static inline-class-member method ET_Class|_#new#tearOff(self::Class it) → self::ET_Class /* = self::Class */
   return self::ET_Class|(it);
-static inline-class-member method ET_GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */
+static inline-class-member method ET_GenericClass|<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericClass|::T%> it) → self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */
   ;
-static inline-class-member method ET_GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericClass<self::ET_GenericClass|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> */
+static inline-class-member method ET_GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> it) → self::ET_GenericClass<self::ET_GenericClass|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> */
   return self::ET_GenericClass|<self::ET_GenericClass|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Alias|(dynamic it) → self::ET_Alias /* = self::Class */
+static inline-class-member method ET_Alias|(self::Class it) → self::ET_Alias /* = self::Class */
   ;
-static inline-class-member method ET_Alias|_#new#tearOff(dynamic it) → self::ET_Alias /* = self::Class */
+static inline-class-member method ET_Alias|_#new#tearOff(self::Class it) → self::ET_Alias /* = self::Class */
   return self::ET_Alias|(it);
-static inline-class-member method ET_GenericAlias|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */
+static inline-class-member method ET_GenericAlias|<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericAlias|::T%> it) → self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */
   ;
-static inline-class-member method ET_GenericAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericAlias<self::ET_GenericAlias|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> */
+static inline-class-member method ET_GenericAlias|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> it) → self::ET_GenericAlias<self::ET_GenericAlias|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> */
   return self::ET_GenericAlias|<self::ET_GenericAlias|_#new#tearOff::T%>(it);
-static inline-class-member method ET_ExtensionType|(dynamic it) → self::ET_ExtensionType /* = core::int */
+static inline-class-member method ET_ExtensionType|(self::ExtensionType /* = core::int */ it) → self::ET_ExtensionType /* = core::int */
   ;
-static inline-class-member method ET_ExtensionType|_#new#tearOff(dynamic it) → self::ET_ExtensionType /* = core::int */
+static inline-class-member method ET_ExtensionType|_#new#tearOff(self::ExtensionType /* = core::int */ it) → self::ET_ExtensionType /* = core::int */
   return self::ET_ExtensionType|(it);
-static inline-class-member method ET_GenericExtensionType|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */
+static inline-class-member method ET_GenericExtensionType|<T extends core::Object? = dynamic>(self::GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */
   ;
-static inline-class-member method ET_GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */
+static inline-class-member method ET_GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */ it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */
   return self::ET_GenericExtensionType|<self::ET_GenericExtensionType|_#new#tearOff::T%>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.transformed.expect
index 2df0ca3..d1231b5 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/implement_all.dart.weak.transformed.expect
@@ -194,23 +194,23 @@
   constructor • = self::ET_GenericExtensionType|;
   tearoff • = self::ET_GenericExtensionType|_#new#tearOff;
 }
-static inline-class-member method ExtensionType|(dynamic it) → self::ExtensionType /* = core::int */ {
+static inline-class-member method ExtensionType|(core::int it) → self::ExtensionType /* = core::int */ {
   lowered final self::ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ExtensionType|_#new#tearOff(dynamic it) → self::ExtensionType /* = core::int */
+static inline-class-member method ExtensionType|_#new#tearOff(core::int it) → self::ExtensionType /* = core::int */
   return self::ExtensionType|(it);
-static inline-class-member method GenericExtensionType|<T extends core::Object? = dynamic>(dynamic it) → self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ {
+static inline-class-member method GenericExtensionType|<T extends core::Object? = dynamic>(self::GenericExtensionType|::T% it) → self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ {
   lowered final self::GenericExtensionType<self::GenericExtensionType|::T%> /* = self::GenericExtensionType|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericExtensionType<self::GenericExtensionType|_#new#tearOff::T%> /* = self::GenericExtensionType|_#new#tearOff::T% */
+static inline-class-member method GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericExtensionType|_#new#tearOff::T% it) → self::GenericExtensionType<self::GenericExtensionType|_#new#tearOff::T%> /* = self::GenericExtensionType|_#new#tearOff::T% */
   return self::GenericExtensionType|<self::GenericExtensionType|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Null|(dynamic it) → self::ET_Null /* = Null */ {
+static inline-class-member method ET_Null|(Null it) → self::ET_Null /* = Null */ {
   lowered final self::ET_Null /* = Null */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Null|_#new#tearOff(dynamic it) → self::ET_Null /* = Null */
+static inline-class-member method ET_Null|_#new#tearOff(Null it) → self::ET_Null /* = Null */
   return self::ET_Null|(it);
 static inline-class-member method ET_Dynamic|(dynamic it) → self::ET_Dynamic /* = dynamic */ {
   lowered final self::ET_Dynamic /* = dynamic */ #this = it;
@@ -218,111 +218,111 @@
 }
 static inline-class-member method ET_Dynamic|_#new#tearOff(dynamic it) → self::ET_Dynamic /* = dynamic */
   return self::ET_Dynamic|(it);
-static inline-class-member method ET_Void|(dynamic it) → self::ET_Void /* = Never */ {
+static inline-class-member method ET_Void|(Never it) → self::ET_Void /* = Never */ {
   lowered final self::ET_Void /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Void|_#new#tearOff(dynamic it) → self::ET_Void /* = Never */
+static inline-class-member method ET_Void|_#new#tearOff(Never it) → self::ET_Void /* = Never */
   return self::ET_Void|(it);
-static inline-class-member method ET_Never|(dynamic it) → self::ET_Never /* = Never */ {
+static inline-class-member method ET_Never|(Never it) → self::ET_Never /* = Never */ {
   lowered final self::ET_Never /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Never|_#new#tearOff(dynamic it) → self::ET_Never /* = Never */
+static inline-class-member method ET_Never|_#new#tearOff(Never it) → self::ET_Never /* = Never */
   return self::ET_Never|(it);
-static inline-class-member method ET_Object|(dynamic it) → self::ET_Object /* = core::Object */ {
+static inline-class-member method ET_Object|(core::Object it) → self::ET_Object /* = core::Object */ {
   lowered final self::ET_Object /* = core::Object */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Object|_#new#tearOff(dynamic it) → self::ET_Object /* = core::Object */
+static inline-class-member method ET_Object|_#new#tearOff(core::Object it) → self::ET_Object /* = core::Object */
   return self::ET_Object|(it);
-static inline-class-member method ET_Record|(dynamic it) → self::ET_Record /* = core::Record */ {
+static inline-class-member method ET_Record|(core::Record it) → self::ET_Record /* = core::Record */ {
   lowered final self::ET_Record /* = core::Record */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Record|_#new#tearOff(dynamic it) → self::ET_Record /* = core::Record */
+static inline-class-member method ET_Record|_#new#tearOff(core::Record it) → self::ET_Record /* = core::Record */
   return self::ET_Record|(it);
-static inline-class-member method ET_RecordType|(dynamic it) → self::ET_RecordType /* =(core::int, core::String) */ {
+static inline-class-member method ET_RecordType|((core::int, core::String) it) → self::ET_RecordType /* =(core::int, core::String) */ {
   lowered final self::ET_RecordType /* =(core::int, core::String) */ #this = it;
   return #this;
 }
-static inline-class-member method ET_RecordType|_#new#tearOff(dynamic it) → self::ET_RecordType /* =(core::int, core::String) */
+static inline-class-member method ET_RecordType|_#new#tearOff((core::int, core::String) it) → self::ET_RecordType /* =(core::int, core::String) */
   return self::ET_RecordType|(it);
-static inline-class-member method ET_Function|(dynamic it) → self::ET_Function /* = core::Function */ {
+static inline-class-member method ET_Function|(core::Function it) → self::ET_Function /* = core::Function */ {
   lowered final self::ET_Function /* = core::Function */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Function|_#new#tearOff(dynamic it) → self::ET_Function /* = core::Function */
+static inline-class-member method ET_Function|_#new#tearOff(core::Function it) → self::ET_Function /* = core::Function */
   return self::ET_Function|(it);
-static inline-class-member method ET_FunctionType|(dynamic it) → self::ET_FunctionType /* = () → void */ {
+static inline-class-member method ET_FunctionType|(() → void it) → self::ET_FunctionType /* = () → void */ {
   lowered final self::ET_FunctionType /* = () → void */ #this = it;
   return #this;
 }
-static inline-class-member method ET_FunctionType|_#new#tearOff(dynamic it) → self::ET_FunctionType /* = () → void */
+static inline-class-member method ET_FunctionType|_#new#tearOff(() → void it) → self::ET_FunctionType /* = () → void */
   return self::ET_FunctionType|(it);
-static inline-class-member method ET_NullableInterfaceType|(dynamic it) → self::ET_NullableInterfaceType /* = core::String? */ {
+static inline-class-member method ET_NullableInterfaceType|(core::String? it) → self::ET_NullableInterfaceType /* = core::String? */ {
   lowered final self::ET_NullableInterfaceType /* = core::String? */ #this = it;
   return #this;
 }
-static inline-class-member method ET_NullableInterfaceType|_#new#tearOff(dynamic it) → self::ET_NullableInterfaceType /* = core::String? */
+static inline-class-member method ET_NullableInterfaceType|_#new#tearOff(core::String? it) → self::ET_NullableInterfaceType /* = core::String? */
   return self::ET_NullableInterfaceType|(it);
-static inline-class-member method ET_NullableExtensionType|(dynamic it) → self::ET_NullableExtensionType /* = core::int? */ {
+static inline-class-member method ET_NullableExtensionType|(self::ExtensionType? /* = core::int? */ it) → self::ET_NullableExtensionType /* = core::int? */ {
   lowered final self::ET_NullableExtensionType /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method ET_NullableExtensionType|_#new#tearOff(dynamic it) → self::ET_NullableExtensionType /* = core::int? */
+static inline-class-member method ET_NullableExtensionType|_#new#tearOff(self::ExtensionType? /* = core::int? */ it) → self::ET_NullableExtensionType /* = core::int? */
   return self::ET_NullableExtensionType|(it);
-static inline-class-member method ET_FutureOr|(dynamic it) → self::ET_FutureOr /* = FutureOr<core::int>*/ {
+static inline-class-member method ET_FutureOr|(FutureOr<core::int>it) → self::ET_FutureOr /* = FutureOr<core::int>*/ {
   lowered final self::ET_FutureOr /* = FutureOr<core::int>*/ #this = it;
   return #this;
 }
-static inline-class-member method ET_FutureOr|_#new#tearOff(dynamic it) → self::ET_FutureOr /* = FutureOr<core::int>*/
+static inline-class-member method ET_FutureOr|_#new#tearOff(FutureOr<core::int>it) → self::ET_FutureOr /* = FutureOr<core::int>*/
   return self::ET_FutureOr|(it);
-static inline-class-member method ET_Extension|_#new#tearOff(dynamic it) → self::ET_Extension /* = Never */
+static inline-class-member method ET_Extension|_#new#tearOff(Never it) → self::ET_Extension /* = Never */
   return self::ET_Extension|(it);
-static inline-class-member method ET_Extension|(dynamic it) → self::ET_Extension /* = Never */ {
+static inline-class-member method ET_Extension|(Never it) → self::ET_Extension /* = Never */ {
   lowered final self::ET_Extension /* = Never */ #this = it;
   return #this;
 }
-static inline-class-member method ET_TypeVariable|<T extends core::Object? = dynamic>(dynamic it) → self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ {
+static inline-class-member method ET_TypeVariable|<T extends core::Object? = dynamic>(self::ET_TypeVariable|::T% it) → self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ {
   lowered final self::ET_TypeVariable<self::ET_TypeVariable|::T%> /* = self::ET_TypeVariable|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method ET_TypeVariable|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_TypeVariable<self::ET_TypeVariable|_#new#tearOff::T%> /* = self::ET_TypeVariable|_#new#tearOff::T% */
+static inline-class-member method ET_TypeVariable|_#new#tearOff<T extends core::Object? = dynamic>(self::ET_TypeVariable|_#new#tearOff::T% it) → self::ET_TypeVariable<self::ET_TypeVariable|_#new#tearOff::T%> /* = self::ET_TypeVariable|_#new#tearOff::T% */
   return self::ET_TypeVariable|<self::ET_TypeVariable|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Class|(dynamic it) → self::ET_Class /* = self::Class */ {
+static inline-class-member method ET_Class|(self::Class it) → self::ET_Class /* = self::Class */ {
   lowered final self::ET_Class /* = self::Class */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Class|_#new#tearOff(dynamic it) → self::ET_Class /* = self::Class */
+static inline-class-member method ET_Class|_#new#tearOff(self::Class it) → self::ET_Class /* = self::Class */
   return self::ET_Class|(it);
-static inline-class-member method ET_GenericClass|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ {
+static inline-class-member method ET_GenericClass|<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericClass|::T%> it) → self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ {
   lowered final self::ET_GenericClass<self::ET_GenericClass|::T%> /* = self::GenericClass<self::ET_GenericClass|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericClass<self::ET_GenericClass|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> */
+static inline-class-member method ET_GenericClass|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> it) → self::ET_GenericClass<self::ET_GenericClass|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericClass|_#new#tearOff::T%> */
   return self::ET_GenericClass|<self::ET_GenericClass|_#new#tearOff::T%>(it);
-static inline-class-member method ET_Alias|(dynamic it) → self::ET_Alias /* = self::Class */ {
+static inline-class-member method ET_Alias|(self::Class it) → self::ET_Alias /* = self::Class */ {
   lowered final self::ET_Alias /* = self::Class */ #this = it;
   return #this;
 }
-static inline-class-member method ET_Alias|_#new#tearOff(dynamic it) → self::ET_Alias /* = self::Class */
+static inline-class-member method ET_Alias|_#new#tearOff(self::Class it) → self::ET_Alias /* = self::Class */
   return self::ET_Alias|(it);
-static inline-class-member method ET_GenericAlias|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ {
+static inline-class-member method ET_GenericAlias|<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericAlias|::T%> it) → self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ {
   lowered final self::ET_GenericAlias<self::ET_GenericAlias|::T%> /* = self::GenericClass<self::ET_GenericAlias|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericAlias<self::ET_GenericAlias|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> */
+static inline-class-member method ET_GenericAlias|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> it) → self::ET_GenericAlias<self::ET_GenericAlias|_#new#tearOff::T%> /* = self::GenericClass<self::ET_GenericAlias|_#new#tearOff::T%> */
   return self::ET_GenericAlias|<self::ET_GenericAlias|_#new#tearOff::T%>(it);
-static inline-class-member method ET_ExtensionType|(dynamic it) → self::ET_ExtensionType /* = core::int */ {
+static inline-class-member method ET_ExtensionType|(self::ExtensionType /* = core::int */ it) → self::ET_ExtensionType /* = core::int */ {
   lowered final self::ET_ExtensionType /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method ET_ExtensionType|_#new#tearOff(dynamic it) → self::ET_ExtensionType /* = core::int */
+static inline-class-member method ET_ExtensionType|_#new#tearOff(self::ExtensionType /* = core::int */ it) → self::ET_ExtensionType /* = core::int */
   return self::ET_ExtensionType|(it);
-static inline-class-member method ET_GenericExtensionType|<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ {
+static inline-class-member method ET_GenericExtensionType|<T extends core::Object? = dynamic>(self::GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ {
   lowered final self::ET_GenericExtensionType<self::ET_GenericExtensionType|::T%> /* = self::ET_GenericExtensionType|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method ET_GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */
+static inline-class-member method ET_GenericExtensionType|_#new#tearOff<T extends core::Object? = dynamic>(self::GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */ it) → self::ET_GenericExtensionType<self::ET_GenericExtensionType|_#new#tearOff::T%> /* = self::ET_GenericExtensionType|_#new#tearOff::T% */
   return self::ET_GenericExtensionType|<self::ET_GenericExtensionType|_#new#tearOff::T%>(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.expect
index 2174dfe..d06a52c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.expect
@@ -230,51 +230,51 @@
   constructor • = self::D1|;
   tearoff • = self::D1|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
 static inline-class-member method A|methodA(lowered final self::A /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(5){(core::num) → core::int};
 static inline-class-member method A|get#methodA(lowered final self::A /* = core::int */ #this) → () → core::int
   return () → core::int => self::A|methodA(#this);
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = self::B|::T% */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(self::B|::T% it) → self::B<self::B|::T%> /* = self::B|::T% */ {
   lowered final self::B<self::B|::T%> /* = self::B|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = self::B|_#new#tearOff::T% */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(self::B|_#new#tearOff::T% it) → self::B<self::B|_#new#tearOff::T%> /* = self::B|_#new#tearOff::T% */
   return self::B|<self::B|_#new#tearOff::T%>(it);
 static inline-class-member method B|methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|methodB::T%> /* = self::B|methodB::T% */ #this) → self::B|methodB::T%
   return #this as{Unchecked} self::B|methodB::T%;
 static inline-class-member method B|get#methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|get#methodB::T%> /* = self::B|get#methodB::T% */ #this) → () → self::B|get#methodB::T%
   return () → self::B|get#methodB::T% => self::B|methodB<self::B|get#methodB::T%>(#this);
-static inline-class-member method C1|(dynamic it) → self::C1 /* = core::int */ {
+static inline-class-member method C1|(core::int it) → self::C1 /* = core::int */ {
   lowered final self::C1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C1|_#new#tearOff(dynamic it) → self::C1 /* = core::int */
+static inline-class-member method C1|_#new#tearOff(core::int it) → self::C1 /* = core::int */
   return self::C1|(it);
 static inline-class-member method C1|methodC1(lowered final self::C1 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(42){(core::num) → core::int};
 static inline-class-member method C1|get#methodC1(lowered final self::C1 /* = core::int */ #this) → () → core::int
   return () → core::int => self::C1|methodC1(#this);
-static inline-class-member method C2|(dynamic it) → self::C2 /* = core::int */ {
+static inline-class-member method C2|(core::int it) → self::C2 /* = core::int */ {
   lowered final self::C2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C2|_#new#tearOff(dynamic it) → self::C2 /* = core::int */
+static inline-class-member method C2|_#new#tearOff(core::int it) → self::C2 /* = core::int */
   return self::C2|(it);
 static inline-class-member method C2|methodC2(lowered final self::C2 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(87){(core::num) → core::int};
 static inline-class-member method C2|get#methodC2(lowered final self::C2 /* = core::int */ #this) → () → core::int
   return () → core::int => self::C2|methodC2(#this);
-static inline-class-member method D1|(dynamic it) → self::D1 /* = core::int */ {
+static inline-class-member method D1|(core::int it) → self::D1 /* = core::int */ {
   lowered final self::D1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D1|_#new#tearOff(dynamic it) → self::D1 /* = core::int */
+static inline-class-member method D1|_#new#tearOff(core::int it) → self::D1 /* = core::int */
   return self::D1|(it);
 static inline-class-member method D1|methodD1(lowered final self::D1 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(123){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.transformed.expect
index 570ebd2..43625ff 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.strong.transformed.expect
@@ -230,51 +230,51 @@
   constructor • = self::D1|;
   tearoff • = self::D1|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
 static inline-class-member method A|methodA(lowered final self::A /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(5){(core::num) → core::int};
 static inline-class-member method A|get#methodA(lowered final self::A /* = core::int */ #this) → () → core::int
   return () → core::int => self::A|methodA(#this);
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = self::B|::T% */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(self::B|::T% it) → self::B<self::B|::T%> /* = self::B|::T% */ {
   lowered final self::B<self::B|::T%> /* = self::B|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = self::B|_#new#tearOff::T% */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(self::B|_#new#tearOff::T% it) → self::B<self::B|_#new#tearOff::T%> /* = self::B|_#new#tearOff::T% */
   return self::B|<self::B|_#new#tearOff::T%>(it);
 static inline-class-member method B|methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|methodB::T%> /* = self::B|methodB::T% */ #this) → self::B|methodB::T%
   return #this as{Unchecked} self::B|methodB::T%;
 static inline-class-member method B|get#methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|get#methodB::T%> /* = self::B|get#methodB::T% */ #this) → () → self::B|get#methodB::T%
   return () → self::B|get#methodB::T% => self::B|methodB<self::B|get#methodB::T%>(#this);
-static inline-class-member method C1|(dynamic it) → self::C1 /* = core::int */ {
+static inline-class-member method C1|(core::int it) → self::C1 /* = core::int */ {
   lowered final self::C1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C1|_#new#tearOff(dynamic it) → self::C1 /* = core::int */
+static inline-class-member method C1|_#new#tearOff(core::int it) → self::C1 /* = core::int */
   return self::C1|(it);
 static inline-class-member method C1|methodC1(lowered final self::C1 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(42){(core::num) → core::int};
 static inline-class-member method C1|get#methodC1(lowered final self::C1 /* = core::int */ #this) → () → core::int
   return () → core::int => self::C1|methodC1(#this);
-static inline-class-member method C2|(dynamic it) → self::C2 /* = core::int */ {
+static inline-class-member method C2|(core::int it) → self::C2 /* = core::int */ {
   lowered final self::C2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C2|_#new#tearOff(dynamic it) → self::C2 /* = core::int */
+static inline-class-member method C2|_#new#tearOff(core::int it) → self::C2 /* = core::int */
   return self::C2|(it);
 static inline-class-member method C2|methodC2(lowered final self::C2 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(87){(core::num) → core::int};
 static inline-class-member method C2|get#methodC2(lowered final self::C2 /* = core::int */ #this) → () → core::int
   return () → core::int => self::C2|methodC2(#this);
-static inline-class-member method D1|(dynamic it) → self::D1 /* = core::int */ {
+static inline-class-member method D1|(core::int it) → self::D1 /* = core::int */ {
   lowered final self::D1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D1|_#new#tearOff(dynamic it) → self::D1 /* = core::int */
+static inline-class-member method D1|_#new#tearOff(core::int it) → self::D1 /* = core::int */
   return self::D1|(it);
 static inline-class-member method D1|methodD1(lowered final self::D1 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(123){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.expect
index 2174dfe..d06a52c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.expect
@@ -230,51 +230,51 @@
   constructor • = self::D1|;
   tearoff • = self::D1|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
 static inline-class-member method A|methodA(lowered final self::A /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(5){(core::num) → core::int};
 static inline-class-member method A|get#methodA(lowered final self::A /* = core::int */ #this) → () → core::int
   return () → core::int => self::A|methodA(#this);
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = self::B|::T% */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(self::B|::T% it) → self::B<self::B|::T%> /* = self::B|::T% */ {
   lowered final self::B<self::B|::T%> /* = self::B|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = self::B|_#new#tearOff::T% */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(self::B|_#new#tearOff::T% it) → self::B<self::B|_#new#tearOff::T%> /* = self::B|_#new#tearOff::T% */
   return self::B|<self::B|_#new#tearOff::T%>(it);
 static inline-class-member method B|methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|methodB::T%> /* = self::B|methodB::T% */ #this) → self::B|methodB::T%
   return #this as{Unchecked} self::B|methodB::T%;
 static inline-class-member method B|get#methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|get#methodB::T%> /* = self::B|get#methodB::T% */ #this) → () → self::B|get#methodB::T%
   return () → self::B|get#methodB::T% => self::B|methodB<self::B|get#methodB::T%>(#this);
-static inline-class-member method C1|(dynamic it) → self::C1 /* = core::int */ {
+static inline-class-member method C1|(core::int it) → self::C1 /* = core::int */ {
   lowered final self::C1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C1|_#new#tearOff(dynamic it) → self::C1 /* = core::int */
+static inline-class-member method C1|_#new#tearOff(core::int it) → self::C1 /* = core::int */
   return self::C1|(it);
 static inline-class-member method C1|methodC1(lowered final self::C1 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(42){(core::num) → core::int};
 static inline-class-member method C1|get#methodC1(lowered final self::C1 /* = core::int */ #this) → () → core::int
   return () → core::int => self::C1|methodC1(#this);
-static inline-class-member method C2|(dynamic it) → self::C2 /* = core::int */ {
+static inline-class-member method C2|(core::int it) → self::C2 /* = core::int */ {
   lowered final self::C2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C2|_#new#tearOff(dynamic it) → self::C2 /* = core::int */
+static inline-class-member method C2|_#new#tearOff(core::int it) → self::C2 /* = core::int */
   return self::C2|(it);
 static inline-class-member method C2|methodC2(lowered final self::C2 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(87){(core::num) → core::int};
 static inline-class-member method C2|get#methodC2(lowered final self::C2 /* = core::int */ #this) → () → core::int
   return () → core::int => self::C2|methodC2(#this);
-static inline-class-member method D1|(dynamic it) → self::D1 /* = core::int */ {
+static inline-class-member method D1|(core::int it) → self::D1 /* = core::int */ {
   lowered final self::D1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D1|_#new#tearOff(dynamic it) → self::D1 /* = core::int */
+static inline-class-member method D1|_#new#tearOff(core::int it) → self::D1 /* = core::int */
   return self::D1|(it);
 static inline-class-member method D1|methodD1(lowered final self::D1 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(123){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.modular.expect
index 2174dfe..d06a52c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.modular.expect
@@ -230,51 +230,51 @@
   constructor • = self::D1|;
   tearoff • = self::D1|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
 static inline-class-member method A|methodA(lowered final self::A /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(5){(core::num) → core::int};
 static inline-class-member method A|get#methodA(lowered final self::A /* = core::int */ #this) → () → core::int
   return () → core::int => self::A|methodA(#this);
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = self::B|::T% */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(self::B|::T% it) → self::B<self::B|::T%> /* = self::B|::T% */ {
   lowered final self::B<self::B|::T%> /* = self::B|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = self::B|_#new#tearOff::T% */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(self::B|_#new#tearOff::T% it) → self::B<self::B|_#new#tearOff::T%> /* = self::B|_#new#tearOff::T% */
   return self::B|<self::B|_#new#tearOff::T%>(it);
 static inline-class-member method B|methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|methodB::T%> /* = self::B|methodB::T% */ #this) → self::B|methodB::T%
   return #this as{Unchecked} self::B|methodB::T%;
 static inline-class-member method B|get#methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|get#methodB::T%> /* = self::B|get#methodB::T% */ #this) → () → self::B|get#methodB::T%
   return () → self::B|get#methodB::T% => self::B|methodB<self::B|get#methodB::T%>(#this);
-static inline-class-member method C1|(dynamic it) → self::C1 /* = core::int */ {
+static inline-class-member method C1|(core::int it) → self::C1 /* = core::int */ {
   lowered final self::C1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C1|_#new#tearOff(dynamic it) → self::C1 /* = core::int */
+static inline-class-member method C1|_#new#tearOff(core::int it) → self::C1 /* = core::int */
   return self::C1|(it);
 static inline-class-member method C1|methodC1(lowered final self::C1 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(42){(core::num) → core::int};
 static inline-class-member method C1|get#methodC1(lowered final self::C1 /* = core::int */ #this) → () → core::int
   return () → core::int => self::C1|methodC1(#this);
-static inline-class-member method C2|(dynamic it) → self::C2 /* = core::int */ {
+static inline-class-member method C2|(core::int it) → self::C2 /* = core::int */ {
   lowered final self::C2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C2|_#new#tearOff(dynamic it) → self::C2 /* = core::int */
+static inline-class-member method C2|_#new#tearOff(core::int it) → self::C2 /* = core::int */
   return self::C2|(it);
 static inline-class-member method C2|methodC2(lowered final self::C2 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(87){(core::num) → core::int};
 static inline-class-member method C2|get#methodC2(lowered final self::C2 /* = core::int */ #this) → () → core::int
   return () → core::int => self::C2|methodC2(#this);
-static inline-class-member method D1|(dynamic it) → self::D1 /* = core::int */ {
+static inline-class-member method D1|(core::int it) → self::D1 /* = core::int */ {
   lowered final self::D1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D1|_#new#tearOff(dynamic it) → self::D1 /* = core::int */
+static inline-class-member method D1|_#new#tearOff(core::int it) → self::D1 /* = core::int */
   return self::D1|(it);
 static inline-class-member method D1|methodD1(lowered final self::D1 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(123){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.outline.expect
index 90e936a..521318d 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.outline.expect
@@ -32,41 +32,41 @@
   constructor • = self::D1|;
   tearoff • = self::D1|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|(core::int it) → self::A /* = core::int */
   ;
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
 static inline-class-member method A|methodA(lowered final self::A /* = core::int */ #this) → core::int
   ;
 static inline-class-member method A|get#methodA(lowered final self::A /* = core::int */ #this) → () → core::int
   return () → core::int => self::A|methodA(#this);
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = self::B|::T% */
+static inline-class-member method B|<T extends core::Object? = dynamic>(self::B|::T% it) → self::B<self::B|::T%> /* = self::B|::T% */
   ;
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = self::B|_#new#tearOff::T% */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(self::B|_#new#tearOff::T% it) → self::B<self::B|_#new#tearOff::T%> /* = self::B|_#new#tearOff::T% */
   return self::B|<self::B|_#new#tearOff::T%>(it);
 static inline-class-member method B|methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|methodB::T%> /* = self::B|methodB::T% */ #this) → self::B|methodB::T%
   ;
 static inline-class-member method B|get#methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|get#methodB::T%> /* = self::B|get#methodB::T% */ #this) → () → self::B|get#methodB::T%
   return () → self::B|get#methodB::T% => self::B|methodB<self::B|get#methodB::T%>(#this);
-static inline-class-member method C1|(dynamic it) → self::C1 /* = core::int */
+static inline-class-member method C1|(core::int it) → self::C1 /* = core::int */
   ;
-static inline-class-member method C1|_#new#tearOff(dynamic it) → self::C1 /* = core::int */
+static inline-class-member method C1|_#new#tearOff(core::int it) → self::C1 /* = core::int */
   return self::C1|(it);
 static inline-class-member method C1|methodC1(lowered final self::C1 /* = core::int */ #this) → core::int
   ;
 static inline-class-member method C1|get#methodC1(lowered final self::C1 /* = core::int */ #this) → () → core::int
   return () → core::int => self::C1|methodC1(#this);
-static inline-class-member method C2|(dynamic it) → self::C2 /* = core::int */
+static inline-class-member method C2|(core::int it) → self::C2 /* = core::int */
   ;
-static inline-class-member method C2|_#new#tearOff(dynamic it) → self::C2 /* = core::int */
+static inline-class-member method C2|_#new#tearOff(core::int it) → self::C2 /* = core::int */
   return self::C2|(it);
 static inline-class-member method C2|methodC2(lowered final self::C2 /* = core::int */ #this) → core::int
   ;
 static inline-class-member method C2|get#methodC2(lowered final self::C2 /* = core::int */ #this) → () → core::int
   return () → core::int => self::C2|methodC2(#this);
-static inline-class-member method D1|(dynamic it) → self::D1 /* = core::int */
+static inline-class-member method D1|(core::int it) → self::D1 /* = core::int */
   ;
-static inline-class-member method D1|_#new#tearOff(dynamic it) → self::D1 /* = core::int */
+static inline-class-member method D1|_#new#tearOff(core::int it) → self::D1 /* = core::int */
   return self::D1|(it);
 static inline-class-member method D1|methodD1(lowered final self::D1 /* = core::int */ #this) → core::int
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.transformed.expect
index 570ebd2..43625ff 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/implements.dart.weak.transformed.expect
@@ -230,51 +230,51 @@
   constructor • = self::D1|;
   tearoff • = self::D1|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
 static inline-class-member method A|methodA(lowered final self::A /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(5){(core::num) → core::int};
 static inline-class-member method A|get#methodA(lowered final self::A /* = core::int */ #this) → () → core::int
   return () → core::int => self::A|methodA(#this);
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = self::B|::T% */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(self::B|::T% it) → self::B<self::B|::T%> /* = self::B|::T% */ {
   lowered final self::B<self::B|::T%> /* = self::B|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = self::B|_#new#tearOff::T% */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(self::B|_#new#tearOff::T% it) → self::B<self::B|_#new#tearOff::T%> /* = self::B|_#new#tearOff::T% */
   return self::B|<self::B|_#new#tearOff::T%>(it);
 static inline-class-member method B|methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|methodB::T%> /* = self::B|methodB::T% */ #this) → self::B|methodB::T%
   return #this as{Unchecked} self::B|methodB::T%;
 static inline-class-member method B|get#methodB<T extends core::Object? = dynamic>(lowered final self::B<self::B|get#methodB::T%> /* = self::B|get#methodB::T% */ #this) → () → self::B|get#methodB::T%
   return () → self::B|get#methodB::T% => self::B|methodB<self::B|get#methodB::T%>(#this);
-static inline-class-member method C1|(dynamic it) → self::C1 /* = core::int */ {
+static inline-class-member method C1|(core::int it) → self::C1 /* = core::int */ {
   lowered final self::C1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C1|_#new#tearOff(dynamic it) → self::C1 /* = core::int */
+static inline-class-member method C1|_#new#tearOff(core::int it) → self::C1 /* = core::int */
   return self::C1|(it);
 static inline-class-member method C1|methodC1(lowered final self::C1 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(42){(core::num) → core::int};
 static inline-class-member method C1|get#methodC1(lowered final self::C1 /* = core::int */ #this) → () → core::int
   return () → core::int => self::C1|methodC1(#this);
-static inline-class-member method C2|(dynamic it) → self::C2 /* = core::int */ {
+static inline-class-member method C2|(core::int it) → self::C2 /* = core::int */ {
   lowered final self::C2 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C2|_#new#tearOff(dynamic it) → self::C2 /* = core::int */
+static inline-class-member method C2|_#new#tearOff(core::int it) → self::C2 /* = core::int */
   return self::C2|(it);
 static inline-class-member method C2|methodC2(lowered final self::C2 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(87){(core::num) → core::int};
 static inline-class-member method C2|get#methodC2(lowered final self::C2 /* = core::int */ #this) → () → core::int
   return () → core::int => self::C2|methodC2(#this);
-static inline-class-member method D1|(dynamic it) → self::D1 /* = core::int */ {
+static inline-class-member method D1|(core::int it) → self::D1 /* = core::int */ {
   lowered final self::D1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D1|_#new#tearOff(dynamic it) → self::D1 /* = core::int */
+static inline-class-member method D1|_#new#tearOff(core::int it) → self::D1 /* = core::int */
   return self::D1|(it);
 static inline-class-member method D1|methodD1(lowered final self::D1 /* = core::int */ #this) → core::int
   return (#this as{Unchecked} core::int).{core::num::+}(123){(core::num) → core::int};
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.expect
index 16f3480..26155a4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.expect
@@ -51,11 +51,11 @@
   constructor • = self::Class6|;
   tearoff • = self::Class6|_#new#tearOff;
 }
-static inline-class-member method Class1|_(dynamic field) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|_(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class1|_#_#tearOff(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#_#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|_(field);
 static inline-class-member method Class1|(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
@@ -63,11 +63,11 @@
 }
 static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|(field);
-static inline-class-member method Class2|_(dynamic field) → self::Class2 /* = core::int */ {
+static inline-class-member method Class2|_(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class2|_#_#tearOff(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_#_#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|_(field);
 static inline-class-member method Class2|(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
@@ -75,17 +75,17 @@
 }
 static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|(field);
-static inline-class-member method Class3|_(dynamic field) → self::Class3 /* = core::int */ {
+static inline-class-member method Class3|_(core::int field) → self::Class3 /* = core::int */ {
   lowered final self::Class3 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class3|_#_#tearOff(dynamic field) → self::Class3 /* = core::int */
+static inline-class-member method Class3|_#_#tearOff(core::int field) → self::Class3 /* = core::int */
   return self::Class3|_(field);
-static inline-class-member method Class4|_(dynamic field) → self::Class4 /* = core::int */ {
+static inline-class-member method Class4|_(core::int field) → self::Class4 /* = core::int */ {
   lowered final self::Class4 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class4|_#_#tearOff(dynamic field) → self::Class4 /* = core::int */
+static inline-class-member method Class4|_#_#tearOff(core::int field) → self::Class4 /* = core::int */
   return self::Class4|_(field);
 static inline-class-member method Class4|(core::int field, dynamic nonexisting) → self::Class4 /* = core::int */ {
   lowered final self::Class4 /* = core::int */ #this = field;
@@ -96,11 +96,11 @@
 }
 static inline-class-member method Class4|_#new#tearOff(core::int field, dynamic nonexisting) → self::Class4 /* = core::int */
   return self::Class4|(field, nonexisting);
-static inline-class-member method Class5|_(dynamic field) → self::Class5 /* = core::int */ {
+static inline-class-member method Class5|_(core::int field) → self::Class5 /* = core::int */ {
   lowered final self::Class5 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class5|_#_#tearOff(dynamic field) → self::Class5 /* = core::int */
+static inline-class-member method Class5|_#_#tearOff(core::int field) → self::Class5 /* = core::int */
   return self::Class5|_(field);
 static inline-class-member method Class5|(core::int field) → self::Class5 /* = core::int */ {
   lowered final self::Class5 /* = core::int */ #this = field;
@@ -111,11 +111,11 @@
 }
 static inline-class-member method Class5|_#new#tearOff(core::int field) → self::Class5 /* = core::int */
   return self::Class5|(field);
-static inline-class-member method Class6|_(dynamic field) → self::Class6 /* = core::int */ {
+static inline-class-member method Class6|_(core::int field) → self::Class6 /* = core::int */ {
   lowered final self::Class6 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class6|_#_#tearOff(dynamic field) → self::Class6 /* = core::int */
+static inline-class-member method Class6|_#_#tearOff(core::int field) → self::Class6 /* = core::int */
   return self::Class6|_(field);
 static inline-class-member method Class6|(core::int field) → self::Class6 /* = core::int */ {
   lowered final self::Class6 /* = core::int */ #this = field;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.transformed.expect
index 16f3480..26155a4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.strong.transformed.expect
@@ -51,11 +51,11 @@
   constructor • = self::Class6|;
   tearoff • = self::Class6|_#new#tearOff;
 }
-static inline-class-member method Class1|_(dynamic field) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|_(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class1|_#_#tearOff(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#_#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|_(field);
 static inline-class-member method Class1|(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
@@ -63,11 +63,11 @@
 }
 static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|(field);
-static inline-class-member method Class2|_(dynamic field) → self::Class2 /* = core::int */ {
+static inline-class-member method Class2|_(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class2|_#_#tearOff(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_#_#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|_(field);
 static inline-class-member method Class2|(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
@@ -75,17 +75,17 @@
 }
 static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|(field);
-static inline-class-member method Class3|_(dynamic field) → self::Class3 /* = core::int */ {
+static inline-class-member method Class3|_(core::int field) → self::Class3 /* = core::int */ {
   lowered final self::Class3 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class3|_#_#tearOff(dynamic field) → self::Class3 /* = core::int */
+static inline-class-member method Class3|_#_#tearOff(core::int field) → self::Class3 /* = core::int */
   return self::Class3|_(field);
-static inline-class-member method Class4|_(dynamic field) → self::Class4 /* = core::int */ {
+static inline-class-member method Class4|_(core::int field) → self::Class4 /* = core::int */ {
   lowered final self::Class4 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class4|_#_#tearOff(dynamic field) → self::Class4 /* = core::int */
+static inline-class-member method Class4|_#_#tearOff(core::int field) → self::Class4 /* = core::int */
   return self::Class4|_(field);
 static inline-class-member method Class4|(core::int field, dynamic nonexisting) → self::Class4 /* = core::int */ {
   lowered final self::Class4 /* = core::int */ #this = field;
@@ -96,11 +96,11 @@
 }
 static inline-class-member method Class4|_#new#tearOff(core::int field, dynamic nonexisting) → self::Class4 /* = core::int */
   return self::Class4|(field, nonexisting);
-static inline-class-member method Class5|_(dynamic field) → self::Class5 /* = core::int */ {
+static inline-class-member method Class5|_(core::int field) → self::Class5 /* = core::int */ {
   lowered final self::Class5 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class5|_#_#tearOff(dynamic field) → self::Class5 /* = core::int */
+static inline-class-member method Class5|_#_#tearOff(core::int field) → self::Class5 /* = core::int */
   return self::Class5|_(field);
 static inline-class-member method Class5|(core::int field) → self::Class5 /* = core::int */ {
   lowered final self::Class5 /* = core::int */ #this = field;
@@ -111,11 +111,11 @@
 }
 static inline-class-member method Class5|_#new#tearOff(core::int field) → self::Class5 /* = core::int */
   return self::Class5|(field);
-static inline-class-member method Class6|_(dynamic field) → self::Class6 /* = core::int */ {
+static inline-class-member method Class6|_(core::int field) → self::Class6 /* = core::int */ {
   lowered final self::Class6 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class6|_#_#tearOff(dynamic field) → self::Class6 /* = core::int */
+static inline-class-member method Class6|_#_#tearOff(core::int field) → self::Class6 /* = core::int */
   return self::Class6|_(field);
 static inline-class-member method Class6|(core::int field) → self::Class6 /* = core::int */ {
   lowered final self::Class6 /* = core::int */ #this = field;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.expect
index 16f3480..26155a4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.expect
@@ -51,11 +51,11 @@
   constructor • = self::Class6|;
   tearoff • = self::Class6|_#new#tearOff;
 }
-static inline-class-member method Class1|_(dynamic field) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|_(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class1|_#_#tearOff(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#_#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|_(field);
 static inline-class-member method Class1|(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
@@ -63,11 +63,11 @@
 }
 static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|(field);
-static inline-class-member method Class2|_(dynamic field) → self::Class2 /* = core::int */ {
+static inline-class-member method Class2|_(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class2|_#_#tearOff(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_#_#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|_(field);
 static inline-class-member method Class2|(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
@@ -75,17 +75,17 @@
 }
 static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|(field);
-static inline-class-member method Class3|_(dynamic field) → self::Class3 /* = core::int */ {
+static inline-class-member method Class3|_(core::int field) → self::Class3 /* = core::int */ {
   lowered final self::Class3 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class3|_#_#tearOff(dynamic field) → self::Class3 /* = core::int */
+static inline-class-member method Class3|_#_#tearOff(core::int field) → self::Class3 /* = core::int */
   return self::Class3|_(field);
-static inline-class-member method Class4|_(dynamic field) → self::Class4 /* = core::int */ {
+static inline-class-member method Class4|_(core::int field) → self::Class4 /* = core::int */ {
   lowered final self::Class4 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class4|_#_#tearOff(dynamic field) → self::Class4 /* = core::int */
+static inline-class-member method Class4|_#_#tearOff(core::int field) → self::Class4 /* = core::int */
   return self::Class4|_(field);
 static inline-class-member method Class4|(core::int field, dynamic nonexisting) → self::Class4 /* = core::int */ {
   lowered final self::Class4 /* = core::int */ #this = field;
@@ -96,11 +96,11 @@
 }
 static inline-class-member method Class4|_#new#tearOff(core::int field, dynamic nonexisting) → self::Class4 /* = core::int */
   return self::Class4|(field, nonexisting);
-static inline-class-member method Class5|_(dynamic field) → self::Class5 /* = core::int */ {
+static inline-class-member method Class5|_(core::int field) → self::Class5 /* = core::int */ {
   lowered final self::Class5 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class5|_#_#tearOff(dynamic field) → self::Class5 /* = core::int */
+static inline-class-member method Class5|_#_#tearOff(core::int field) → self::Class5 /* = core::int */
   return self::Class5|_(field);
 static inline-class-member method Class5|(core::int field) → self::Class5 /* = core::int */ {
   lowered final self::Class5 /* = core::int */ #this = field;
@@ -111,11 +111,11 @@
 }
 static inline-class-member method Class5|_#new#tearOff(core::int field) → self::Class5 /* = core::int */
   return self::Class5|(field);
-static inline-class-member method Class6|_(dynamic field) → self::Class6 /* = core::int */ {
+static inline-class-member method Class6|_(core::int field) → self::Class6 /* = core::int */ {
   lowered final self::Class6 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class6|_#_#tearOff(dynamic field) → self::Class6 /* = core::int */
+static inline-class-member method Class6|_#_#tearOff(core::int field) → self::Class6 /* = core::int */
   return self::Class6|_(field);
 static inline-class-member method Class6|(core::int field) → self::Class6 /* = core::int */ {
   lowered final self::Class6 /* = core::int */ #this = field;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.modular.expect
index 16f3480..26155a4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.modular.expect
@@ -51,11 +51,11 @@
   constructor • = self::Class6|;
   tearoff • = self::Class6|_#new#tearOff;
 }
-static inline-class-member method Class1|_(dynamic field) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|_(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class1|_#_#tearOff(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#_#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|_(field);
 static inline-class-member method Class1|(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
@@ -63,11 +63,11 @@
 }
 static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|(field);
-static inline-class-member method Class2|_(dynamic field) → self::Class2 /* = core::int */ {
+static inline-class-member method Class2|_(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class2|_#_#tearOff(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_#_#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|_(field);
 static inline-class-member method Class2|(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
@@ -75,17 +75,17 @@
 }
 static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|(field);
-static inline-class-member method Class3|_(dynamic field) → self::Class3 /* = core::int */ {
+static inline-class-member method Class3|_(core::int field) → self::Class3 /* = core::int */ {
   lowered final self::Class3 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class3|_#_#tearOff(dynamic field) → self::Class3 /* = core::int */
+static inline-class-member method Class3|_#_#tearOff(core::int field) → self::Class3 /* = core::int */
   return self::Class3|_(field);
-static inline-class-member method Class4|_(dynamic field) → self::Class4 /* = core::int */ {
+static inline-class-member method Class4|_(core::int field) → self::Class4 /* = core::int */ {
   lowered final self::Class4 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class4|_#_#tearOff(dynamic field) → self::Class4 /* = core::int */
+static inline-class-member method Class4|_#_#tearOff(core::int field) → self::Class4 /* = core::int */
   return self::Class4|_(field);
 static inline-class-member method Class4|(core::int field, dynamic nonexisting) → self::Class4 /* = core::int */ {
   lowered final self::Class4 /* = core::int */ #this = field;
@@ -96,11 +96,11 @@
 }
 static inline-class-member method Class4|_#new#tearOff(core::int field, dynamic nonexisting) → self::Class4 /* = core::int */
   return self::Class4|(field, nonexisting);
-static inline-class-member method Class5|_(dynamic field) → self::Class5 /* = core::int */ {
+static inline-class-member method Class5|_(core::int field) → self::Class5 /* = core::int */ {
   lowered final self::Class5 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class5|_#_#tearOff(dynamic field) → self::Class5 /* = core::int */
+static inline-class-member method Class5|_#_#tearOff(core::int field) → self::Class5 /* = core::int */
   return self::Class5|_(field);
 static inline-class-member method Class5|(core::int field) → self::Class5 /* = core::int */ {
   lowered final self::Class5 /* = core::int */ #this = field;
@@ -111,11 +111,11 @@
 }
 static inline-class-member method Class5|_#new#tearOff(core::int field) → self::Class5 /* = core::int */
   return self::Class5|(field);
-static inline-class-member method Class6|_(dynamic field) → self::Class6 /* = core::int */ {
+static inline-class-member method Class6|_(core::int field) → self::Class6 /* = core::int */ {
   lowered final self::Class6 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class6|_#_#tearOff(dynamic field) → self::Class6 /* = core::int */
+static inline-class-member method Class6|_#_#tearOff(core::int field) → self::Class6 /* = core::int */
   return self::Class6|_(field);
 static inline-class-member method Class6|(core::int field) → self::Class6 /* = core::int */ {
   lowered final self::Class6 /* = core::int */ #this = field;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.outline.expect
index 54f9abb..7095023 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.outline.expect
@@ -36,45 +36,45 @@
   constructor • = self::Class6|;
   tearoff • = self::Class6|_#new#tearOff;
 }
-static inline-class-member method Class1|_(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_(core::int field) → self::Class1 /* = core::int */
   ;
-static inline-class-member method Class1|_#_#tearOff(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#_#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|_(field);
 static inline-class-member method Class1|(core::int field) → self::Class1 /* = core::int */
   ;
 static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|(field);
-static inline-class-member method Class2|_(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_(core::int field) → self::Class2 /* = core::int */
   ;
-static inline-class-member method Class2|_#_#tearOff(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_#_#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|_(field);
 static inline-class-member method Class2|(core::int field) → self::Class2 /* = core::int */
   ;
 static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|(field);
-static inline-class-member method Class3|_(dynamic field) → self::Class3 /* = core::int */
+static inline-class-member method Class3|_(core::int field) → self::Class3 /* = core::int */
   ;
-static inline-class-member method Class3|_#_#tearOff(dynamic field) → self::Class3 /* = core::int */
+static inline-class-member method Class3|_#_#tearOff(core::int field) → self::Class3 /* = core::int */
   return self::Class3|_(field);
-static inline-class-member method Class4|_(dynamic field) → self::Class4 /* = core::int */
+static inline-class-member method Class4|_(core::int field) → self::Class4 /* = core::int */
   ;
-static inline-class-member method Class4|_#_#tearOff(dynamic field) → self::Class4 /* = core::int */
+static inline-class-member method Class4|_#_#tearOff(core::int field) → self::Class4 /* = core::int */
   return self::Class4|_(field);
 static inline-class-member method Class4|(core::int field, dynamic nonexisting) → self::Class4 /* = core::int */
   ;
 static inline-class-member method Class4|_#new#tearOff(core::int field, dynamic nonexisting) → self::Class4 /* = core::int */
   return self::Class4|(field, nonexisting);
-static inline-class-member method Class5|_(dynamic field) → self::Class5 /* = core::int */
+static inline-class-member method Class5|_(core::int field) → self::Class5 /* = core::int */
   ;
-static inline-class-member method Class5|_#_#tearOff(dynamic field) → self::Class5 /* = core::int */
+static inline-class-member method Class5|_#_#tearOff(core::int field) → self::Class5 /* = core::int */
   return self::Class5|_(field);
 static inline-class-member method Class5|(core::int field) → self::Class5 /* = core::int */
   ;
 static inline-class-member method Class5|_#new#tearOff(core::int field) → self::Class5 /* = core::int */
   return self::Class5|(field);
-static inline-class-member method Class6|_(dynamic field) → self::Class6 /* = core::int */
+static inline-class-member method Class6|_(core::int field) → self::Class6 /* = core::int */
   ;
-static inline-class-member method Class6|_#_#tearOff(dynamic field) → self::Class6 /* = core::int */
+static inline-class-member method Class6|_#_#tearOff(core::int field) → self::Class6 /* = core::int */
   return self::Class6|_(field);
 static inline-class-member method Class6|(core::int field) → self::Class6 /* = core::int */
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.transformed.expect
index 16f3480..26155a4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/initializers.dart.weak.transformed.expect
@@ -51,11 +51,11 @@
   constructor • = self::Class6|;
   tearoff • = self::Class6|_#new#tearOff;
 }
-static inline-class-member method Class1|_(dynamic field) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|_(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class1|_#_#tearOff(dynamic field) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#_#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|_(field);
 static inline-class-member method Class1|(core::int field) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = field;
@@ -63,11 +63,11 @@
 }
 static inline-class-member method Class1|_#new#tearOff(core::int field) → self::Class1 /* = core::int */
   return self::Class1|(field);
-static inline-class-member method Class2|_(dynamic field) → self::Class2 /* = core::int */ {
+static inline-class-member method Class2|_(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class2|_#_#tearOff(dynamic field) → self::Class2 /* = core::int */
+static inline-class-member method Class2|_#_#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|_(field);
 static inline-class-member method Class2|(core::int field) → self::Class2 /* = core::int */ {
   lowered final self::Class2 /* = core::int */ #this = field;
@@ -75,17 +75,17 @@
 }
 static inline-class-member method Class2|_#new#tearOff(core::int field) → self::Class2 /* = core::int */
   return self::Class2|(field);
-static inline-class-member method Class3|_(dynamic field) → self::Class3 /* = core::int */ {
+static inline-class-member method Class3|_(core::int field) → self::Class3 /* = core::int */ {
   lowered final self::Class3 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class3|_#_#tearOff(dynamic field) → self::Class3 /* = core::int */
+static inline-class-member method Class3|_#_#tearOff(core::int field) → self::Class3 /* = core::int */
   return self::Class3|_(field);
-static inline-class-member method Class4|_(dynamic field) → self::Class4 /* = core::int */ {
+static inline-class-member method Class4|_(core::int field) → self::Class4 /* = core::int */ {
   lowered final self::Class4 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class4|_#_#tearOff(dynamic field) → self::Class4 /* = core::int */
+static inline-class-member method Class4|_#_#tearOff(core::int field) → self::Class4 /* = core::int */
   return self::Class4|_(field);
 static inline-class-member method Class4|(core::int field, dynamic nonexisting) → self::Class4 /* = core::int */ {
   lowered final self::Class4 /* = core::int */ #this = field;
@@ -96,11 +96,11 @@
 }
 static inline-class-member method Class4|_#new#tearOff(core::int field, dynamic nonexisting) → self::Class4 /* = core::int */
   return self::Class4|(field, nonexisting);
-static inline-class-member method Class5|_(dynamic field) → self::Class5 /* = core::int */ {
+static inline-class-member method Class5|_(core::int field) → self::Class5 /* = core::int */ {
   lowered final self::Class5 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class5|_#_#tearOff(dynamic field) → self::Class5 /* = core::int */
+static inline-class-member method Class5|_#_#tearOff(core::int field) → self::Class5 /* = core::int */
   return self::Class5|_(field);
 static inline-class-member method Class5|(core::int field) → self::Class5 /* = core::int */ {
   lowered final self::Class5 /* = core::int */ #this = field;
@@ -111,11 +111,11 @@
 }
 static inline-class-member method Class5|_#new#tearOff(core::int field) → self::Class5 /* = core::int */
   return self::Class5|(field);
-static inline-class-member method Class6|_(dynamic field) → self::Class6 /* = core::int */ {
+static inline-class-member method Class6|_(core::int field) → self::Class6 /* = core::int */ {
   lowered final self::Class6 /* = core::int */ #this = field;
   return #this;
 }
-static inline-class-member method Class6|_#_#tearOff(dynamic field) → self::Class6 /* = core::int */
+static inline-class-member method Class6|_#_#tearOff(core::int field) → self::Class6 /* = core::int */
   return self::Class6|_(field);
 static inline-class-member method Class6|(core::int field) → self::Class6 /* = core::int */ {
   lowered final self::Class6 /* = core::int */ #this = field;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.expect
index 75c1dce..3de6f0e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.expect
@@ -12,16 +12,16 @@
   constructor • = self::Class3|;
   tearoff • = self::Class3|_#new#tearOff;
 }
-static inline-class-member method Class1|(dynamic it) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int it) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int it) → self::Class1 /* = core::int */
   return self::Class1|(it);
-static inline-class-member method Class3|<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ {
+static inline-class-member method Class3|<T extends core::Object? = dynamic>(core::List<self::Class3|::T%> it) → self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ {
   lowered final self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|_#new#tearOff::T%> /* = core::List<self::Class3|_#new#tearOff::T%> */
+static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::Class3|_#new#tearOff::T%> it) → self::Class3<self::Class3|_#new#tearOff::T%> /* = core::List<self::Class3|_#new#tearOff::T%> */
   return self::Class3|<self::Class3|_#new#tearOff::T%>(it);
 static method method(self::Class1 /* = core::int */ c1, self::Class3<core::int> /* = core::List<core::int> */ c3) → dynamic {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.transformed.expect
index 75c1dce..3de6f0e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.strong.transformed.expect
@@ -12,16 +12,16 @@
   constructor • = self::Class3|;
   tearoff • = self::Class3|_#new#tearOff;
 }
-static inline-class-member method Class1|(dynamic it) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int it) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int it) → self::Class1 /* = core::int */
   return self::Class1|(it);
-static inline-class-member method Class3|<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ {
+static inline-class-member method Class3|<T extends core::Object? = dynamic>(core::List<self::Class3|::T%> it) → self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ {
   lowered final self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|_#new#tearOff::T%> /* = core::List<self::Class3|_#new#tearOff::T%> */
+static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::Class3|_#new#tearOff::T%> it) → self::Class3<self::Class3|_#new#tearOff::T%> /* = core::List<self::Class3|_#new#tearOff::T%> */
   return self::Class3|<self::Class3|_#new#tearOff::T%>(it);
 static method method(self::Class1 /* = core::int */ c1, self::Class3<core::int> /* = core::List<core::int> */ c3) → dynamic {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.expect
index 75c1dce..3de6f0e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.expect
@@ -12,16 +12,16 @@
   constructor • = self::Class3|;
   tearoff • = self::Class3|_#new#tearOff;
 }
-static inline-class-member method Class1|(dynamic it) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int it) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int it) → self::Class1 /* = core::int */
   return self::Class1|(it);
-static inline-class-member method Class3|<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ {
+static inline-class-member method Class3|<T extends core::Object? = dynamic>(core::List<self::Class3|::T%> it) → self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ {
   lowered final self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|_#new#tearOff::T%> /* = core::List<self::Class3|_#new#tearOff::T%> */
+static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::Class3|_#new#tearOff::T%> it) → self::Class3<self::Class3|_#new#tearOff::T%> /* = core::List<self::Class3|_#new#tearOff::T%> */
   return self::Class3|<self::Class3|_#new#tearOff::T%>(it);
 static method method(self::Class1 /* = core::int */ c1, self::Class3<core::int> /* = core::List<core::int> */ c3) → dynamic {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.modular.expect
index 75c1dce..3de6f0e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.modular.expect
@@ -12,16 +12,16 @@
   constructor • = self::Class3|;
   tearoff • = self::Class3|_#new#tearOff;
 }
-static inline-class-member method Class1|(dynamic it) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int it) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int it) → self::Class1 /* = core::int */
   return self::Class1|(it);
-static inline-class-member method Class3|<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ {
+static inline-class-member method Class3|<T extends core::Object? = dynamic>(core::List<self::Class3|::T%> it) → self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ {
   lowered final self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|_#new#tearOff::T%> /* = core::List<self::Class3|_#new#tearOff::T%> */
+static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::Class3|_#new#tearOff::T%> it) → self::Class3<self::Class3|_#new#tearOff::T%> /* = core::List<self::Class3|_#new#tearOff::T%> */
   return self::Class3|<self::Class3|_#new#tearOff::T%>(it);
 static method method(self::Class1 /* = core::int */ c1, self::Class3<core::int> /* = core::List<core::int> */ c3) → dynamic {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.outline.expect
index d05e60b..333265e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.outline.expect
@@ -12,13 +12,13 @@
   constructor • = self::Class3|;
   tearoff • = self::Class3|_#new#tearOff;
 }
-static inline-class-member method Class1|(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|(core::int it) → self::Class1 /* = core::int */
   ;
-static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int it) → self::Class1 /* = core::int */
   return self::Class1|(it);
-static inline-class-member method Class3|<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */
+static inline-class-member method Class3|<T extends core::Object? = dynamic>(core::List<self::Class3|::T%> it) → self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */
   ;
-static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|_#new#tearOff::T%> /* = core::List<self::Class3|_#new#tearOff::T%> */
+static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::Class3|_#new#tearOff::T%> it) → self::Class3<self::Class3|_#new#tearOff::T%> /* = core::List<self::Class3|_#new#tearOff::T%> */
   return self::Class3|<self::Class3|_#new#tearOff::T%>(it);
 static method method(self::Class1 /* = core::int */ c1, self::Class3<core::int> /* = core::List<core::int> */ c3) → dynamic
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.transformed.expect
index 75c1dce..3de6f0e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/inline_class_declaration.dart.weak.transformed.expect
@@ -12,16 +12,16 @@
   constructor • = self::Class3|;
   tearoff • = self::Class3|_#new#tearOff;
 }
-static inline-class-member method Class1|(dynamic it) → self::Class1 /* = core::int */ {
+static inline-class-member method Class1|(core::int it) → self::Class1 /* = core::int */ {
   lowered final self::Class1 /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class1|_#new#tearOff(dynamic it) → self::Class1 /* = core::int */
+static inline-class-member method Class1|_#new#tearOff(core::int it) → self::Class1 /* = core::int */
   return self::Class1|(it);
-static inline-class-member method Class3|<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ {
+static inline-class-member method Class3|<T extends core::Object? = dynamic>(core::List<self::Class3|::T%> it) → self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ {
   lowered final self::Class3<self::Class3|::T%> /* = core::List<self::Class3|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Class3<self::Class3|_#new#tearOff::T%> /* = core::List<self::Class3|_#new#tearOff::T%> */
+static inline-class-member method Class3|_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::Class3|_#new#tearOff::T%> it) → self::Class3<self::Class3|_#new#tearOff::T%> /* = core::List<self::Class3|_#new#tearOff::T%> */
   return self::Class3|<self::Class3|_#new#tearOff::T%>(it);
 static method method(self::Class1 /* = core::int */ c1, self::Class3<core::int> /* = core::List<core::int> */ c3) → dynamic {}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.expect
index f6aefff..7ab0ec4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.expect
@@ -6,11 +6,11 @@
   constructor • = self::I|;
   tearoff • = self::I|_#new#tearOff;
 }
-static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ {
+static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::I|::X% value) → self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ {
   lowered final self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ #this = value;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%> /* = self::I|_#new#tearOff::X% */
+static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::I|_#new#tearOff::X% value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%> /* = self::I|_#new#tearOff::X% */
   return self::I|<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>(value);
 static method f(self::I<core::int, core::String> /* = core::int */ i) → void {}
 static method main() → void {
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.transformed.expect
index f6aefff..7ab0ec4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.strong.transformed.expect
@@ -6,11 +6,11 @@
   constructor • = self::I|;
   tearoff • = self::I|_#new#tearOff;
 }
-static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ {
+static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::I|::X% value) → self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ {
   lowered final self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ #this = value;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%> /* = self::I|_#new#tearOff::X% */
+static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::I|_#new#tearOff::X% value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%> /* = self::I|_#new#tearOff::X% */
   return self::I|<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>(value);
 static method f(self::I<core::int, core::String> /* = core::int */ i) → void {}
 static method main() → void {
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.expect
index f6aefff..7ab0ec4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.expect
@@ -6,11 +6,11 @@
   constructor • = self::I|;
   tearoff • = self::I|_#new#tearOff;
 }
-static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ {
+static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::I|::X% value) → self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ {
   lowered final self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ #this = value;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%> /* = self::I|_#new#tearOff::X% */
+static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::I|_#new#tearOff::X% value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%> /* = self::I|_#new#tearOff::X% */
   return self::I|<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>(value);
 static method f(self::I<core::int, core::String> /* = core::int */ i) → void {}
 static method main() → void {
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.modular.expect
index f6aefff..7ab0ec4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.modular.expect
@@ -6,11 +6,11 @@
   constructor • = self::I|;
   tearoff • = self::I|_#new#tearOff;
 }
-static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ {
+static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::I|::X% value) → self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ {
   lowered final self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ #this = value;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%> /* = self::I|_#new#tearOff::X% */
+static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::I|_#new#tearOff::X% value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%> /* = self::I|_#new#tearOff::X% */
   return self::I|<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>(value);
 static method f(self::I<core::int, core::String> /* = core::int */ i) → void {}
 static method main() → void {
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.outline.expect
index 6c72a28..f719b03 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.outline.expect
@@ -6,9 +6,9 @@
   constructor • = self::I|;
   tearoff • = self::I|_#new#tearOff;
 }
-static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */
+static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::I|::X% value) → self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */
   ;
-static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%> /* = self::I|_#new#tearOff::X% */
+static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::I|_#new#tearOff::X% value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%> /* = self::I|_#new#tearOff::X% */
   return self::I|<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>(value);
 static method f(self::I<core::int, core::String> /* = core::int */ i) → void
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.transformed.expect
index f6aefff..7ab0ec4 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51146.dart.weak.transformed.expect
@@ -6,11 +6,11 @@
   constructor • = self::I|;
   tearoff • = self::I|_#new#tearOff;
 }
-static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ {
+static inline-class-member method I|<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::I|::X% value) → self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ {
   lowered final self::I<self::I|::X%, self::I|::Y%> /* = self::I|::X% */ #this = value;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(dynamic value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%> /* = self::I|_#new#tearOff::X% */
+static inline-class-member method I|_#new#tearOff<X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::I|_#new#tearOff::X% value) → self::I<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%> /* = self::I|_#new#tearOff::X% */
   return self::I|<self::I|_#new#tearOff::X%, self::I|_#new#tearOff::Y%>(value);
 static method f(self::I<core::int, core::String> /* = core::int */ i) → void {}
 static method main() → void {
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.expect
index dce45a1..879c6b9 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.expect
@@ -20,31 +20,31 @@
   static factory • = self::K|;
   static tearoff • = self::K|_#new#tearOff;
 }
-static inline-class-member method I|_(dynamic i) → self::I /* = core::int */ {
+static inline-class-member method I|_(core::int i) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method I|_#_#tearOff(dynamic i) → self::I /* = core::int */
+static inline-class-member method I|_#_#tearOff(core::int i) → self::I /* = core::int */
   return self::I|_(i);
 static inline-class-member method I|() → self::I /* = core::int */
   return 0 as self::I /* = core::int */;
 static inline-class-member method I|_#new#tearOff() → self::I /* = core::int */
   return self::I|();
-static inline-class-member method J|_(dynamic i) → self::J /* = core::int */ {
+static inline-class-member method J|_(core::int i) → self::J /* = core::int */ {
   lowered final self::J /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method J|_#_#tearOff(dynamic i) → self::J /* = core::int */
+static inline-class-member method J|_#_#tearOff(core::int i) → self::J /* = core::int */
   return self::J|_(i);
 static inline-class-member method J|(core::int i) → self::J /* = core::int */
   return self::J|_(i);
 static inline-class-member method J|_#new#tearOff(core::int i) → self::J /* = core::int */
   return self::J|(i);
-static inline-class-member method K|_<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_::T%> /* = self::K|_::T% */ {
+static inline-class-member method K|_<T extends core::Object? = dynamic>(self::K|_::T% i) → self::K<self::K|_::T%> /* = self::K|_::T% */ {
   lowered final self::K<self::K|_::T%> /* = self::K|_::T% */ #this = i;
   return #this;
 }
-static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_#_#tearOff::T%> /* = self::K|_#_#tearOff::T% */
+static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(self::K|_#_#tearOff::T% i) → self::K<self::K|_#_#tearOff::T%> /* = self::K|_#_#tearOff::T% */
   return self::K|_<self::K|_#_#tearOff::T%>(i);
 static inline-class-member method K|<T extends core::Object? = dynamic>(self::K|::T% i) → self::K<self::K|::T%> /* = self::K|::T% */
   return self::K|_<self::K|::T%>(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.transformed.expect
index dce45a1..879c6b9 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.strong.transformed.expect
@@ -20,31 +20,31 @@
   static factory • = self::K|;
   static tearoff • = self::K|_#new#tearOff;
 }
-static inline-class-member method I|_(dynamic i) → self::I /* = core::int */ {
+static inline-class-member method I|_(core::int i) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method I|_#_#tearOff(dynamic i) → self::I /* = core::int */
+static inline-class-member method I|_#_#tearOff(core::int i) → self::I /* = core::int */
   return self::I|_(i);
 static inline-class-member method I|() → self::I /* = core::int */
   return 0 as self::I /* = core::int */;
 static inline-class-member method I|_#new#tearOff() → self::I /* = core::int */
   return self::I|();
-static inline-class-member method J|_(dynamic i) → self::J /* = core::int */ {
+static inline-class-member method J|_(core::int i) → self::J /* = core::int */ {
   lowered final self::J /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method J|_#_#tearOff(dynamic i) → self::J /* = core::int */
+static inline-class-member method J|_#_#tearOff(core::int i) → self::J /* = core::int */
   return self::J|_(i);
 static inline-class-member method J|(core::int i) → self::J /* = core::int */
   return self::J|_(i);
 static inline-class-member method J|_#new#tearOff(core::int i) → self::J /* = core::int */
   return self::J|(i);
-static inline-class-member method K|_<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_::T%> /* = self::K|_::T% */ {
+static inline-class-member method K|_<T extends core::Object? = dynamic>(self::K|_::T% i) → self::K<self::K|_::T%> /* = self::K|_::T% */ {
   lowered final self::K<self::K|_::T%> /* = self::K|_::T% */ #this = i;
   return #this;
 }
-static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_#_#tearOff::T%> /* = self::K|_#_#tearOff::T% */
+static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(self::K|_#_#tearOff::T% i) → self::K<self::K|_#_#tearOff::T%> /* = self::K|_#_#tearOff::T% */
   return self::K|_<self::K|_#_#tearOff::T%>(i);
 static inline-class-member method K|<T extends core::Object? = dynamic>(self::K|::T% i) → self::K<self::K|::T%> /* = self::K|::T% */
   return self::K|_<self::K|::T%>(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.expect
index ee18017..fb65f5e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.expect
@@ -20,31 +20,31 @@
   static factory • = self::K|;
   static tearoff • = self::K|_#new#tearOff;
 }
-static inline-class-member method I|_(dynamic i) → self::I /* = core::int */ {
+static inline-class-member method I|_(core::int i) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method I|_#_#tearOff(dynamic i) → self::I /* = core::int */
+static inline-class-member method I|_#_#tearOff(core::int i) → self::I /* = core::int */
   return self::I|_(i);
 static inline-class-member method I|() → self::I /* = core::int */
   return 0 as self::I /* = core::int */;
 static inline-class-member method I|_#new#tearOff() → self::I /* = core::int */
   return self::I|();
-static inline-class-member method J|_(dynamic i) → self::J /* = core::int */ {
+static inline-class-member method J|_(core::int i) → self::J /* = core::int */ {
   lowered final self::J /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method J|_#_#tearOff(dynamic i) → self::J /* = core::int */
+static inline-class-member method J|_#_#tearOff(core::int i) → self::J /* = core::int */
   return self::J|_(i);
 static inline-class-member method J|(core::int i) → self::J /* = core::int */
   return self::J|_(i);
 static inline-class-member method J|_#new#tearOff(core::int i) → self::J /* = core::int */
   return self::J|(i);
-static inline-class-member method K|_<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_::T%> /* = self::K|_::T% */ {
+static inline-class-member method K|_<T extends core::Object? = dynamic>(self::K|_::T% i) → self::K<self::K|_::T%> /* = self::K|_::T% */ {
   lowered final self::K<self::K|_::T%> /* = self::K|_::T% */ #this = i;
   return #this;
 }
-static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_#_#tearOff::T%> /* = self::K|_#_#tearOff::T% */
+static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(self::K|_#_#tearOff::T% i) → self::K<self::K|_#_#tearOff::T%> /* = self::K|_#_#tearOff::T% */
   return self::K|_<self::K|_#_#tearOff::T%>(i);
 static inline-class-member method K|<T extends core::Object? = dynamic>(self::K|::T% i) → self::K<self::K|::T%> /* = self::K|::T% */
   return self::K|_<self::K|::T%>(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.modular.expect
index ee18017..fb65f5e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.modular.expect
@@ -20,31 +20,31 @@
   static factory • = self::K|;
   static tearoff • = self::K|_#new#tearOff;
 }
-static inline-class-member method I|_(dynamic i) → self::I /* = core::int */ {
+static inline-class-member method I|_(core::int i) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method I|_#_#tearOff(dynamic i) → self::I /* = core::int */
+static inline-class-member method I|_#_#tearOff(core::int i) → self::I /* = core::int */
   return self::I|_(i);
 static inline-class-member method I|() → self::I /* = core::int */
   return 0 as self::I /* = core::int */;
 static inline-class-member method I|_#new#tearOff() → self::I /* = core::int */
   return self::I|();
-static inline-class-member method J|_(dynamic i) → self::J /* = core::int */ {
+static inline-class-member method J|_(core::int i) → self::J /* = core::int */ {
   lowered final self::J /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method J|_#_#tearOff(dynamic i) → self::J /* = core::int */
+static inline-class-member method J|_#_#tearOff(core::int i) → self::J /* = core::int */
   return self::J|_(i);
 static inline-class-member method J|(core::int i) → self::J /* = core::int */
   return self::J|_(i);
 static inline-class-member method J|_#new#tearOff(core::int i) → self::J /* = core::int */
   return self::J|(i);
-static inline-class-member method K|_<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_::T%> /* = self::K|_::T% */ {
+static inline-class-member method K|_<T extends core::Object? = dynamic>(self::K|_::T% i) → self::K<self::K|_::T%> /* = self::K|_::T% */ {
   lowered final self::K<self::K|_::T%> /* = self::K|_::T% */ #this = i;
   return #this;
 }
-static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_#_#tearOff::T%> /* = self::K|_#_#tearOff::T% */
+static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(self::K|_#_#tearOff::T% i) → self::K<self::K|_#_#tearOff::T%> /* = self::K|_#_#tearOff::T% */
   return self::K|_<self::K|_#_#tearOff::T%>(i);
 static inline-class-member method K|<T extends core::Object? = dynamic>(self::K|::T% i) → self::K<self::K|::T%> /* = self::K|::T% */
   return self::K|_<self::K|::T%>(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.outline.expect
index f31f0ec..a6f7724 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.outline.expect
@@ -20,25 +20,25 @@
   static factory • = self::K|;
   static tearoff • = self::K|_#new#tearOff;
 }
-static inline-class-member method I|_(dynamic i) → self::I /* = core::int */
+static inline-class-member method I|_(core::int i) → self::I /* = core::int */
   ;
-static inline-class-member method I|_#_#tearOff(dynamic i) → self::I /* = core::int */
+static inline-class-member method I|_#_#tearOff(core::int i) → self::I /* = core::int */
   return self::I|_(i);
 static inline-class-member method I|() → self::I /* = core::int */
   ;
 static inline-class-member method I|_#new#tearOff() → self::I /* = core::int */
   return self::I|();
-static inline-class-member method J|_(dynamic i) → self::J /* = core::int */
+static inline-class-member method J|_(core::int i) → self::J /* = core::int */
   ;
-static inline-class-member method J|_#_#tearOff(dynamic i) → self::J /* = core::int */
+static inline-class-member method J|_#_#tearOff(core::int i) → self::J /* = core::int */
   return self::J|_(i);
 static inline-class-member method J|(core::int i) → self::J /* = core::int */
   ;
 static inline-class-member method J|_#new#tearOff(core::int i) → self::J /* = core::int */
   return self::J|(i);
-static inline-class-member method K|_<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_::T%> /* = self::K|_::T% */
+static inline-class-member method K|_<T extends core::Object? = dynamic>(self::K|_::T% i) → self::K<self::K|_::T%> /* = self::K|_::T% */
   ;
-static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_#_#tearOff::T%> /* = self::K|_#_#tearOff::T% */
+static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(self::K|_#_#tearOff::T% i) → self::K<self::K|_#_#tearOff::T%> /* = self::K|_#_#tearOff::T% */
   return self::K|_<self::K|_#_#tearOff::T%>(i);
 static inline-class-member method K|<T extends core::Object? = dynamic>(self::K|::T% i) → self::K<self::K|::T%> /* = self::K|::T% */
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.transformed.expect
index ee18017..fb65f5e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51285.dart.weak.transformed.expect
@@ -20,31 +20,31 @@
   static factory • = self::K|;
   static tearoff • = self::K|_#new#tearOff;
 }
-static inline-class-member method I|_(dynamic i) → self::I /* = core::int */ {
+static inline-class-member method I|_(core::int i) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method I|_#_#tearOff(dynamic i) → self::I /* = core::int */
+static inline-class-member method I|_#_#tearOff(core::int i) → self::I /* = core::int */
   return self::I|_(i);
 static inline-class-member method I|() → self::I /* = core::int */
   return 0 as self::I /* = core::int */;
 static inline-class-member method I|_#new#tearOff() → self::I /* = core::int */
   return self::I|();
-static inline-class-member method J|_(dynamic i) → self::J /* = core::int */ {
+static inline-class-member method J|_(core::int i) → self::J /* = core::int */ {
   lowered final self::J /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method J|_#_#tearOff(dynamic i) → self::J /* = core::int */
+static inline-class-member method J|_#_#tearOff(core::int i) → self::J /* = core::int */
   return self::J|_(i);
 static inline-class-member method J|(core::int i) → self::J /* = core::int */
   return self::J|_(i);
 static inline-class-member method J|_#new#tearOff(core::int i) → self::J /* = core::int */
   return self::J|(i);
-static inline-class-member method K|_<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_::T%> /* = self::K|_::T% */ {
+static inline-class-member method K|_<T extends core::Object? = dynamic>(self::K|_::T% i) → self::K<self::K|_::T%> /* = self::K|_::T% */ {
   lowered final self::K<self::K|_::T%> /* = self::K|_::T% */ #this = i;
   return #this;
 }
-static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(dynamic i) → self::K<self::K|_#_#tearOff::T%> /* = self::K|_#_#tearOff::T% */
+static inline-class-member method K|_#_#tearOff<T extends core::Object? = dynamic>(self::K|_#_#tearOff::T% i) → self::K<self::K|_#_#tearOff::T%> /* = self::K|_#_#tearOff::T% */
   return self::K|_<self::K|_#_#tearOff::T%>(i);
 static inline-class-member method K|<T extends core::Object? = dynamic>(self::K|::T% i) → self::K<self::K|::T%> /* = self::K|::T% */
   return self::K|_<self::K|::T%>(i);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.expect
index 396539a..1867734 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.expect
@@ -8,11 +8,11 @@
   constructor • = self::I|;
   tearoff • = self::I|_#new#tearOff;
 }
-static inline-class-member method I|(dynamic _i) → self::I /* = core::int */ {
+static inline-class-member method I|(core::int _i) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = _i;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff(dynamic _i) → self::I /* = core::int */
+static inline-class-member method I|_#new#tearOff(core::int _i) → self::I /* = core::int */
   return self::I|(_i);
 static inline-class-member method I|get#i(lowered final self::I /* = core::int */ #this) → core::int
   return 0;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.transformed.expect
index 396539a..1867734 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.strong.transformed.expect
@@ -8,11 +8,11 @@
   constructor • = self::I|;
   tearoff • = self::I|_#new#tearOff;
 }
-static inline-class-member method I|(dynamic _i) → self::I /* = core::int */ {
+static inline-class-member method I|(core::int _i) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = _i;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff(dynamic _i) → self::I /* = core::int */
+static inline-class-member method I|_#new#tearOff(core::int _i) → self::I /* = core::int */
   return self::I|(_i);
 static inline-class-member method I|get#i(lowered final self::I /* = core::int */ #this) → core::int
   return 0;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.expect
index 396539a..1867734 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.expect
@@ -8,11 +8,11 @@
   constructor • = self::I|;
   tearoff • = self::I|_#new#tearOff;
 }
-static inline-class-member method I|(dynamic _i) → self::I /* = core::int */ {
+static inline-class-member method I|(core::int _i) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = _i;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff(dynamic _i) → self::I /* = core::int */
+static inline-class-member method I|_#new#tearOff(core::int _i) → self::I /* = core::int */
   return self::I|(_i);
 static inline-class-member method I|get#i(lowered final self::I /* = core::int */ #this) → core::int
   return 0;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.modular.expect
index 396539a..1867734 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.modular.expect
@@ -8,11 +8,11 @@
   constructor • = self::I|;
   tearoff • = self::I|_#new#tearOff;
 }
-static inline-class-member method I|(dynamic _i) → self::I /* = core::int */ {
+static inline-class-member method I|(core::int _i) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = _i;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff(dynamic _i) → self::I /* = core::int */
+static inline-class-member method I|_#new#tearOff(core::int _i) → self::I /* = core::int */
   return self::I|(_i);
 static inline-class-member method I|get#i(lowered final self::I /* = core::int */ #this) → core::int
   return 0;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.outline.expect
index 9165748..2dcf3cc 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.outline.expect
@@ -8,9 +8,9 @@
   constructor • = self::I|;
   tearoff • = self::I|_#new#tearOff;
 }
-static inline-class-member method I|(dynamic _i) → self::I /* = core::int */
+static inline-class-member method I|(core::int _i) → self::I /* = core::int */
   ;
-static inline-class-member method I|_#new#tearOff(dynamic _i) → self::I /* = core::int */
+static inline-class-member method I|_#new#tearOff(core::int _i) → self::I /* = core::int */
   return self::I|(_i);
 static inline-class-member method I|get#i(lowered final self::I /* = core::int */ #this) → core::int
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.transformed.expect
index 396539a..1867734 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51299.dart.weak.transformed.expect
@@ -8,11 +8,11 @@
   constructor • = self::I|;
   tearoff • = self::I|_#new#tearOff;
 }
-static inline-class-member method I|(dynamic _i) → self::I /* = core::int */ {
+static inline-class-member method I|(core::int _i) → self::I /* = core::int */ {
   lowered final self::I /* = core::int */ #this = _i;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff(dynamic _i) → self::I /* = core::int */
+static inline-class-member method I|_#new#tearOff(core::int _i) → self::I /* = core::int */
   return self::I|(_i);
 static inline-class-member method I|get#i(lowered final self::I /* = core::int */ #this) → core::int
   return 0;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.expect
index 08e5e31..e022a7a 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.expect
@@ -31,35 +31,35 @@
   constructor • = self::JSNumber|;
   tearoff • = self::JSNumber|_#new#tearOff;
 }
-static inline-class-member method JSAny|(dynamic value) → self::JSAny /* = core::Object */ {
+static inline-class-member method JSAny|(core::Object value) → self::JSAny /* = core::Object */ {
   lowered final self::JSAny /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSAny|_#new#tearOff(dynamic value) → self::JSAny /* = core::Object */
+static inline-class-member method JSAny|_#new#tearOff(core::Object value) → self::JSAny /* = core::Object */
   return self::JSAny|(value);
-static inline-class-member method JSObject|(dynamic value) → self::JSObject /* = core::Object */ {
+static inline-class-member method JSObject|(core::Object value) → self::JSObject /* = core::Object */ {
   lowered final self::JSObject /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSObject|_#new#tearOff(dynamic value) → self::JSObject /* = core::Object */
+static inline-class-member method JSObject|_#new#tearOff(core::Object value) → self::JSObject /* = core::Object */
   return self::JSObject|(value);
-static inline-class-member method JSArray|(dynamic value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ {
+static inline-class-member method JSArray|(core::List<self::JSAny? /* = core::Object? */> value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ {
   lowered final self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ #this = value;
   return #this;
 }
-static inline-class-member method JSArray|_#new#tearOff(dynamic value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
+static inline-class-member method JSArray|_#new#tearOff(core::List<self::JSAny? /* = core::Object? */> value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
   return self::JSArray|(value);
-static inline-class-member method JSExportedDartObject|(dynamic value) → self::JSExportedDartObject /* = core::Object */ {
+static inline-class-member method JSExportedDartObject|(core::Object value) → self::JSExportedDartObject /* = core::Object */ {
   lowered final self::JSExportedDartObject /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSExportedDartObject|_#new#tearOff(dynamic value) → self::JSExportedDartObject /* = core::Object */
+static inline-class-member method JSExportedDartObject|_#new#tearOff(core::Object value) → self::JSExportedDartObject /* = core::Object */
   return self::JSExportedDartObject|(value);
-static inline-class-member method JSNumber|(dynamic value) → self::JSNumber /* = core::double */ {
+static inline-class-member method JSNumber|(core::double value) → self::JSNumber /* = core::double */ {
   lowered final self::JSNumber /* = core::double */ #this = value;
   return #this;
 }
-static inline-class-member method JSNumber|_#new#tearOff(dynamic value) → self::JSNumber /* = core::double */
+static inline-class-member method JSNumber|_#new#tearOff(core::double value) → self::JSNumber /* = core::double */
   return self::JSNumber|(value);
 static extension-member method ObjectToJSExportedDartObject|get#toJS(lowered final core::Object #this) → self::JSExportedDartObject /* = core::Object */
   return self::JSExportedDartObject|(#this);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.transformed.expect
index e29d4e1..2fbb243 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.strong.transformed.expect
@@ -31,35 +31,35 @@
   constructor • = self::JSNumber|;
   tearoff • = self::JSNumber|_#new#tearOff;
 }
-static inline-class-member method JSAny|(dynamic value) → self::JSAny /* = core::Object */ {
+static inline-class-member method JSAny|(core::Object value) → self::JSAny /* = core::Object */ {
   lowered final self::JSAny /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSAny|_#new#tearOff(dynamic value) → self::JSAny /* = core::Object */
+static inline-class-member method JSAny|_#new#tearOff(core::Object value) → self::JSAny /* = core::Object */
   return self::JSAny|(value);
-static inline-class-member method JSObject|(dynamic value) → self::JSObject /* = core::Object */ {
+static inline-class-member method JSObject|(core::Object value) → self::JSObject /* = core::Object */ {
   lowered final self::JSObject /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSObject|_#new#tearOff(dynamic value) → self::JSObject /* = core::Object */
+static inline-class-member method JSObject|_#new#tearOff(core::Object value) → self::JSObject /* = core::Object */
   return self::JSObject|(value);
-static inline-class-member method JSArray|(dynamic value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ {
+static inline-class-member method JSArray|(core::List<self::JSAny? /* = core::Object? */> value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ {
   lowered final self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ #this = value;
   return #this;
 }
-static inline-class-member method JSArray|_#new#tearOff(dynamic value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
+static inline-class-member method JSArray|_#new#tearOff(core::List<self::JSAny? /* = core::Object? */> value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
   return self::JSArray|(value);
-static inline-class-member method JSExportedDartObject|(dynamic value) → self::JSExportedDartObject /* = core::Object */ {
+static inline-class-member method JSExportedDartObject|(core::Object value) → self::JSExportedDartObject /* = core::Object */ {
   lowered final self::JSExportedDartObject /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSExportedDartObject|_#new#tearOff(dynamic value) → self::JSExportedDartObject /* = core::Object */
+static inline-class-member method JSExportedDartObject|_#new#tearOff(core::Object value) → self::JSExportedDartObject /* = core::Object */
   return self::JSExportedDartObject|(value);
-static inline-class-member method JSNumber|(dynamic value) → self::JSNumber /* = core::double */ {
+static inline-class-member method JSNumber|(core::double value) → self::JSNumber /* = core::double */ {
   lowered final self::JSNumber /* = core::double */ #this = value;
   return #this;
 }
-static inline-class-member method JSNumber|_#new#tearOff(dynamic value) → self::JSNumber /* = core::double */
+static inline-class-member method JSNumber|_#new#tearOff(core::double value) → self::JSNumber /* = core::double */
   return self::JSNumber|(value);
 static extension-member method ObjectToJSExportedDartObject|get#toJS(lowered final core::Object #this) → self::JSExportedDartObject /* = core::Object */
   return self::JSExportedDartObject|(#this);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.expect
index 08e5e31..e022a7a 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.expect
@@ -31,35 +31,35 @@
   constructor • = self::JSNumber|;
   tearoff • = self::JSNumber|_#new#tearOff;
 }
-static inline-class-member method JSAny|(dynamic value) → self::JSAny /* = core::Object */ {
+static inline-class-member method JSAny|(core::Object value) → self::JSAny /* = core::Object */ {
   lowered final self::JSAny /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSAny|_#new#tearOff(dynamic value) → self::JSAny /* = core::Object */
+static inline-class-member method JSAny|_#new#tearOff(core::Object value) → self::JSAny /* = core::Object */
   return self::JSAny|(value);
-static inline-class-member method JSObject|(dynamic value) → self::JSObject /* = core::Object */ {
+static inline-class-member method JSObject|(core::Object value) → self::JSObject /* = core::Object */ {
   lowered final self::JSObject /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSObject|_#new#tearOff(dynamic value) → self::JSObject /* = core::Object */
+static inline-class-member method JSObject|_#new#tearOff(core::Object value) → self::JSObject /* = core::Object */
   return self::JSObject|(value);
-static inline-class-member method JSArray|(dynamic value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ {
+static inline-class-member method JSArray|(core::List<self::JSAny? /* = core::Object? */> value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ {
   lowered final self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ #this = value;
   return #this;
 }
-static inline-class-member method JSArray|_#new#tearOff(dynamic value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
+static inline-class-member method JSArray|_#new#tearOff(core::List<self::JSAny? /* = core::Object? */> value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
   return self::JSArray|(value);
-static inline-class-member method JSExportedDartObject|(dynamic value) → self::JSExportedDartObject /* = core::Object */ {
+static inline-class-member method JSExportedDartObject|(core::Object value) → self::JSExportedDartObject /* = core::Object */ {
   lowered final self::JSExportedDartObject /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSExportedDartObject|_#new#tearOff(dynamic value) → self::JSExportedDartObject /* = core::Object */
+static inline-class-member method JSExportedDartObject|_#new#tearOff(core::Object value) → self::JSExportedDartObject /* = core::Object */
   return self::JSExportedDartObject|(value);
-static inline-class-member method JSNumber|(dynamic value) → self::JSNumber /* = core::double */ {
+static inline-class-member method JSNumber|(core::double value) → self::JSNumber /* = core::double */ {
   lowered final self::JSNumber /* = core::double */ #this = value;
   return #this;
 }
-static inline-class-member method JSNumber|_#new#tearOff(dynamic value) → self::JSNumber /* = core::double */
+static inline-class-member method JSNumber|_#new#tearOff(core::double value) → self::JSNumber /* = core::double */
   return self::JSNumber|(value);
 static extension-member method ObjectToJSExportedDartObject|get#toJS(lowered final core::Object #this) → self::JSExportedDartObject /* = core::Object */
   return self::JSExportedDartObject|(#this);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.modular.expect
index 08e5e31..e022a7a 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.modular.expect
@@ -31,35 +31,35 @@
   constructor • = self::JSNumber|;
   tearoff • = self::JSNumber|_#new#tearOff;
 }
-static inline-class-member method JSAny|(dynamic value) → self::JSAny /* = core::Object */ {
+static inline-class-member method JSAny|(core::Object value) → self::JSAny /* = core::Object */ {
   lowered final self::JSAny /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSAny|_#new#tearOff(dynamic value) → self::JSAny /* = core::Object */
+static inline-class-member method JSAny|_#new#tearOff(core::Object value) → self::JSAny /* = core::Object */
   return self::JSAny|(value);
-static inline-class-member method JSObject|(dynamic value) → self::JSObject /* = core::Object */ {
+static inline-class-member method JSObject|(core::Object value) → self::JSObject /* = core::Object */ {
   lowered final self::JSObject /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSObject|_#new#tearOff(dynamic value) → self::JSObject /* = core::Object */
+static inline-class-member method JSObject|_#new#tearOff(core::Object value) → self::JSObject /* = core::Object */
   return self::JSObject|(value);
-static inline-class-member method JSArray|(dynamic value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ {
+static inline-class-member method JSArray|(core::List<self::JSAny? /* = core::Object? */> value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ {
   lowered final self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ #this = value;
   return #this;
 }
-static inline-class-member method JSArray|_#new#tearOff(dynamic value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
+static inline-class-member method JSArray|_#new#tearOff(core::List<self::JSAny? /* = core::Object? */> value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
   return self::JSArray|(value);
-static inline-class-member method JSExportedDartObject|(dynamic value) → self::JSExportedDartObject /* = core::Object */ {
+static inline-class-member method JSExportedDartObject|(core::Object value) → self::JSExportedDartObject /* = core::Object */ {
   lowered final self::JSExportedDartObject /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSExportedDartObject|_#new#tearOff(dynamic value) → self::JSExportedDartObject /* = core::Object */
+static inline-class-member method JSExportedDartObject|_#new#tearOff(core::Object value) → self::JSExportedDartObject /* = core::Object */
   return self::JSExportedDartObject|(value);
-static inline-class-member method JSNumber|(dynamic value) → self::JSNumber /* = core::double */ {
+static inline-class-member method JSNumber|(core::double value) → self::JSNumber /* = core::double */ {
   lowered final self::JSNumber /* = core::double */ #this = value;
   return #this;
 }
-static inline-class-member method JSNumber|_#new#tearOff(dynamic value) → self::JSNumber /* = core::double */
+static inline-class-member method JSNumber|_#new#tearOff(core::double value) → self::JSNumber /* = core::double */
   return self::JSNumber|(value);
 static extension-member method ObjectToJSExportedDartObject|get#toJS(lowered final core::Object #this) → self::JSExportedDartObject /* = core::Object */
   return self::JSExportedDartObject|(#this);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.outline.expect
index 9e8b0cc..65a787e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.outline.expect
@@ -31,25 +31,25 @@
   constructor • = self::JSNumber|;
   tearoff • = self::JSNumber|_#new#tearOff;
 }
-static inline-class-member method JSAny|(dynamic value) → self::JSAny /* = core::Object */
+static inline-class-member method JSAny|(core::Object value) → self::JSAny /* = core::Object */
   ;
-static inline-class-member method JSAny|_#new#tearOff(dynamic value) → self::JSAny /* = core::Object */
+static inline-class-member method JSAny|_#new#tearOff(core::Object value) → self::JSAny /* = core::Object */
   return self::JSAny|(value);
-static inline-class-member method JSObject|(dynamic value) → self::JSObject /* = core::Object */
+static inline-class-member method JSObject|(core::Object value) → self::JSObject /* = core::Object */
   ;
-static inline-class-member method JSObject|_#new#tearOff(dynamic value) → self::JSObject /* = core::Object */
+static inline-class-member method JSObject|_#new#tearOff(core::Object value) → self::JSObject /* = core::Object */
   return self::JSObject|(value);
-static inline-class-member method JSArray|(dynamic value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
+static inline-class-member method JSArray|(core::List<self::JSAny? /* = core::Object? */> value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
   ;
-static inline-class-member method JSArray|_#new#tearOff(dynamic value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
+static inline-class-member method JSArray|_#new#tearOff(core::List<self::JSAny? /* = core::Object? */> value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
   return self::JSArray|(value);
-static inline-class-member method JSExportedDartObject|(dynamic value) → self::JSExportedDartObject /* = core::Object */
+static inline-class-member method JSExportedDartObject|(core::Object value) → self::JSExportedDartObject /* = core::Object */
   ;
-static inline-class-member method JSExportedDartObject|_#new#tearOff(dynamic value) → self::JSExportedDartObject /* = core::Object */
+static inline-class-member method JSExportedDartObject|_#new#tearOff(core::Object value) → self::JSExportedDartObject /* = core::Object */
   return self::JSExportedDartObject|(value);
-static inline-class-member method JSNumber|(dynamic value) → self::JSNumber /* = core::double */
+static inline-class-member method JSNumber|(core::double value) → self::JSNumber /* = core::double */
   ;
-static inline-class-member method JSNumber|_#new#tearOff(dynamic value) → self::JSNumber /* = core::double */
+static inline-class-member method JSNumber|_#new#tearOff(core::double value) → self::JSNumber /* = core::double */
   return self::JSNumber|(value);
 static extension-member method ObjectToJSExportedDartObject|get#toJS(lowered final core::Object #this) → self::JSExportedDartObject /* = core::Object */
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.transformed.expect
index e29d4e1..2fbb243 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue51556.dart.weak.transformed.expect
@@ -31,35 +31,35 @@
   constructor • = self::JSNumber|;
   tearoff • = self::JSNumber|_#new#tearOff;
 }
-static inline-class-member method JSAny|(dynamic value) → self::JSAny /* = core::Object */ {
+static inline-class-member method JSAny|(core::Object value) → self::JSAny /* = core::Object */ {
   lowered final self::JSAny /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSAny|_#new#tearOff(dynamic value) → self::JSAny /* = core::Object */
+static inline-class-member method JSAny|_#new#tearOff(core::Object value) → self::JSAny /* = core::Object */
   return self::JSAny|(value);
-static inline-class-member method JSObject|(dynamic value) → self::JSObject /* = core::Object */ {
+static inline-class-member method JSObject|(core::Object value) → self::JSObject /* = core::Object */ {
   lowered final self::JSObject /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSObject|_#new#tearOff(dynamic value) → self::JSObject /* = core::Object */
+static inline-class-member method JSObject|_#new#tearOff(core::Object value) → self::JSObject /* = core::Object */
   return self::JSObject|(value);
-static inline-class-member method JSArray|(dynamic value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ {
+static inline-class-member method JSArray|(core::List<self::JSAny? /* = core::Object? */> value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ {
   lowered final self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */ #this = value;
   return #this;
 }
-static inline-class-member method JSArray|_#new#tearOff(dynamic value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
+static inline-class-member method JSArray|_#new#tearOff(core::List<self::JSAny? /* = core::Object? */> value) → self::JSArray /* = core::List<self::JSAny? /* = core::Object? */> */
   return self::JSArray|(value);
-static inline-class-member method JSExportedDartObject|(dynamic value) → self::JSExportedDartObject /* = core::Object */ {
+static inline-class-member method JSExportedDartObject|(core::Object value) → self::JSExportedDartObject /* = core::Object */ {
   lowered final self::JSExportedDartObject /* = core::Object */ #this = value;
   return #this;
 }
-static inline-class-member method JSExportedDartObject|_#new#tearOff(dynamic value) → self::JSExportedDartObject /* = core::Object */
+static inline-class-member method JSExportedDartObject|_#new#tearOff(core::Object value) → self::JSExportedDartObject /* = core::Object */
   return self::JSExportedDartObject|(value);
-static inline-class-member method JSNumber|(dynamic value) → self::JSNumber /* = core::double */ {
+static inline-class-member method JSNumber|(core::double value) → self::JSNumber /* = core::double */ {
   lowered final self::JSNumber /* = core::double */ #this = value;
   return #this;
 }
-static inline-class-member method JSNumber|_#new#tearOff(dynamic value) → self::JSNumber /* = core::double */
+static inline-class-member method JSNumber|_#new#tearOff(core::double value) → self::JSNumber /* = core::double */
   return self::JSNumber|(value);
 static extension-member method ObjectToJSExportedDartObject|get#toJS(lowered final core::Object #this) → self::JSExportedDartObject /* = core::Object */
   return self::JSExportedDartObject|(#this);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.expect
index ad1ac13..34c7eec 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.expect
@@ -37,11 +37,11 @@
   constructor • = self::Bar|;
   tearoff • = self::Bar|_#new#tearOff;
 }
-static inline-class-member method Foo|_(dynamic i) → self::Foo /* = core::int */ {
+static inline-class-member method Foo|_(core::int i) → self::Foo /* = core::int */ {
   lowered final self::Foo /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method Foo|_#_#tearOff(dynamic i) → self::Foo /* = core::int */
+static inline-class-member method Foo|_#_#tearOff(core::int i) → self::Foo /* = core::int */
   return self::Foo|_(i);
 static inline-class-member method Foo|(core::int i) → self::Foo /* = core::int */ {
   lowered final self::Foo /* = core::int */ #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.transformed.expect
index ad1ac13..34c7eec 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.strong.transformed.expect
@@ -37,11 +37,11 @@
   constructor • = self::Bar|;
   tearoff • = self::Bar|_#new#tearOff;
 }
-static inline-class-member method Foo|_(dynamic i) → self::Foo /* = core::int */ {
+static inline-class-member method Foo|_(core::int i) → self::Foo /* = core::int */ {
   lowered final self::Foo /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method Foo|_#_#tearOff(dynamic i) → self::Foo /* = core::int */
+static inline-class-member method Foo|_#_#tearOff(core::int i) → self::Foo /* = core::int */
   return self::Foo|_(i);
 static inline-class-member method Foo|(core::int i) → self::Foo /* = core::int */ {
   lowered final self::Foo /* = core::int */ #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.expect
index ad1ac13..34c7eec 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.expect
@@ -37,11 +37,11 @@
   constructor • = self::Bar|;
   tearoff • = self::Bar|_#new#tearOff;
 }
-static inline-class-member method Foo|_(dynamic i) → self::Foo /* = core::int */ {
+static inline-class-member method Foo|_(core::int i) → self::Foo /* = core::int */ {
   lowered final self::Foo /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method Foo|_#_#tearOff(dynamic i) → self::Foo /* = core::int */
+static inline-class-member method Foo|_#_#tearOff(core::int i) → self::Foo /* = core::int */
   return self::Foo|_(i);
 static inline-class-member method Foo|(core::int i) → self::Foo /* = core::int */ {
   lowered final self::Foo /* = core::int */ #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.modular.expect
index ad1ac13..34c7eec 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.modular.expect
@@ -37,11 +37,11 @@
   constructor • = self::Bar|;
   tearoff • = self::Bar|_#new#tearOff;
 }
-static inline-class-member method Foo|_(dynamic i) → self::Foo /* = core::int */ {
+static inline-class-member method Foo|_(core::int i) → self::Foo /* = core::int */ {
   lowered final self::Foo /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method Foo|_#_#tearOff(dynamic i) → self::Foo /* = core::int */
+static inline-class-member method Foo|_#_#tearOff(core::int i) → self::Foo /* = core::int */
   return self::Foo|_(i);
 static inline-class-member method Foo|(core::int i) → self::Foo /* = core::int */ {
   lowered final self::Foo /* = core::int */ #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.outline.expect
index 9ec6bd3..009565f 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.outline.expect
@@ -22,9 +22,9 @@
   constructor • = self::Bar|;
   tearoff • = self::Bar|_#new#tearOff;
 }
-static inline-class-member method Foo|_(dynamic i) → self::Foo /* = core::int */
+static inline-class-member method Foo|_(core::int i) → self::Foo /* = core::int */
   ;
-static inline-class-member method Foo|_#_#tearOff(dynamic i) → self::Foo /* = core::int */
+static inline-class-member method Foo|_#_#tearOff(core::int i) → self::Foo /* = core::int */
   return self::Foo|_(i);
 static inline-class-member method Foo|(core::int i) → self::Foo /* = core::int */
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.transformed.expect
index ad1ac13..34c7eec 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52119.dart.weak.transformed.expect
@@ -37,11 +37,11 @@
   constructor • = self::Bar|;
   tearoff • = self::Bar|_#new#tearOff;
 }
-static inline-class-member method Foo|_(dynamic i) → self::Foo /* = core::int */ {
+static inline-class-member method Foo|_(core::int i) → self::Foo /* = core::int */ {
   lowered final self::Foo /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method Foo|_#_#tearOff(dynamic i) → self::Foo /* = core::int */
+static inline-class-member method Foo|_#_#tearOff(core::int i) → self::Foo /* = core::int */
   return self::Foo|_(i);
 static inline-class-member method Foo|(core::int i) → self::Foo /* = core::int */ {
   lowered final self::Foo /* = core::int */ #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.expect
index b9defbc..78dcc1c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.expect
@@ -10,11 +10,11 @@
   constructor named = self::X|named;
   tearoff named = self::X|_#named#tearOff;
 }
-static inline-class-member method X|_(dynamic obj) → self::X /* = core::int */ {
+static inline-class-member method X|_(core::int obj) → self::X /* = core::int */ {
   lowered final self::X /* = core::int */ #this = obj;
   return #this;
 }
-static inline-class-member method X|_#_#tearOff(dynamic obj) → self::X /* = core::int */
+static inline-class-member method X|_#_#tearOff(core::int obj) → self::X /* = core::int */
   return self::X|_(obj);
 static inline-class-member method X|() → self::X /* = core::int */ {
   lowered final self::X /* = core::int */ #this = 0;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.transformed.expect
index b9defbc..78dcc1c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.strong.transformed.expect
@@ -10,11 +10,11 @@
   constructor named = self::X|named;
   tearoff named = self::X|_#named#tearOff;
 }
-static inline-class-member method X|_(dynamic obj) → self::X /* = core::int */ {
+static inline-class-member method X|_(core::int obj) → self::X /* = core::int */ {
   lowered final self::X /* = core::int */ #this = obj;
   return #this;
 }
-static inline-class-member method X|_#_#tearOff(dynamic obj) → self::X /* = core::int */
+static inline-class-member method X|_#_#tearOff(core::int obj) → self::X /* = core::int */
   return self::X|_(obj);
 static inline-class-member method X|() → self::X /* = core::int */ {
   lowered final self::X /* = core::int */ #this = 0;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.expect
index b9defbc..78dcc1c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.expect
@@ -10,11 +10,11 @@
   constructor named = self::X|named;
   tearoff named = self::X|_#named#tearOff;
 }
-static inline-class-member method X|_(dynamic obj) → self::X /* = core::int */ {
+static inline-class-member method X|_(core::int obj) → self::X /* = core::int */ {
   lowered final self::X /* = core::int */ #this = obj;
   return #this;
 }
-static inline-class-member method X|_#_#tearOff(dynamic obj) → self::X /* = core::int */
+static inline-class-member method X|_#_#tearOff(core::int obj) → self::X /* = core::int */
   return self::X|_(obj);
 static inline-class-member method X|() → self::X /* = core::int */ {
   lowered final self::X /* = core::int */ #this = 0;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.modular.expect
index b9defbc..78dcc1c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.modular.expect
@@ -10,11 +10,11 @@
   constructor named = self::X|named;
   tearoff named = self::X|_#named#tearOff;
 }
-static inline-class-member method X|_(dynamic obj) → self::X /* = core::int */ {
+static inline-class-member method X|_(core::int obj) → self::X /* = core::int */ {
   lowered final self::X /* = core::int */ #this = obj;
   return #this;
 }
-static inline-class-member method X|_#_#tearOff(dynamic obj) → self::X /* = core::int */
+static inline-class-member method X|_#_#tearOff(core::int obj) → self::X /* = core::int */
   return self::X|_(obj);
 static inline-class-member method X|() → self::X /* = core::int */ {
   lowered final self::X /* = core::int */ #this = 0;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.outline.expect
index 82e1518..0f5a22d 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.outline.expect
@@ -10,9 +10,9 @@
   constructor named = self::X|named;
   tearoff named = self::X|_#named#tearOff;
 }
-static inline-class-member method X|_(dynamic obj) → self::X /* = core::int */
+static inline-class-member method X|_(core::int obj) → self::X /* = core::int */
   ;
-static inline-class-member method X|_#_#tearOff(dynamic obj) → self::X /* = core::int */
+static inline-class-member method X|_#_#tearOff(core::int obj) → self::X /* = core::int */
   return self::X|_(obj);
 static inline-class-member method X|() → self::X /* = core::int */
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.transformed.expect
index b9defbc..78dcc1c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52240.dart.weak.transformed.expect
@@ -10,11 +10,11 @@
   constructor named = self::X|named;
   tearoff named = self::X|_#named#tearOff;
 }
-static inline-class-member method X|_(dynamic obj) → self::X /* = core::int */ {
+static inline-class-member method X|_(core::int obj) → self::X /* = core::int */ {
   lowered final self::X /* = core::int */ #this = obj;
   return #this;
 }
-static inline-class-member method X|_#_#tearOff(dynamic obj) → self::X /* = core::int */
+static inline-class-member method X|_#_#tearOff(core::int obj) → self::X /* = core::int */
   return self::X|_(obj);
 static inline-class-member method X|() → self::X /* = core::int */ {
   lowered final self::X /* = core::int */ #this = 0;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.expect
index c012eb6..1bfb512 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.expect
@@ -14,11 +14,11 @@
   constructor • = self::Id|;
   tearoff • = self::Id|_#new#tearOff;
 }
-static inline-class-member method Id|(dynamic id) → self::Id /* = core::int */ {
+static inline-class-member method Id|(core::int id) → self::Id /* = core::int */ {
   lowered final self::Id /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method Id|_#new#tearOff(dynamic id) → self::Id /* = core::int */
+static inline-class-member method Id|_#new#tearOff(core::int id) → self::Id /* = core::int */
   return self::Id|(id);
 static method test() → dynamic {
   self::Id /* = core::int */ c = self::Id|(2);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.transformed.expect
index c012eb6..1bfb512 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.strong.transformed.expect
@@ -14,11 +14,11 @@
   constructor • = self::Id|;
   tearoff • = self::Id|_#new#tearOff;
 }
-static inline-class-member method Id|(dynamic id) → self::Id /* = core::int */ {
+static inline-class-member method Id|(core::int id) → self::Id /* = core::int */ {
   lowered final self::Id /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method Id|_#new#tearOff(dynamic id) → self::Id /* = core::int */
+static inline-class-member method Id|_#new#tearOff(core::int id) → self::Id /* = core::int */
   return self::Id|(id);
 static method test() → dynamic {
   self::Id /* = core::int */ c = self::Id|(2);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.expect
index 1b1a25b..ea0b204 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.expect
@@ -14,11 +14,11 @@
   constructor • = self::Id|;
   tearoff • = self::Id|_#new#tearOff;
 }
-static inline-class-member method Id|(dynamic id) → self::Id /* = core::int */ {
+static inline-class-member method Id|(core::int id) → self::Id /* = core::int */ {
   lowered final self::Id /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method Id|_#new#tearOff(dynamic id) → self::Id /* = core::int */
+static inline-class-member method Id|_#new#tearOff(core::int id) → self::Id /* = core::int */
   return self::Id|(id);
 static method test() → dynamic {
   self::Id /* = core::int */ c = self::Id|(2);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.modular.expect
index 1b1a25b..ea0b204 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.modular.expect
@@ -14,11 +14,11 @@
   constructor • = self::Id|;
   tearoff • = self::Id|_#new#tearOff;
 }
-static inline-class-member method Id|(dynamic id) → self::Id /* = core::int */ {
+static inline-class-member method Id|(core::int id) → self::Id /* = core::int */ {
   lowered final self::Id /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method Id|_#new#tearOff(dynamic id) → self::Id /* = core::int */
+static inline-class-member method Id|_#new#tearOff(core::int id) → self::Id /* = core::int */
   return self::Id|(id);
 static method test() → dynamic {
   self::Id /* = core::int */ c = self::Id|(2);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.outline.expect
index d62cbf2..a8cd570 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.outline.expect
@@ -6,9 +6,9 @@
   constructor • = self::Id|;
   tearoff • = self::Id|_#new#tearOff;
 }
-static inline-class-member method Id|(dynamic id) → self::Id /* = core::int */
+static inline-class-member method Id|(core::int id) → self::Id /* = core::int */
   ;
-static inline-class-member method Id|_#new#tearOff(dynamic id) → self::Id /* = core::int */
+static inline-class-member method Id|_#new#tearOff(core::int id) → self::Id /* = core::int */
   return self::Id|(id);
 static method test() → dynamic
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.transformed.expect
index 1b1a25b..ea0b204 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52284.dart.weak.transformed.expect
@@ -14,11 +14,11 @@
   constructor • = self::Id|;
   tearoff • = self::Id|_#new#tearOff;
 }
-static inline-class-member method Id|(dynamic id) → self::Id /* = core::int */ {
+static inline-class-member method Id|(core::int id) → self::Id /* = core::int */ {
   lowered final self::Id /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method Id|_#new#tearOff(dynamic id) → self::Id /* = core::int */
+static inline-class-member method Id|_#new#tearOff(core::int id) → self::Id /* = core::int */
   return self::Id|(id);
 static method test() → dynamic {
   self::Id /* = core::int */ c = self::Id|(2);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.expect
index 6fce022..975baed 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.expect
@@ -8,11 +8,11 @@
   static redirecting-factory f = self::IC1|f;
   static tearoff f = self::IC1|_#f#tearOff;
 }
-static inline-class-member method IC1|(dynamic id) → self::IC1 /* = core::int */ {
+static inline-class-member method IC1|(core::int id) → self::IC1 /* = core::int */ {
   lowered final self::IC1 /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method IC1|_#new#tearOff(dynamic id) → self::IC1 /* = core::int */
+static inline-class-member method IC1|_#new#tearOff(core::int id) → self::IC1 /* = core::int */
   return self::IC1|(id);
 static inline-class-member method IC1|f(core::int id) → self::IC1 /* = core::int */ /* redirection-target: self::IC1| */
   return self::IC1|(id);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.transformed.expect
index 6fce022..975baed 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.strong.transformed.expect
@@ -8,11 +8,11 @@
   static redirecting-factory f = self::IC1|f;
   static tearoff f = self::IC1|_#f#tearOff;
 }
-static inline-class-member method IC1|(dynamic id) → self::IC1 /* = core::int */ {
+static inline-class-member method IC1|(core::int id) → self::IC1 /* = core::int */ {
   lowered final self::IC1 /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method IC1|_#new#tearOff(dynamic id) → self::IC1 /* = core::int */
+static inline-class-member method IC1|_#new#tearOff(core::int id) → self::IC1 /* = core::int */
   return self::IC1|(id);
 static inline-class-member method IC1|f(core::int id) → self::IC1 /* = core::int */ /* redirection-target: self::IC1| */
   return self::IC1|(id);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.expect
index 6fce022..975baed 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.expect
@@ -8,11 +8,11 @@
   static redirecting-factory f = self::IC1|f;
   static tearoff f = self::IC1|_#f#tearOff;
 }
-static inline-class-member method IC1|(dynamic id) → self::IC1 /* = core::int */ {
+static inline-class-member method IC1|(core::int id) → self::IC1 /* = core::int */ {
   lowered final self::IC1 /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method IC1|_#new#tearOff(dynamic id) → self::IC1 /* = core::int */
+static inline-class-member method IC1|_#new#tearOff(core::int id) → self::IC1 /* = core::int */
   return self::IC1|(id);
 static inline-class-member method IC1|f(core::int id) → self::IC1 /* = core::int */ /* redirection-target: self::IC1| */
   return self::IC1|(id);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.modular.expect
index 6fce022..975baed 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.modular.expect
@@ -8,11 +8,11 @@
   static redirecting-factory f = self::IC1|f;
   static tearoff f = self::IC1|_#f#tearOff;
 }
-static inline-class-member method IC1|(dynamic id) → self::IC1 /* = core::int */ {
+static inline-class-member method IC1|(core::int id) → self::IC1 /* = core::int */ {
   lowered final self::IC1 /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method IC1|_#new#tearOff(dynamic id) → self::IC1 /* = core::int */
+static inline-class-member method IC1|_#new#tearOff(core::int id) → self::IC1 /* = core::int */
   return self::IC1|(id);
 static inline-class-member method IC1|f(core::int id) → self::IC1 /* = core::int */ /* redirection-target: self::IC1| */
   return self::IC1|(id);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.outline.expect
index e831b51..4c5ebd6 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.outline.expect
@@ -8,9 +8,9 @@
   static redirecting-factory f = self::IC1|f;
   static tearoff f = self::IC1|_#f#tearOff;
 }
-static inline-class-member method IC1|(dynamic id) → self::IC1 /* = core::int */
+static inline-class-member method IC1|(core::int id) → self::IC1 /* = core::int */
   ;
-static inline-class-member method IC1|_#new#tearOff(dynamic id) → self::IC1 /* = core::int */
+static inline-class-member method IC1|_#new#tearOff(core::int id) → self::IC1 /* = core::int */
   return self::IC1|(id);
 static inline-class-member method IC1|f(core::int id) → self::IC1 /* = core::int */ /* redirection-target: self::IC1| */
   return self::IC1|(id);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.transformed.expect
index 6fce022..975baed 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52525.dart.weak.transformed.expect
@@ -8,11 +8,11 @@
   static redirecting-factory f = self::IC1|f;
   static tearoff f = self::IC1|_#f#tearOff;
 }
-static inline-class-member method IC1|(dynamic id) → self::IC1 /* = core::int */ {
+static inline-class-member method IC1|(core::int id) → self::IC1 /* = core::int */ {
   lowered final self::IC1 /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method IC1|_#new#tearOff(dynamic id) → self::IC1 /* = core::int */
+static inline-class-member method IC1|_#new#tearOff(core::int id) → self::IC1 /* = core::int */
   return self::IC1|(id);
 static inline-class-member method IC1|f(core::int id) → self::IC1 /* = core::int */ /* redirection-target: self::IC1| */
   return self::IC1|(id);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.expect
index 2c461c5..687f8ce 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.expect
@@ -15,17 +15,17 @@
   constructor • = self::FooBaz|;
   tearoff • = self::FooBaz|_#new#tearOff;
 }
-static inline-class-member method FooBar|(dynamic i) → self::FooBar /* = core::int */ {
+static inline-class-member method FooBar|(core::int i) → self::FooBar /* = core::int */ {
   lowered final self::FooBar /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method FooBar|_#new#tearOff(dynamic i) → self::FooBar /* = core::int */
+static inline-class-member method FooBar|_#new#tearOff(core::int i) → self::FooBar /* = core::int */
   return self::FooBar|(i);
-static inline-class-member method FooBaz|(dynamic i) → self::FooBaz /* = core::int */ {
+static inline-class-member method FooBaz|(core::int i) → self::FooBaz /* = core::int */ {
   lowered final self::FooBaz /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method FooBaz|_#new#tearOff(dynamic i) → self::FooBaz /* = core::int */
+static inline-class-member method FooBaz|_#new#tearOff(core::int i) → self::FooBaz /* = core::int */
   return self::FooBaz|(i);
 static method main() → void {
   final self::FooBar /* = core::int */ a = self::FooBar|(0);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.transformed.expect
index ba73a59..8336669 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.strong.transformed.expect
@@ -15,17 +15,17 @@
   constructor • = self::FooBaz|;
   tearoff • = self::FooBaz|_#new#tearOff;
 }
-static inline-class-member method FooBar|(dynamic i) → self::FooBar /* = core::int */ {
+static inline-class-member method FooBar|(core::int i) → self::FooBar /* = core::int */ {
   lowered final self::FooBar /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method FooBar|_#new#tearOff(dynamic i) → self::FooBar /* = core::int */
+static inline-class-member method FooBar|_#new#tearOff(core::int i) → self::FooBar /* = core::int */
   return self::FooBar|(i);
-static inline-class-member method FooBaz|(dynamic i) → self::FooBaz /* = core::int */ {
+static inline-class-member method FooBaz|(core::int i) → self::FooBaz /* = core::int */ {
   lowered final self::FooBaz /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method FooBaz|_#new#tearOff(dynamic i) → self::FooBaz /* = core::int */
+static inline-class-member method FooBaz|_#new#tearOff(core::int i) → self::FooBaz /* = core::int */
   return self::FooBaz|(i);
 static method main() → void {
   final self::FooBar /* = core::int */ a = self::FooBar|(0);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.expect
index 2c461c5..687f8ce 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.expect
@@ -15,17 +15,17 @@
   constructor • = self::FooBaz|;
   tearoff • = self::FooBaz|_#new#tearOff;
 }
-static inline-class-member method FooBar|(dynamic i) → self::FooBar /* = core::int */ {
+static inline-class-member method FooBar|(core::int i) → self::FooBar /* = core::int */ {
   lowered final self::FooBar /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method FooBar|_#new#tearOff(dynamic i) → self::FooBar /* = core::int */
+static inline-class-member method FooBar|_#new#tearOff(core::int i) → self::FooBar /* = core::int */
   return self::FooBar|(i);
-static inline-class-member method FooBaz|(dynamic i) → self::FooBaz /* = core::int */ {
+static inline-class-member method FooBaz|(core::int i) → self::FooBaz /* = core::int */ {
   lowered final self::FooBaz /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method FooBaz|_#new#tearOff(dynamic i) → self::FooBaz /* = core::int */
+static inline-class-member method FooBaz|_#new#tearOff(core::int i) → self::FooBaz /* = core::int */
   return self::FooBaz|(i);
 static method main() → void {
   final self::FooBar /* = core::int */ a = self::FooBar|(0);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.modular.expect
index 2c461c5..687f8ce 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.modular.expect
@@ -15,17 +15,17 @@
   constructor • = self::FooBaz|;
   tearoff • = self::FooBaz|_#new#tearOff;
 }
-static inline-class-member method FooBar|(dynamic i) → self::FooBar /* = core::int */ {
+static inline-class-member method FooBar|(core::int i) → self::FooBar /* = core::int */ {
   lowered final self::FooBar /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method FooBar|_#new#tearOff(dynamic i) → self::FooBar /* = core::int */
+static inline-class-member method FooBar|_#new#tearOff(core::int i) → self::FooBar /* = core::int */
   return self::FooBar|(i);
-static inline-class-member method FooBaz|(dynamic i) → self::FooBaz /* = core::int */ {
+static inline-class-member method FooBaz|(core::int i) → self::FooBaz /* = core::int */ {
   lowered final self::FooBaz /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method FooBaz|_#new#tearOff(dynamic i) → self::FooBaz /* = core::int */
+static inline-class-member method FooBaz|_#new#tearOff(core::int i) → self::FooBaz /* = core::int */
   return self::FooBaz|(i);
 static method main() → void {
   final self::FooBar /* = core::int */ a = self::FooBar|(0);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.outline.expect
index 1ccf2a1..a5e9aed 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.outline.expect
@@ -14,13 +14,13 @@
   constructor • = self::FooBaz|;
   tearoff • = self::FooBaz|_#new#tearOff;
 }
-static inline-class-member method FooBar|(dynamic i) → self::FooBar /* = core::int */
+static inline-class-member method FooBar|(core::int i) → self::FooBar /* = core::int */
   ;
-static inline-class-member method FooBar|_#new#tearOff(dynamic i) → self::FooBar /* = core::int */
+static inline-class-member method FooBar|_#new#tearOff(core::int i) → self::FooBar /* = core::int */
   return self::FooBar|(i);
-static inline-class-member method FooBaz|(dynamic i) → self::FooBaz /* = core::int */
+static inline-class-member method FooBaz|(core::int i) → self::FooBaz /* = core::int */
   ;
-static inline-class-member method FooBaz|_#new#tearOff(dynamic i) → self::FooBaz /* = core::int */
+static inline-class-member method FooBaz|_#new#tearOff(core::int i) → self::FooBaz /* = core::int */
   return self::FooBaz|(i);
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.transformed.expect
index ba73a59..8336669 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue52667.dart.weak.transformed.expect
@@ -15,17 +15,17 @@
   constructor • = self::FooBaz|;
   tearoff • = self::FooBaz|_#new#tearOff;
 }
-static inline-class-member method FooBar|(dynamic i) → self::FooBar /* = core::int */ {
+static inline-class-member method FooBar|(core::int i) → self::FooBar /* = core::int */ {
   lowered final self::FooBar /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method FooBar|_#new#tearOff(dynamic i) → self::FooBar /* = core::int */
+static inline-class-member method FooBar|_#new#tearOff(core::int i) → self::FooBar /* = core::int */
   return self::FooBar|(i);
-static inline-class-member method FooBaz|(dynamic i) → self::FooBaz /* = core::int */ {
+static inline-class-member method FooBaz|(core::int i) → self::FooBaz /* = core::int */ {
   lowered final self::FooBaz /* = core::int */ #this = i;
   return #this;
 }
-static inline-class-member method FooBaz|_#new#tearOff(dynamic i) → self::FooBaz /* = core::int */
+static inline-class-member method FooBaz|_#new#tearOff(core::int i) → self::FooBaz /* = core::int */
   return self::FooBaz|(i);
 static method main() → void {
   final self::FooBar /* = core::int */ a = self::FooBar|(0);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.strong.expect
index e7025bd..59fb617 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.strong.expect
@@ -25,11 +25,11 @@
   constructor • = self::V|;
   tearoff • = self::V|_#new#tearOff;
 }
-static inline-class-member method V|<T extends self::V<self::V|::T> /* = self::V|::T */ = dynamic>(dynamic id) → self::V<self::V|::T> /* = self::V|::T */ {
+static inline-class-member method V|<T extends self::V<self::V|::T> /* = self::V|::T */ = dynamic>(self::V|::T id) → self::V<self::V|::T> /* = self::V|::T */ {
   lowered final self::V<self::V|::T> /* = self::V|::T */ #this = id;
   return #this;
 }
-static inline-class-member method V|_#new#tearOff<T extends self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */ = dynamic>(dynamic id) → self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */
+static inline-class-member method V|_#new#tearOff<T extends self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */ = dynamic>(self::V|_#new#tearOff::T id) → self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */
   return self::V|<self::V|_#new#tearOff::T>(id);
 static method test(self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */ v) → dynamic {
   core::List<self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */> l = <self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */>[v];
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.strong.transformed.expect
index 358ff34..9da68d6 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.strong.transformed.expect
@@ -25,11 +25,11 @@
   constructor • = self::V|;
   tearoff • = self::V|_#new#tearOff;
 }
-static inline-class-member method V|<T extends self::V<self::V|::T> /* = self::V|::T */ = dynamic>(dynamic id) → self::V<self::V|::T> /* = self::V|::T */ {
+static inline-class-member method V|<T extends self::V<self::V|::T> /* = self::V|::T */ = dynamic>(self::V|::T id) → self::V<self::V|::T> /* = self::V|::T */ {
   lowered final self::V<self::V|::T> /* = self::V|::T */ #this = id;
   return #this;
 }
-static inline-class-member method V|_#new#tearOff<T extends self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */ = dynamic>(dynamic id) → self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */
+static inline-class-member method V|_#new#tearOff<T extends self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */ = dynamic>(self::V|_#new#tearOff::T id) → self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */
   return self::V|<self::V|_#new#tearOff::T>(id);
 static method test(self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */ v) → dynamic {
   core::List<self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */> l = core::_GrowableList::_literal1<self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */>(v);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.expect
index e7025bd..59fb617 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.expect
@@ -25,11 +25,11 @@
   constructor • = self::V|;
   tearoff • = self::V|_#new#tearOff;
 }
-static inline-class-member method V|<T extends self::V<self::V|::T> /* = self::V|::T */ = dynamic>(dynamic id) → self::V<self::V|::T> /* = self::V|::T */ {
+static inline-class-member method V|<T extends self::V<self::V|::T> /* = self::V|::T */ = dynamic>(self::V|::T id) → self::V<self::V|::T> /* = self::V|::T */ {
   lowered final self::V<self::V|::T> /* = self::V|::T */ #this = id;
   return #this;
 }
-static inline-class-member method V|_#new#tearOff<T extends self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */ = dynamic>(dynamic id) → self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */
+static inline-class-member method V|_#new#tearOff<T extends self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */ = dynamic>(self::V|_#new#tearOff::T id) → self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */
   return self::V|<self::V|_#new#tearOff::T>(id);
 static method test(self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */ v) → dynamic {
   core::List<self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */> l = <self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */>[v];
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.modular.expect
index e7025bd..59fb617 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.modular.expect
@@ -25,11 +25,11 @@
   constructor • = self::V|;
   tearoff • = self::V|_#new#tearOff;
 }
-static inline-class-member method V|<T extends self::V<self::V|::T> /* = self::V|::T */ = dynamic>(dynamic id) → self::V<self::V|::T> /* = self::V|::T */ {
+static inline-class-member method V|<T extends self::V<self::V|::T> /* = self::V|::T */ = dynamic>(self::V|::T id) → self::V<self::V|::T> /* = self::V|::T */ {
   lowered final self::V<self::V|::T> /* = self::V|::T */ #this = id;
   return #this;
 }
-static inline-class-member method V|_#new#tearOff<T extends self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */ = dynamic>(dynamic id) → self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */
+static inline-class-member method V|_#new#tearOff<T extends self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */ = dynamic>(self::V|_#new#tearOff::T id) → self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */
   return self::V|<self::V|_#new#tearOff::T>(id);
 static method test(self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */ v) → dynamic {
   core::List<self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */> l = <self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */>[v];
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.outline.expect
index 1758c31..d40d939 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.outline.expect
@@ -16,9 +16,9 @@
   constructor • = self::V|;
   tearoff • = self::V|_#new#tearOff;
 }
-static inline-class-member method V|<T extends self::V<self::V|::T> /* = self::V|::T */ = dynamic>(dynamic id) → self::V<self::V|::T> /* = self::V|::T */
+static inline-class-member method V|<T extends self::V<self::V|::T> /* = self::V|::T */ = dynamic>(self::V|::T id) → self::V<self::V|::T> /* = self::V|::T */
   ;
-static inline-class-member method V|_#new#tearOff<T extends self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */ = dynamic>(dynamic id) → self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */
+static inline-class-member method V|_#new#tearOff<T extends self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */ = dynamic>(self::V|_#new#tearOff::T id) → self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */
   return self::V|<self::V|_#new#tearOff::T>(id);
 static method test(self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */ v) → dynamic
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.transformed.expect
index 358ff34..9da68d6 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53123.dart.weak.transformed.expect
@@ -25,11 +25,11 @@
   constructor • = self::V|;
   tearoff • = self::V|_#new#tearOff;
 }
-static inline-class-member method V|<T extends self::V<self::V|::T> /* = self::V|::T */ = dynamic>(dynamic id) → self::V<self::V|::T> /* = self::V|::T */ {
+static inline-class-member method V|<T extends self::V<self::V|::T> /* = self::V|::T */ = dynamic>(self::V|::T id) → self::V<self::V|::T> /* = self::V|::T */ {
   lowered final self::V<self::V|::T> /* = self::V|::T */ #this = id;
   return #this;
 }
-static inline-class-member method V|_#new#tearOff<T extends self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */ = dynamic>(dynamic id) → self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */
+static inline-class-member method V|_#new#tearOff<T extends self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */ = dynamic>(self::V|_#new#tearOff::T id) → self::V<self::V|_#new#tearOff::T> /* = self::V|_#new#tearOff::T */
   return self::V|<self::V|_#new#tearOff::T>(id);
 static method test(self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */ v) → dynamic {
   core::List<self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */> l = core::_GrowableList::_literal1<self::V<self::V<dynamic> /* = dynamic */> /* = dynamic */>(v);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.strong.expect
index f98f6a5..a4a36e5 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.strong.expect
@@ -22,11 +22,11 @@
   static factory f2 = self::ET1|f2;
   static tearoff f2 = self::ET1|_#f2#tearOff;
 }
-static inline-class-member method ET1|c0(dynamic id) → self::ET1 /* = core::int */ {
+static inline-class-member method ET1|c0(core::int id) → self::ET1 /* = core::int */ {
   lowered final self::ET1 /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method ET1|_#c0#tearOff(dynamic id) → self::ET1 /* = core::int */
+static inline-class-member method ET1|_#c0#tearOff(core::int id) → self::ET1 /* = core::int */
   return self::ET1|c0(id);
 static inline-class-member method ET1|c1() → self::ET1 /* = core::int */ {
   lowered final self::ET1 /* = core::int */ #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.strong.transformed.expect
index f98f6a5..a4a36e5 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.strong.transformed.expect
@@ -22,11 +22,11 @@
   static factory f2 = self::ET1|f2;
   static tearoff f2 = self::ET1|_#f2#tearOff;
 }
-static inline-class-member method ET1|c0(dynamic id) → self::ET1 /* = core::int */ {
+static inline-class-member method ET1|c0(core::int id) → self::ET1 /* = core::int */ {
   lowered final self::ET1 /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method ET1|_#c0#tearOff(dynamic id) → self::ET1 /* = core::int */
+static inline-class-member method ET1|_#c0#tearOff(core::int id) → self::ET1 /* = core::int */
   return self::ET1|c0(id);
 static inline-class-member method ET1|c1() → self::ET1 /* = core::int */ {
   lowered final self::ET1 /* = core::int */ #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.expect
index f98f6a5..a4a36e5 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.expect
@@ -22,11 +22,11 @@
   static factory f2 = self::ET1|f2;
   static tearoff f2 = self::ET1|_#f2#tearOff;
 }
-static inline-class-member method ET1|c0(dynamic id) → self::ET1 /* = core::int */ {
+static inline-class-member method ET1|c0(core::int id) → self::ET1 /* = core::int */ {
   lowered final self::ET1 /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method ET1|_#c0#tearOff(dynamic id) → self::ET1 /* = core::int */
+static inline-class-member method ET1|_#c0#tearOff(core::int id) → self::ET1 /* = core::int */
   return self::ET1|c0(id);
 static inline-class-member method ET1|c1() → self::ET1 /* = core::int */ {
   lowered final self::ET1 /* = core::int */ #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.modular.expect
index f98f6a5..a4a36e5 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.modular.expect
@@ -22,11 +22,11 @@
   static factory f2 = self::ET1|f2;
   static tearoff f2 = self::ET1|_#f2#tearOff;
 }
-static inline-class-member method ET1|c0(dynamic id) → self::ET1 /* = core::int */ {
+static inline-class-member method ET1|c0(core::int id) → self::ET1 /* = core::int */ {
   lowered final self::ET1 /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method ET1|_#c0#tearOff(dynamic id) → self::ET1 /* = core::int */
+static inline-class-member method ET1|_#c0#tearOff(core::int id) → self::ET1 /* = core::int */
   return self::ET1|c0(id);
 static inline-class-member method ET1|c1() → self::ET1 /* = core::int */ {
   lowered final self::ET1 /* = core::int */ #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.outline.expect
index 2ae0984..ca7679c 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.outline.expect
@@ -22,9 +22,9 @@
   static factory f2 = self::ET1|f2;
   static tearoff f2 = self::ET1|_#f2#tearOff;
 }
-static inline-class-member method ET1|c0(dynamic id) → self::ET1 /* = core::int */
+static inline-class-member method ET1|c0(core::int id) → self::ET1 /* = core::int */
   ;
-static inline-class-member method ET1|_#c0#tearOff(dynamic id) → self::ET1 /* = core::int */
+static inline-class-member method ET1|_#c0#tearOff(core::int id) → self::ET1 /* = core::int */
   return self::ET1|c0(id);
 static inline-class-member method ET1|c1() → self::ET1 /* = core::int */
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.transformed.expect
index f98f6a5..a4a36e5 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53210.dart.weak.transformed.expect
@@ -22,11 +22,11 @@
   static factory f2 = self::ET1|f2;
   static tearoff f2 = self::ET1|_#f2#tearOff;
 }
-static inline-class-member method ET1|c0(dynamic id) → self::ET1 /* = core::int */ {
+static inline-class-member method ET1|c0(core::int id) → self::ET1 /* = core::int */ {
   lowered final self::ET1 /* = core::int */ #this = id;
   return #this;
 }
-static inline-class-member method ET1|_#c0#tearOff(dynamic id) → self::ET1 /* = core::int */
+static inline-class-member method ET1|_#c0#tearOff(core::int id) → self::ET1 /* = core::int */
   return self::ET1|c0(id);
 static inline-class-member method ET1|c1() → self::ET1 /* = core::int */ {
   lowered final self::ET1 /* = core::int */ #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart
new file mode 100644
index 0000000..7bc1e29
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+extension type ET1(int id) {}
+
+extension type ET2<T>(T id) {}
+
+extension type ET3.new(int id) {}
+
+extension type ET4<T>.new(T id) {}
+
+extension type ET5.n(int id) {}
+
+extension type ET6<T>.n(T id) {}
+
+main() {
+  ET1.new.expectStaticType<Exactly<ET1 Function(int)>>();
+  ET2<String>.new.expectStaticType<Exactly<ET2<String> Function(String)>>();
+  ET3.new.expectStaticType<Exactly<ET3 Function(int)>>();
+  ET4<String>.new.expectStaticType<Exactly<ET4<String> Function(String)>>();
+  ET5.n.expectStaticType<Exactly<ET5 Function(int)>>();
+  ET6<String>.n.expectStaticType<Exactly<ET6<String> Function(String)>>();
+}
+
+extension StaticType<T> on T {
+  T expectStaticType<R extends Exactly<T>>() {
+    return this;
+  }
+}
+
+typedef Exactly<T> = T Function(T);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.strong.expect
new file mode 100644
index 0000000..36be6ec
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.strong.expect
@@ -0,0 +1,94 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Exactly<invariant T extends core::Object? = dynamic> = (T%) → T%;
+extension StaticType<T extends core::Object? = dynamic> on T% {
+  method expectStaticType = self::StaticType|expectStaticType;
+  tearoff expectStaticType = self::StaticType|get#expectStaticType;
+}
+extension type ET1(core::int id) {
+  constructor • = self::ET1|;
+  tearoff • = self::ET1|_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+  constructor • = self::ET2|;
+  tearoff • = self::ET2|_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  constructor • = self::ET3|;
+  tearoff • = self::ET3|_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+  constructor • = self::ET4|;
+  tearoff • = self::ET4|_#new#tearOff;
+}
+extension type ET5(core::int id) {
+  constructor n = self::ET5|n;
+  tearoff n = self::ET5|_#n#tearOff;
+}
+extension type ET6<T extends core::Object? = dynamic>(T% id) {
+  constructor n = self::ET6|n;
+  tearoff n = self::ET6|_#n#tearOff;
+}
+static inline-class-member method ET1|(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET1|_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|(id);
+static inline-class-member method ET2|<T extends core::Object? = dynamic>(self::ET2|::T% id) → self::ET2<self::ET2|::T%> /* = self::ET2|::T% */ {
+  lowered final self::ET2<self::ET2|::T%> /* = self::ET2|::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET2|_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|_#new#tearOff::T% id) → self::ET2<self::ET2|_#new#tearOff::T%> /* = self::ET2|_#new#tearOff::T% */
+  return self::ET2|<self::ET2|_#new#tearOff::T%>(id);
+static inline-class-member method ET3|(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET3|_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|(id);
+static inline-class-member method ET4|<T extends core::Object? = dynamic>(self::ET4|::T% id) → self::ET4<self::ET4|::T%> /* = self::ET4|::T% */ {
+  lowered final self::ET4<self::ET4|::T%> /* = self::ET4|::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET4|_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|_#new#tearOff::T% id) → self::ET4<self::ET4|_#new#tearOff::T%> /* = self::ET4|_#new#tearOff::T% */
+  return self::ET4|<self::ET4|_#new#tearOff::T%>(id);
+static inline-class-member method ET5|n(core::int id) → self::ET5 /* = core::int */ {
+  lowered final self::ET5 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET5|_#n#tearOff(core::int id) → self::ET5 /* = core::int */
+  return self::ET5|n(id);
+static inline-class-member method ET6|n<T extends core::Object? = dynamic>(self::ET6|n::T% id) → self::ET6<self::ET6|n::T%> /* = self::ET6|n::T% */ {
+  lowered final self::ET6<self::ET6|n::T%> /* = self::ET6|n::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET6|_#n#tearOff<T extends core::Object? = dynamic>(self::ET6|_#n#tearOff::T% id) → self::ET6<self::ET6|_#n#tearOff::T%> /* = self::ET6|_#n#tearOff::T% */
+  return self::ET6|n<self::ET6|_#n#tearOff::T%>(id);
+static method main() → dynamic {
+  self::StaticType|expectStaticType<(core::int) → self::ET1 /* = core::int */, ((core::int) → self::ET1 /* = core::int */) → (core::int) → self::ET1 /* = core::int */>(#C1);
+  self::StaticType|expectStaticType<(core::String) → self::ET2<core::String> /* = core::String */, ((core::String) → self::ET2<core::String> /* = core::String */) → (core::String) → self::ET2<core::String> /* = core::String */>(#C3);
+  self::StaticType|expectStaticType<(core::int) → self::ET3 /* = core::int */, ((core::int) → self::ET3 /* = core::int */) → (core::int) → self::ET3 /* = core::int */>(#C4);
+  self::StaticType|expectStaticType<(core::String) → self::ET4<core::String> /* = core::String */, ((core::String) → self::ET4<core::String> /* = core::String */) → (core::String) → self::ET4<core::String> /* = core::String */>(#C6);
+  self::StaticType|expectStaticType<(core::int) → self::ET5 /* = core::int */, ((core::int) → self::ET5 /* = core::int */) → (core::int) → self::ET5 /* = core::int */>(#C7);
+  self::StaticType|expectStaticType<(core::String) → self::ET6<core::String> /* = core::String */, ((core::String) → self::ET6<core::String> /* = core::String */) → (core::String) → self::ET6<core::String> /* = core::String */>(#C9);
+}
+static extension-member method StaticType|expectStaticType<T extends core::Object? = dynamic, R extends (self::StaticType|expectStaticType::T%) → self::StaticType|expectStaticType::T% = (dynamic) → dynamic>(lowered final self::StaticType|expectStaticType::T% #this) → self::StaticType|expectStaticType::T% {
+  return #this;
+}
+static extension-member method StaticType|get#expectStaticType<T extends core::Object? = dynamic>(lowered final self::StaticType|get#expectStaticType::T% #this) → <R extends (self::StaticType|get#expectStaticType::T%) → self::StaticType|get#expectStaticType::T% = (dynamic) → dynamic>() → self::StaticType|get#expectStaticType::T%
+  return <R extends (self::StaticType|get#expectStaticType::T%) → self::StaticType|get#expectStaticType::T% = (dynamic) → dynamic>() → self::StaticType|get#expectStaticType::T% => self::StaticType|expectStaticType<self::StaticType|get#expectStaticType::T%, R>(#this);
+
+constants  {
+  #C1 = static-tearoff self::ET1|_#new#tearOff
+  #C2 = static-tearoff self::ET2|_#new#tearOff
+  #C3 = instantiation #C2 <core::String>
+  #C4 = static-tearoff self::ET3|_#new#tearOff
+  #C5 = static-tearoff self::ET4|_#new#tearOff
+  #C6 = instantiation #C5 <core::String>
+  #C7 = static-tearoff self::ET5|_#n#tearOff
+  #C8 = static-tearoff self::ET6|_#n#tearOff
+  #C9 = instantiation #C8 <core::String>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.strong.transformed.expect
new file mode 100644
index 0000000..36be6ec
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.strong.transformed.expect
@@ -0,0 +1,94 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Exactly<invariant T extends core::Object? = dynamic> = (T%) → T%;
+extension StaticType<T extends core::Object? = dynamic> on T% {
+  method expectStaticType = self::StaticType|expectStaticType;
+  tearoff expectStaticType = self::StaticType|get#expectStaticType;
+}
+extension type ET1(core::int id) {
+  constructor • = self::ET1|;
+  tearoff • = self::ET1|_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+  constructor • = self::ET2|;
+  tearoff • = self::ET2|_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  constructor • = self::ET3|;
+  tearoff • = self::ET3|_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+  constructor • = self::ET4|;
+  tearoff • = self::ET4|_#new#tearOff;
+}
+extension type ET5(core::int id) {
+  constructor n = self::ET5|n;
+  tearoff n = self::ET5|_#n#tearOff;
+}
+extension type ET6<T extends core::Object? = dynamic>(T% id) {
+  constructor n = self::ET6|n;
+  tearoff n = self::ET6|_#n#tearOff;
+}
+static inline-class-member method ET1|(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET1|_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|(id);
+static inline-class-member method ET2|<T extends core::Object? = dynamic>(self::ET2|::T% id) → self::ET2<self::ET2|::T%> /* = self::ET2|::T% */ {
+  lowered final self::ET2<self::ET2|::T%> /* = self::ET2|::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET2|_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|_#new#tearOff::T% id) → self::ET2<self::ET2|_#new#tearOff::T%> /* = self::ET2|_#new#tearOff::T% */
+  return self::ET2|<self::ET2|_#new#tearOff::T%>(id);
+static inline-class-member method ET3|(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET3|_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|(id);
+static inline-class-member method ET4|<T extends core::Object? = dynamic>(self::ET4|::T% id) → self::ET4<self::ET4|::T%> /* = self::ET4|::T% */ {
+  lowered final self::ET4<self::ET4|::T%> /* = self::ET4|::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET4|_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|_#new#tearOff::T% id) → self::ET4<self::ET4|_#new#tearOff::T%> /* = self::ET4|_#new#tearOff::T% */
+  return self::ET4|<self::ET4|_#new#tearOff::T%>(id);
+static inline-class-member method ET5|n(core::int id) → self::ET5 /* = core::int */ {
+  lowered final self::ET5 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET5|_#n#tearOff(core::int id) → self::ET5 /* = core::int */
+  return self::ET5|n(id);
+static inline-class-member method ET6|n<T extends core::Object? = dynamic>(self::ET6|n::T% id) → self::ET6<self::ET6|n::T%> /* = self::ET6|n::T% */ {
+  lowered final self::ET6<self::ET6|n::T%> /* = self::ET6|n::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET6|_#n#tearOff<T extends core::Object? = dynamic>(self::ET6|_#n#tearOff::T% id) → self::ET6<self::ET6|_#n#tearOff::T%> /* = self::ET6|_#n#tearOff::T% */
+  return self::ET6|n<self::ET6|_#n#tearOff::T%>(id);
+static method main() → dynamic {
+  self::StaticType|expectStaticType<(core::int) → self::ET1 /* = core::int */, ((core::int) → self::ET1 /* = core::int */) → (core::int) → self::ET1 /* = core::int */>(#C1);
+  self::StaticType|expectStaticType<(core::String) → self::ET2<core::String> /* = core::String */, ((core::String) → self::ET2<core::String> /* = core::String */) → (core::String) → self::ET2<core::String> /* = core::String */>(#C3);
+  self::StaticType|expectStaticType<(core::int) → self::ET3 /* = core::int */, ((core::int) → self::ET3 /* = core::int */) → (core::int) → self::ET3 /* = core::int */>(#C4);
+  self::StaticType|expectStaticType<(core::String) → self::ET4<core::String> /* = core::String */, ((core::String) → self::ET4<core::String> /* = core::String */) → (core::String) → self::ET4<core::String> /* = core::String */>(#C6);
+  self::StaticType|expectStaticType<(core::int) → self::ET5 /* = core::int */, ((core::int) → self::ET5 /* = core::int */) → (core::int) → self::ET5 /* = core::int */>(#C7);
+  self::StaticType|expectStaticType<(core::String) → self::ET6<core::String> /* = core::String */, ((core::String) → self::ET6<core::String> /* = core::String */) → (core::String) → self::ET6<core::String> /* = core::String */>(#C9);
+}
+static extension-member method StaticType|expectStaticType<T extends core::Object? = dynamic, R extends (self::StaticType|expectStaticType::T%) → self::StaticType|expectStaticType::T% = (dynamic) → dynamic>(lowered final self::StaticType|expectStaticType::T% #this) → self::StaticType|expectStaticType::T% {
+  return #this;
+}
+static extension-member method StaticType|get#expectStaticType<T extends core::Object? = dynamic>(lowered final self::StaticType|get#expectStaticType::T% #this) → <R extends (self::StaticType|get#expectStaticType::T%) → self::StaticType|get#expectStaticType::T% = (dynamic) → dynamic>() → self::StaticType|get#expectStaticType::T%
+  return <R extends (self::StaticType|get#expectStaticType::T%) → self::StaticType|get#expectStaticType::T% = (dynamic) → dynamic>() → self::StaticType|get#expectStaticType::T% => self::StaticType|expectStaticType<self::StaticType|get#expectStaticType::T%, R>(#this);
+
+constants  {
+  #C1 = static-tearoff self::ET1|_#new#tearOff
+  #C2 = static-tearoff self::ET2|_#new#tearOff
+  #C3 = instantiation #C2 <core::String>
+  #C4 = static-tearoff self::ET3|_#new#tearOff
+  #C5 = static-tearoff self::ET4|_#new#tearOff
+  #C6 = instantiation #C5 <core::String>
+  #C7 = static-tearoff self::ET5|_#n#tearOff
+  #C8 = static-tearoff self::ET6|_#n#tearOff
+  #C9 = instantiation #C8 <core::String>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.textual_outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.textual_outline.expect
new file mode 100644
index 0000000..8be6056
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+extension type ET1(int id) {} extension type ET2<T>(T id) {} extension type ET3.new(int id) {} extension type ET4<T>.new(T id) {} extension type ET5.n(int id) {} extension type ET6<T>.n(T id) {}
+main() {}
+extension StaticType<T> on T {
+  T expectStaticType<R extends Exactly<T>>() {}
+}
+typedef Exactly<T> = T Function(T);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b84ae89
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+---- unknown chunk starts ----
+extension type ET1(int id) {} extension type ET2<T>(T id) {} extension type ET3.new(int id) {} extension type ET4<T>.new(T id) {} extension type ET5.n(int id) {} extension type ET6<T>.n(T id) {}
+---- unknown chunk ends ----
+extension StaticType<T> on T {
+  T expectStaticType<R extends Exactly<T>>() {}
+}
+main() {}
+typedef Exactly<T> = T Function(T);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.weak.expect
new file mode 100644
index 0000000..2fb28c1
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.weak.expect
@@ -0,0 +1,94 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Exactly<invariant T extends core::Object? = dynamic> = (T%) → T%;
+extension StaticType<T extends core::Object? = dynamic> on T% {
+  method expectStaticType = self::StaticType|expectStaticType;
+  tearoff expectStaticType = self::StaticType|get#expectStaticType;
+}
+extension type ET1(core::int id) {
+  constructor • = self::ET1|;
+  tearoff • = self::ET1|_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+  constructor • = self::ET2|;
+  tearoff • = self::ET2|_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  constructor • = self::ET3|;
+  tearoff • = self::ET3|_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+  constructor • = self::ET4|;
+  tearoff • = self::ET4|_#new#tearOff;
+}
+extension type ET5(core::int id) {
+  constructor n = self::ET5|n;
+  tearoff n = self::ET5|_#n#tearOff;
+}
+extension type ET6<T extends core::Object? = dynamic>(T% id) {
+  constructor n = self::ET6|n;
+  tearoff n = self::ET6|_#n#tearOff;
+}
+static inline-class-member method ET1|(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET1|_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|(id);
+static inline-class-member method ET2|<T extends core::Object? = dynamic>(self::ET2|::T% id) → self::ET2<self::ET2|::T%> /* = self::ET2|::T% */ {
+  lowered final self::ET2<self::ET2|::T%> /* = self::ET2|::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET2|_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|_#new#tearOff::T% id) → self::ET2<self::ET2|_#new#tearOff::T%> /* = self::ET2|_#new#tearOff::T% */
+  return self::ET2|<self::ET2|_#new#tearOff::T%>(id);
+static inline-class-member method ET3|(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET3|_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|(id);
+static inline-class-member method ET4|<T extends core::Object? = dynamic>(self::ET4|::T% id) → self::ET4<self::ET4|::T%> /* = self::ET4|::T% */ {
+  lowered final self::ET4<self::ET4|::T%> /* = self::ET4|::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET4|_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|_#new#tearOff::T% id) → self::ET4<self::ET4|_#new#tearOff::T%> /* = self::ET4|_#new#tearOff::T% */
+  return self::ET4|<self::ET4|_#new#tearOff::T%>(id);
+static inline-class-member method ET5|n(core::int id) → self::ET5 /* = core::int */ {
+  lowered final self::ET5 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET5|_#n#tearOff(core::int id) → self::ET5 /* = core::int */
+  return self::ET5|n(id);
+static inline-class-member method ET6|n<T extends core::Object? = dynamic>(self::ET6|n::T% id) → self::ET6<self::ET6|n::T%> /* = self::ET6|n::T% */ {
+  lowered final self::ET6<self::ET6|n::T%> /* = self::ET6|n::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET6|_#n#tearOff<T extends core::Object? = dynamic>(self::ET6|_#n#tearOff::T% id) → self::ET6<self::ET6|_#n#tearOff::T%> /* = self::ET6|_#n#tearOff::T% */
+  return self::ET6|n<self::ET6|_#n#tearOff::T%>(id);
+static method main() → dynamic {
+  self::StaticType|expectStaticType<(core::int) → self::ET1 /* = core::int */, ((core::int) → self::ET1 /* = core::int */) → (core::int) → self::ET1 /* = core::int */>(#C1);
+  self::StaticType|expectStaticType<(core::String) → self::ET2<core::String> /* = core::String */, ((core::String) → self::ET2<core::String> /* = core::String */) → (core::String) → self::ET2<core::String> /* = core::String */>(#C3);
+  self::StaticType|expectStaticType<(core::int) → self::ET3 /* = core::int */, ((core::int) → self::ET3 /* = core::int */) → (core::int) → self::ET3 /* = core::int */>(#C4);
+  self::StaticType|expectStaticType<(core::String) → self::ET4<core::String> /* = core::String */, ((core::String) → self::ET4<core::String> /* = core::String */) → (core::String) → self::ET4<core::String> /* = core::String */>(#C6);
+  self::StaticType|expectStaticType<(core::int) → self::ET5 /* = core::int */, ((core::int) → self::ET5 /* = core::int */) → (core::int) → self::ET5 /* = core::int */>(#C7);
+  self::StaticType|expectStaticType<(core::String) → self::ET6<core::String> /* = core::String */, ((core::String) → self::ET6<core::String> /* = core::String */) → (core::String) → self::ET6<core::String> /* = core::String */>(#C9);
+}
+static extension-member method StaticType|expectStaticType<T extends core::Object? = dynamic, R extends (self::StaticType|expectStaticType::T%) → self::StaticType|expectStaticType::T% = (dynamic) → dynamic>(lowered final self::StaticType|expectStaticType::T% #this) → self::StaticType|expectStaticType::T% {
+  return #this;
+}
+static extension-member method StaticType|get#expectStaticType<T extends core::Object? = dynamic>(lowered final self::StaticType|get#expectStaticType::T% #this) → <R extends (self::StaticType|get#expectStaticType::T%) → self::StaticType|get#expectStaticType::T% = (dynamic) → dynamic>() → self::StaticType|get#expectStaticType::T%
+  return <R extends (self::StaticType|get#expectStaticType::T%) → self::StaticType|get#expectStaticType::T% = (dynamic) → dynamic>() → self::StaticType|get#expectStaticType::T% => self::StaticType|expectStaticType<self::StaticType|get#expectStaticType::T%, R>(#this);
+
+constants  {
+  #C1 = static-tearoff self::ET1|_#new#tearOff
+  #C2 = static-tearoff self::ET2|_#new#tearOff
+  #C3 = instantiation #C2 <core::String*>
+  #C4 = static-tearoff self::ET3|_#new#tearOff
+  #C5 = static-tearoff self::ET4|_#new#tearOff
+  #C6 = instantiation #C5 <core::String*>
+  #C7 = static-tearoff self::ET5|_#n#tearOff
+  #C8 = static-tearoff self::ET6|_#n#tearOff
+  #C9 = instantiation #C8 <core::String*>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.weak.modular.expect
new file mode 100644
index 0000000..2fb28c1
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.weak.modular.expect
@@ -0,0 +1,94 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Exactly<invariant T extends core::Object? = dynamic> = (T%) → T%;
+extension StaticType<T extends core::Object? = dynamic> on T% {
+  method expectStaticType = self::StaticType|expectStaticType;
+  tearoff expectStaticType = self::StaticType|get#expectStaticType;
+}
+extension type ET1(core::int id) {
+  constructor • = self::ET1|;
+  tearoff • = self::ET1|_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+  constructor • = self::ET2|;
+  tearoff • = self::ET2|_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  constructor • = self::ET3|;
+  tearoff • = self::ET3|_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+  constructor • = self::ET4|;
+  tearoff • = self::ET4|_#new#tearOff;
+}
+extension type ET5(core::int id) {
+  constructor n = self::ET5|n;
+  tearoff n = self::ET5|_#n#tearOff;
+}
+extension type ET6<T extends core::Object? = dynamic>(T% id) {
+  constructor n = self::ET6|n;
+  tearoff n = self::ET6|_#n#tearOff;
+}
+static inline-class-member method ET1|(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET1|_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|(id);
+static inline-class-member method ET2|<T extends core::Object? = dynamic>(self::ET2|::T% id) → self::ET2<self::ET2|::T%> /* = self::ET2|::T% */ {
+  lowered final self::ET2<self::ET2|::T%> /* = self::ET2|::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET2|_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|_#new#tearOff::T% id) → self::ET2<self::ET2|_#new#tearOff::T%> /* = self::ET2|_#new#tearOff::T% */
+  return self::ET2|<self::ET2|_#new#tearOff::T%>(id);
+static inline-class-member method ET3|(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET3|_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|(id);
+static inline-class-member method ET4|<T extends core::Object? = dynamic>(self::ET4|::T% id) → self::ET4<self::ET4|::T%> /* = self::ET4|::T% */ {
+  lowered final self::ET4<self::ET4|::T%> /* = self::ET4|::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET4|_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|_#new#tearOff::T% id) → self::ET4<self::ET4|_#new#tearOff::T%> /* = self::ET4|_#new#tearOff::T% */
+  return self::ET4|<self::ET4|_#new#tearOff::T%>(id);
+static inline-class-member method ET5|n(core::int id) → self::ET5 /* = core::int */ {
+  lowered final self::ET5 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET5|_#n#tearOff(core::int id) → self::ET5 /* = core::int */
+  return self::ET5|n(id);
+static inline-class-member method ET6|n<T extends core::Object? = dynamic>(self::ET6|n::T% id) → self::ET6<self::ET6|n::T%> /* = self::ET6|n::T% */ {
+  lowered final self::ET6<self::ET6|n::T%> /* = self::ET6|n::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET6|_#n#tearOff<T extends core::Object? = dynamic>(self::ET6|_#n#tearOff::T% id) → self::ET6<self::ET6|_#n#tearOff::T%> /* = self::ET6|_#n#tearOff::T% */
+  return self::ET6|n<self::ET6|_#n#tearOff::T%>(id);
+static method main() → dynamic {
+  self::StaticType|expectStaticType<(core::int) → self::ET1 /* = core::int */, ((core::int) → self::ET1 /* = core::int */) → (core::int) → self::ET1 /* = core::int */>(#C1);
+  self::StaticType|expectStaticType<(core::String) → self::ET2<core::String> /* = core::String */, ((core::String) → self::ET2<core::String> /* = core::String */) → (core::String) → self::ET2<core::String> /* = core::String */>(#C3);
+  self::StaticType|expectStaticType<(core::int) → self::ET3 /* = core::int */, ((core::int) → self::ET3 /* = core::int */) → (core::int) → self::ET3 /* = core::int */>(#C4);
+  self::StaticType|expectStaticType<(core::String) → self::ET4<core::String> /* = core::String */, ((core::String) → self::ET4<core::String> /* = core::String */) → (core::String) → self::ET4<core::String> /* = core::String */>(#C6);
+  self::StaticType|expectStaticType<(core::int) → self::ET5 /* = core::int */, ((core::int) → self::ET5 /* = core::int */) → (core::int) → self::ET5 /* = core::int */>(#C7);
+  self::StaticType|expectStaticType<(core::String) → self::ET6<core::String> /* = core::String */, ((core::String) → self::ET6<core::String> /* = core::String */) → (core::String) → self::ET6<core::String> /* = core::String */>(#C9);
+}
+static extension-member method StaticType|expectStaticType<T extends core::Object? = dynamic, R extends (self::StaticType|expectStaticType::T%) → self::StaticType|expectStaticType::T% = (dynamic) → dynamic>(lowered final self::StaticType|expectStaticType::T% #this) → self::StaticType|expectStaticType::T% {
+  return #this;
+}
+static extension-member method StaticType|get#expectStaticType<T extends core::Object? = dynamic>(lowered final self::StaticType|get#expectStaticType::T% #this) → <R extends (self::StaticType|get#expectStaticType::T%) → self::StaticType|get#expectStaticType::T% = (dynamic) → dynamic>() → self::StaticType|get#expectStaticType::T%
+  return <R extends (self::StaticType|get#expectStaticType::T%) → self::StaticType|get#expectStaticType::T% = (dynamic) → dynamic>() → self::StaticType|get#expectStaticType::T% => self::StaticType|expectStaticType<self::StaticType|get#expectStaticType::T%, R>(#this);
+
+constants  {
+  #C1 = static-tearoff self::ET1|_#new#tearOff
+  #C2 = static-tearoff self::ET2|_#new#tearOff
+  #C3 = instantiation #C2 <core::String*>
+  #C4 = static-tearoff self::ET3|_#new#tearOff
+  #C5 = static-tearoff self::ET4|_#new#tearOff
+  #C6 = instantiation #C5 <core::String*>
+  #C7 = static-tearoff self::ET5|_#n#tearOff
+  #C8 = static-tearoff self::ET6|_#n#tearOff
+  #C9 = instantiation #C8 <core::String*>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.weak.outline.expect
new file mode 100644
index 0000000..14d468d
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.weak.outline.expect
@@ -0,0 +1,63 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Exactly<invariant T extends core::Object? = dynamic> = (T%) → T%;
+extension StaticType<T extends core::Object? = dynamic> on T% {
+  method expectStaticType = self::StaticType|expectStaticType;
+  tearoff expectStaticType = self::StaticType|get#expectStaticType;
+}
+extension type ET1(core::int id) {
+  constructor • = self::ET1|;
+  tearoff • = self::ET1|_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+  constructor • = self::ET2|;
+  tearoff • = self::ET2|_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  constructor • = self::ET3|;
+  tearoff • = self::ET3|_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+  constructor • = self::ET4|;
+  tearoff • = self::ET4|_#new#tearOff;
+}
+extension type ET5(core::int id) {
+  constructor n = self::ET5|n;
+  tearoff n = self::ET5|_#n#tearOff;
+}
+extension type ET6<T extends core::Object? = dynamic>(T% id) {
+  constructor n = self::ET6|n;
+  tearoff n = self::ET6|_#n#tearOff;
+}
+static inline-class-member method ET1|(core::int id) → self::ET1 /* = core::int */
+  ;
+static inline-class-member method ET1|_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|(id);
+static inline-class-member method ET2|<T extends core::Object? = dynamic>(self::ET2|::T% id) → self::ET2<self::ET2|::T%> /* = self::ET2|::T% */
+  ;
+static inline-class-member method ET2|_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|_#new#tearOff::T% id) → self::ET2<self::ET2|_#new#tearOff::T%> /* = self::ET2|_#new#tearOff::T% */
+  return self::ET2|<self::ET2|_#new#tearOff::T%>(id);
+static inline-class-member method ET3|(core::int id) → self::ET3 /* = core::int */
+  ;
+static inline-class-member method ET3|_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|(id);
+static inline-class-member method ET4|<T extends core::Object? = dynamic>(self::ET4|::T% id) → self::ET4<self::ET4|::T%> /* = self::ET4|::T% */
+  ;
+static inline-class-member method ET4|_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|_#new#tearOff::T% id) → self::ET4<self::ET4|_#new#tearOff::T%> /* = self::ET4|_#new#tearOff::T% */
+  return self::ET4|<self::ET4|_#new#tearOff::T%>(id);
+static inline-class-member method ET5|n(core::int id) → self::ET5 /* = core::int */
+  ;
+static inline-class-member method ET5|_#n#tearOff(core::int id) → self::ET5 /* = core::int */
+  return self::ET5|n(id);
+static inline-class-member method ET6|n<T extends core::Object? = dynamic>(self::ET6|n::T% id) → self::ET6<self::ET6|n::T%> /* = self::ET6|n::T% */
+  ;
+static inline-class-member method ET6|_#n#tearOff<T extends core::Object? = dynamic>(self::ET6|_#n#tearOff::T% id) → self::ET6<self::ET6|_#n#tearOff::T%> /* = self::ET6|_#n#tearOff::T% */
+  return self::ET6|n<self::ET6|_#n#tearOff::T%>(id);
+static method main() → dynamic
+  ;
+static extension-member method StaticType|expectStaticType<T extends core::Object? = dynamic, R extends (self::StaticType|expectStaticType::T%) → self::StaticType|expectStaticType::T% = (dynamic) → dynamic>(lowered final self::StaticType|expectStaticType::T% #this) → self::StaticType|expectStaticType::T%
+  ;
+static extension-member method StaticType|get#expectStaticType<T extends core::Object? = dynamic>(lowered final self::StaticType|get#expectStaticType::T% #this) → <R extends (self::StaticType|get#expectStaticType::T%) → self::StaticType|get#expectStaticType::T% = (dynamic) → dynamic>() → self::StaticType|get#expectStaticType::T%
+  return <R extends (self::StaticType|get#expectStaticType::T%) → self::StaticType|get#expectStaticType::T% = (dynamic) → dynamic>() → self::StaticType|get#expectStaticType::T% => self::StaticType|expectStaticType<self::StaticType|get#expectStaticType::T%, R>(#this);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.weak.transformed.expect
new file mode 100644
index 0000000..2fb28c1
--- /dev/null
+++ b/pkg/front_end/testcases/inline_class/extension_types/issue53211.dart.weak.transformed.expect
@@ -0,0 +1,94 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef Exactly<invariant T extends core::Object? = dynamic> = (T%) → T%;
+extension StaticType<T extends core::Object? = dynamic> on T% {
+  method expectStaticType = self::StaticType|expectStaticType;
+  tearoff expectStaticType = self::StaticType|get#expectStaticType;
+}
+extension type ET1(core::int id) {
+  constructor • = self::ET1|;
+  tearoff • = self::ET1|_#new#tearOff;
+}
+extension type ET2<T extends core::Object? = dynamic>(T% id) {
+  constructor • = self::ET2|;
+  tearoff • = self::ET2|_#new#tearOff;
+}
+extension type ET3(core::int id) {
+  constructor • = self::ET3|;
+  tearoff • = self::ET3|_#new#tearOff;
+}
+extension type ET4<T extends core::Object? = dynamic>(T% id) {
+  constructor • = self::ET4|;
+  tearoff • = self::ET4|_#new#tearOff;
+}
+extension type ET5(core::int id) {
+  constructor n = self::ET5|n;
+  tearoff n = self::ET5|_#n#tearOff;
+}
+extension type ET6<T extends core::Object? = dynamic>(T% id) {
+  constructor n = self::ET6|n;
+  tearoff n = self::ET6|_#n#tearOff;
+}
+static inline-class-member method ET1|(core::int id) → self::ET1 /* = core::int */ {
+  lowered final self::ET1 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET1|_#new#tearOff(core::int id) → self::ET1 /* = core::int */
+  return self::ET1|(id);
+static inline-class-member method ET2|<T extends core::Object? = dynamic>(self::ET2|::T% id) → self::ET2<self::ET2|::T%> /* = self::ET2|::T% */ {
+  lowered final self::ET2<self::ET2|::T%> /* = self::ET2|::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET2|_#new#tearOff<T extends core::Object? = dynamic>(self::ET2|_#new#tearOff::T% id) → self::ET2<self::ET2|_#new#tearOff::T%> /* = self::ET2|_#new#tearOff::T% */
+  return self::ET2|<self::ET2|_#new#tearOff::T%>(id);
+static inline-class-member method ET3|(core::int id) → self::ET3 /* = core::int */ {
+  lowered final self::ET3 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET3|_#new#tearOff(core::int id) → self::ET3 /* = core::int */
+  return self::ET3|(id);
+static inline-class-member method ET4|<T extends core::Object? = dynamic>(self::ET4|::T% id) → self::ET4<self::ET4|::T%> /* = self::ET4|::T% */ {
+  lowered final self::ET4<self::ET4|::T%> /* = self::ET4|::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET4|_#new#tearOff<T extends core::Object? = dynamic>(self::ET4|_#new#tearOff::T% id) → self::ET4<self::ET4|_#new#tearOff::T%> /* = self::ET4|_#new#tearOff::T% */
+  return self::ET4|<self::ET4|_#new#tearOff::T%>(id);
+static inline-class-member method ET5|n(core::int id) → self::ET5 /* = core::int */ {
+  lowered final self::ET5 /* = core::int */ #this = id;
+  return #this;
+}
+static inline-class-member method ET5|_#n#tearOff(core::int id) → self::ET5 /* = core::int */
+  return self::ET5|n(id);
+static inline-class-member method ET6|n<T extends core::Object? = dynamic>(self::ET6|n::T% id) → self::ET6<self::ET6|n::T%> /* = self::ET6|n::T% */ {
+  lowered final self::ET6<self::ET6|n::T%> /* = self::ET6|n::T% */ #this = id;
+  return #this;
+}
+static inline-class-member method ET6|_#n#tearOff<T extends core::Object? = dynamic>(self::ET6|_#n#tearOff::T% id) → self::ET6<self::ET6|_#n#tearOff::T%> /* = self::ET6|_#n#tearOff::T% */
+  return self::ET6|n<self::ET6|_#n#tearOff::T%>(id);
+static method main() → dynamic {
+  self::StaticType|expectStaticType<(core::int) → self::ET1 /* = core::int */, ((core::int) → self::ET1 /* = core::int */) → (core::int) → self::ET1 /* = core::int */>(#C1);
+  self::StaticType|expectStaticType<(core::String) → self::ET2<core::String> /* = core::String */, ((core::String) → self::ET2<core::String> /* = core::String */) → (core::String) → self::ET2<core::String> /* = core::String */>(#C3);
+  self::StaticType|expectStaticType<(core::int) → self::ET3 /* = core::int */, ((core::int) → self::ET3 /* = core::int */) → (core::int) → self::ET3 /* = core::int */>(#C4);
+  self::StaticType|expectStaticType<(core::String) → self::ET4<core::String> /* = core::String */, ((core::String) → self::ET4<core::String> /* = core::String */) → (core::String) → self::ET4<core::String> /* = core::String */>(#C6);
+  self::StaticType|expectStaticType<(core::int) → self::ET5 /* = core::int */, ((core::int) → self::ET5 /* = core::int */) → (core::int) → self::ET5 /* = core::int */>(#C7);
+  self::StaticType|expectStaticType<(core::String) → self::ET6<core::String> /* = core::String */, ((core::String) → self::ET6<core::String> /* = core::String */) → (core::String) → self::ET6<core::String> /* = core::String */>(#C9);
+}
+static extension-member method StaticType|expectStaticType<T extends core::Object? = dynamic, R extends (self::StaticType|expectStaticType::T%) → self::StaticType|expectStaticType::T% = (dynamic) → dynamic>(lowered final self::StaticType|expectStaticType::T% #this) → self::StaticType|expectStaticType::T% {
+  return #this;
+}
+static extension-member method StaticType|get#expectStaticType<T extends core::Object? = dynamic>(lowered final self::StaticType|get#expectStaticType::T% #this) → <R extends (self::StaticType|get#expectStaticType::T%) → self::StaticType|get#expectStaticType::T% = (dynamic) → dynamic>() → self::StaticType|get#expectStaticType::T%
+  return <R extends (self::StaticType|get#expectStaticType::T%) → self::StaticType|get#expectStaticType::T% = (dynamic) → dynamic>() → self::StaticType|get#expectStaticType::T% => self::StaticType|expectStaticType<self::StaticType|get#expectStaticType::T%, R>(#this);
+
+constants  {
+  #C1 = static-tearoff self::ET1|_#new#tearOff
+  #C2 = static-tearoff self::ET2|_#new#tearOff
+  #C3 = instantiation #C2 <core::String*>
+  #C4 = static-tearoff self::ET3|_#new#tearOff
+  #C5 = static-tearoff self::ET4|_#new#tearOff
+  #C6 = instantiation #C5 <core::String*>
+  #C7 = static-tearoff self::ET5|_#n#tearOff
+  #C8 = static-tearoff self::ET6|_#n#tearOff
+  #C9 = instantiation #C8 <core::String*>
+}
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.expect
index e905037..e623a74 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.expect
@@ -15,11 +15,11 @@
   constructor name1 = self::A|name1;
   tearoff name1 = self::A|_#name1#tearOff;
 }
-static inline-class-member method A|_(dynamic value) → self::A /* = core::int */ {
+static inline-class-member method A|_(core::int value) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = value;
   return #this;
 }
-static inline-class-member method A|_#_#tearOff(dynamic value) → self::A /* = core::int */
+static inline-class-member method A|_#_#tearOff(core::int value) → self::A /* = core::int */
   return self::A|_(value);
 static inline-class-member method A|name1(core::int value) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = value;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.transformed.expect
index e905037..e623a74 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.strong.transformed.expect
@@ -15,11 +15,11 @@
   constructor name1 = self::A|name1;
   tearoff name1 = self::A|_#name1#tearOff;
 }
-static inline-class-member method A|_(dynamic value) → self::A /* = core::int */ {
+static inline-class-member method A|_(core::int value) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = value;
   return #this;
 }
-static inline-class-member method A|_#_#tearOff(dynamic value) → self::A /* = core::int */
+static inline-class-member method A|_#_#tearOff(core::int value) → self::A /* = core::int */
   return self::A|_(value);
 static inline-class-member method A|name1(core::int value) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = value;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.expect
index e905037..e623a74 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.expect
@@ -15,11 +15,11 @@
   constructor name1 = self::A|name1;
   tearoff name1 = self::A|_#name1#tearOff;
 }
-static inline-class-member method A|_(dynamic value) → self::A /* = core::int */ {
+static inline-class-member method A|_(core::int value) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = value;
   return #this;
 }
-static inline-class-member method A|_#_#tearOff(dynamic value) → self::A /* = core::int */
+static inline-class-member method A|_#_#tearOff(core::int value) → self::A /* = core::int */
   return self::A|_(value);
 static inline-class-member method A|name1(core::int value) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = value;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.modular.expect
index e905037..e623a74 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.modular.expect
@@ -15,11 +15,11 @@
   constructor name1 = self::A|name1;
   tearoff name1 = self::A|_#name1#tearOff;
 }
-static inline-class-member method A|_(dynamic value) → self::A /* = core::int */ {
+static inline-class-member method A|_(core::int value) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = value;
   return #this;
 }
-static inline-class-member method A|_#_#tearOff(dynamic value) → self::A /* = core::int */
+static inline-class-member method A|_#_#tearOff(core::int value) → self::A /* = core::int */
   return self::A|_(value);
 static inline-class-member method A|name1(core::int value) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = value;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.outline.expect
index f9c5fe2..10d648d 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.outline.expect
@@ -8,9 +8,9 @@
   constructor name1 = self::A|name1;
   tearoff name1 = self::A|_#name1#tearOff;
 }
-static inline-class-member method A|_(dynamic value) → self::A /* = core::int */
+static inline-class-member method A|_(core::int value) → self::A /* = core::int */
   ;
-static inline-class-member method A|_#_#tearOff(dynamic value) → self::A /* = core::int */
+static inline-class-member method A|_#_#tearOff(core::int value) → self::A /* = core::int */
   return self::A|_(value);
 static inline-class-member method A|name1(core::int value) → self::A /* = core::int */
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.transformed.expect
index e905037..e623a74 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/member_not_found.dart.weak.transformed.expect
@@ -15,11 +15,11 @@
   constructor name1 = self::A|name1;
   tearoff name1 = self::A|_#name1#tearOff;
 }
-static inline-class-member method A|_(dynamic value) → self::A /* = core::int */ {
+static inline-class-member method A|_(core::int value) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = value;
   return #this;
 }
-static inline-class-member method A|_#_#tearOff(dynamic value) → self::A /* = core::int */
+static inline-class-member method A|_#_#tearOff(core::int value) → self::A /* = core::int */
   return self::A|_(value);
 static inline-class-member method A|name1(core::int value) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = value;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.expect
index 9199444..7556efe 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.expect
@@ -60,11 +60,11 @@
 static extension-member method _extension#0|get#setter(lowered final core::Object #this) → core::int
   return 42;
 static extension-member method _extension#0|set#getter(lowered final core::Object #this, core::int value) → void {}
-static inline-class-member method InlineClass|(dynamic it) → self::InlineClass /* = core::int */ {
+static inline-class-member method InlineClass|(core::int it) → self::InlineClass /* = core::int */ {
   lowered final self::InlineClass /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|_#new#tearOff(core::int it) → self::InlineClass /* = core::int */
   return self::InlineClass|(it);
 static inline-class-member method InlineClass|test(lowered final self::InlineClass /* = core::int */ #this) → dynamic {
   core::int a = self::InlineClass|+(#this, 2);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.transformed.expect
index 75dc287..73d2d1d 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.strong.transformed.expect
@@ -60,11 +60,11 @@
 static extension-member method _extension#0|get#setter(lowered final core::Object #this) → core::int
   return 42;
 static extension-member method _extension#0|set#getter(lowered final core::Object #this, core::int value) → void {}
-static inline-class-member method InlineClass|(dynamic it) → self::InlineClass /* = core::int */ {
+static inline-class-member method InlineClass|(core::int it) → self::InlineClass /* = core::int */ {
   lowered final self::InlineClass /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|_#new#tearOff(core::int it) → self::InlineClass /* = core::int */
   return self::InlineClass|(it);
 static inline-class-member method InlineClass|test(lowered final self::InlineClass /* = core::int */ #this) → dynamic {
   core::int a = self::InlineClass|+(#this, 2);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.expect
index 9199444..7556efe 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.expect
@@ -60,11 +60,11 @@
 static extension-member method _extension#0|get#setter(lowered final core::Object #this) → core::int
   return 42;
 static extension-member method _extension#0|set#getter(lowered final core::Object #this, core::int value) → void {}
-static inline-class-member method InlineClass|(dynamic it) → self::InlineClass /* = core::int */ {
+static inline-class-member method InlineClass|(core::int it) → self::InlineClass /* = core::int */ {
   lowered final self::InlineClass /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|_#new#tearOff(core::int it) → self::InlineClass /* = core::int */
   return self::InlineClass|(it);
 static inline-class-member method InlineClass|test(lowered final self::InlineClass /* = core::int */ #this) → dynamic {
   core::int a = self::InlineClass|+(#this, 2);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.modular.expect
index 9199444..7556efe 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.modular.expect
@@ -60,11 +60,11 @@
 static extension-member method _extension#0|get#setter(lowered final core::Object #this) → core::int
   return 42;
 static extension-member method _extension#0|set#getter(lowered final core::Object #this, core::int value) → void {}
-static inline-class-member method InlineClass|(dynamic it) → self::InlineClass /* = core::int */ {
+static inline-class-member method InlineClass|(core::int it) → self::InlineClass /* = core::int */ {
   lowered final self::InlineClass /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|_#new#tearOff(core::int it) → self::InlineClass /* = core::int */
   return self::InlineClass|(it);
 static inline-class-member method InlineClass|test(lowered final self::InlineClass /* = core::int */ #this) → dynamic {
   core::int a = self::InlineClass|+(#this, 2);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.outline.expect
index 7c841cf..a79ca5a 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.outline.expect
@@ -28,9 +28,9 @@
   ;
 static extension-member method _extension#0|set#getter(lowered final core::Object #this, core::int value) → void
   ;
-static inline-class-member method InlineClass|(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|(core::int it) → self::InlineClass /* = core::int */
   ;
-static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|_#new#tearOff(core::int it) → self::InlineClass /* = core::int */
   return self::InlineClass|(it);
 static inline-class-member method InlineClass|test(lowered final self::InlineClass /* = core::int */ #this) → dynamic
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.transformed.expect
index 75dc287..73d2d1d 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/method_access.dart.weak.transformed.expect
@@ -60,11 +60,11 @@
 static extension-member method _extension#0|get#setter(lowered final core::Object #this) → core::int
   return 42;
 static extension-member method _extension#0|set#getter(lowered final core::Object #this, core::int value) → void {}
-static inline-class-member method InlineClass|(dynamic it) → self::InlineClass /* = core::int */ {
+static inline-class-member method InlineClass|(core::int it) → self::InlineClass /* = core::int */ {
   lowered final self::InlineClass /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method InlineClass|_#new#tearOff(dynamic it) → self::InlineClass /* = core::int */
+static inline-class-member method InlineClass|_#new#tearOff(core::int it) → self::InlineClass /* = core::int */
   return self::InlineClass|(it);
 static inline-class-member method InlineClass|test(lowered final self::InlineClass /* = core::int */ #this) → dynamic {
   core::int a = self::InlineClass|+(#this, 2);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.strong.expect
index 4595a81..e47ee55 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.strong.expect
@@ -97,75 +97,75 @@
   constructor • = self::ET_CovariantAlias2|;
   tearoff • = self::ET_CovariantAlias2|_#new#tearOff;
 }
-static inline-class-member method ET_Contravariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ {
+static inline-class-member method ET_Contravariant|<T extends core::Object? = dynamic>((self::ET_Contravariant|::T%) → void f) → self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ {
   lowered final self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Contravariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Contravariant<self::ET_Contravariant|_#new#tearOff::T%> /* = (self::ET_Contravariant|_#new#tearOff::T%) → void */
+static inline-class-member method ET_Contravariant|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_Contravariant|_#new#tearOff::T%) → void f) → self::ET_Contravariant<self::ET_Contravariant|_#new#tearOff::T%> /* = (self::ET_Contravariant|_#new#tearOff::T%) → void */
   return self::ET_Contravariant|<self::ET_Contravariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Invariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ {
+static inline-class-member method ET_Invariant|<T extends core::Object? = dynamic>(<S extends self::ET_Invariant|::T% = dynamic>() → void f) → self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ {
   lowered final self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Invariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Invariant<self::ET_Invariant|_#new#tearOff::T%> /* = <S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void */
+static inline-class-member method ET_Invariant|_#new#tearOff<T extends core::Object? = dynamic>(<S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void f) → self::ET_Invariant<self::ET_Invariant|_#new#tearOff::T%> /* = <S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void */
   return self::ET_Invariant|<self::ET_Invariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Covariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ {
+static inline-class-member method ET_Covariant|<T extends core::Object? = dynamic>(() → self::ET_Covariant|::T% f) → self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ {
   lowered final self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Covariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Covariant<self::ET_Covariant|_#new#tearOff::T%> /* = () → self::ET_Covariant|_#new#tearOff::T% */
+static inline-class-member method ET_Covariant|_#new#tearOff<T extends core::Object? = dynamic>(() → self::ET_Covariant|_#new#tearOff::T% f) → self::ET_Covariant<self::ET_Covariant|_#new#tearOff::T%> /* = () → self::ET_Covariant|_#new#tearOff::T% */
   return self::ET_Covariant|<self::ET_Covariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Bivariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ {
+static inline-class-member method ET_Bivariant|<T extends core::Object? = dynamic>((self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% f) → self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ {
   lowered final self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Bivariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Bivariant<self::ET_Bivariant|_#new#tearOff::T%> /* = (self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% */
+static inline-class-member method ET_Bivariant|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% f) → self::ET_Bivariant<self::ET_Bivariant|_#new#tearOff::T%> /* = (self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% */
   return self::ET_Bivariant|<self::ET_Bivariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias|<T extends core::Object? = dynamic>((self::ET_ContravariantAlias|::T%) → void f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ {
   lowered final self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|_#new#tearOff::T%> /* = (self::ET_ContravariantAlias|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_ContravariantAlias|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|_#new#tearOff::T%> /* = (self::ET_ContravariantAlias|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias|<self::ET_ContravariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_InvariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ {
+static inline-class-member method ET_InvariantAlias|<T extends core::Object? = dynamic>(<S extends self::ET_InvariantAlias|::T% = dynamic>() → void f) → self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ {
   lowered final self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_InvariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_InvariantAlias<self::ET_InvariantAlias|_#new#tearOff::T%> /* = <S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void */
+static inline-class-member method ET_InvariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(<S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void f) → self::ET_InvariantAlias<self::ET_InvariantAlias|_#new#tearOff::T%> /* = <S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void */
   return self::ET_InvariantAlias|<self::ET_InvariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ {
+static inline-class-member method ET_CovariantAlias|<T extends core::Object? = dynamic>(() → self::ET_CovariantAlias|::T% f) → self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ {
   lowered final self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias<self::ET_CovariantAlias|_#new#tearOff::T%> /* = () → self::ET_CovariantAlias|_#new#tearOff::T% */
+static inline-class-member method ET_CovariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(() → self::ET_CovariantAlias|_#new#tearOff::T% f) → self::ET_CovariantAlias<self::ET_CovariantAlias|_#new#tearOff::T%> /* = () → self::ET_CovariantAlias|_#new#tearOff::T% */
   return self::ET_CovariantAlias|<self::ET_CovariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_BivariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ {
+static inline-class-member method ET_BivariantAlias|<T extends core::Object? = dynamic>((self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% f) → self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ {
   lowered final self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_BivariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_BivariantAlias<self::ET_BivariantAlias|_#new#tearOff::T%> /* = (self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% */
+static inline-class-member method ET_BivariantAlias|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% f) → self::ET_BivariantAlias<self::ET_BivariantAlias|_#new#tearOff::T%> /* = (self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% */
   return self::ET_BivariantAlias|<self::ET_BivariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias1|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias1|<T extends core::Object? = dynamic>(() → (self::ET_ContravariantAlias1|::T%) → void f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ {
   lowered final self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|_#new#tearOff::T%> /* = () → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(() → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|_#new#tearOff::T%> /* = () → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias1|<self::ET_ContravariantAlias1|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias2|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias2|<T extends core::Object? = dynamic>((() → self::ET_ContravariantAlias2|::T%) → void f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ {
   lowered final self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|_#new#tearOff::T%> /* = (() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>((() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|_#new#tearOff::T%> /* = (() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias2|<self::ET_ContravariantAlias2|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias1|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ {
+static inline-class-member method ET_CovariantAlias1|<T extends core::Object? = dynamic>(() → () → self::ET_CovariantAlias1|::T% f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ {
   lowered final self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|_#new#tearOff::T%> /* = () → () → self::ET_CovariantAlias1|_#new#tearOff::T% */
+static inline-class-member method ET_CovariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(() → () → self::ET_CovariantAlias1|_#new#tearOff::T% f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|_#new#tearOff::T%> /* = () → () → self::ET_CovariantAlias1|_#new#tearOff::T% */
   return self::ET_CovariantAlias1|<self::ET_CovariantAlias1|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias2|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ {
+static inline-class-member method ET_CovariantAlias2|<T extends core::Object? = dynamic>(((self::ET_CovariantAlias2|::T%) → void) → void f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ {
   lowered final self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|_#new#tearOff::T%> /* = ((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void */
+static inline-class-member method ET_CovariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|_#new#tearOff::T%> /* = ((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void */
   return self::ET_CovariantAlias2|<self::ET_CovariantAlias2|_#new#tearOff::T%>(f);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.strong.transformed.expect
index 4595a81..e47ee55 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.strong.transformed.expect
@@ -97,75 +97,75 @@
   constructor • = self::ET_CovariantAlias2|;
   tearoff • = self::ET_CovariantAlias2|_#new#tearOff;
 }
-static inline-class-member method ET_Contravariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ {
+static inline-class-member method ET_Contravariant|<T extends core::Object? = dynamic>((self::ET_Contravariant|::T%) → void f) → self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ {
   lowered final self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Contravariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Contravariant<self::ET_Contravariant|_#new#tearOff::T%> /* = (self::ET_Contravariant|_#new#tearOff::T%) → void */
+static inline-class-member method ET_Contravariant|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_Contravariant|_#new#tearOff::T%) → void f) → self::ET_Contravariant<self::ET_Contravariant|_#new#tearOff::T%> /* = (self::ET_Contravariant|_#new#tearOff::T%) → void */
   return self::ET_Contravariant|<self::ET_Contravariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Invariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ {
+static inline-class-member method ET_Invariant|<T extends core::Object? = dynamic>(<S extends self::ET_Invariant|::T% = dynamic>() → void f) → self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ {
   lowered final self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Invariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Invariant<self::ET_Invariant|_#new#tearOff::T%> /* = <S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void */
+static inline-class-member method ET_Invariant|_#new#tearOff<T extends core::Object? = dynamic>(<S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void f) → self::ET_Invariant<self::ET_Invariant|_#new#tearOff::T%> /* = <S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void */
   return self::ET_Invariant|<self::ET_Invariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Covariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ {
+static inline-class-member method ET_Covariant|<T extends core::Object? = dynamic>(() → self::ET_Covariant|::T% f) → self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ {
   lowered final self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Covariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Covariant<self::ET_Covariant|_#new#tearOff::T%> /* = () → self::ET_Covariant|_#new#tearOff::T% */
+static inline-class-member method ET_Covariant|_#new#tearOff<T extends core::Object? = dynamic>(() → self::ET_Covariant|_#new#tearOff::T% f) → self::ET_Covariant<self::ET_Covariant|_#new#tearOff::T%> /* = () → self::ET_Covariant|_#new#tearOff::T% */
   return self::ET_Covariant|<self::ET_Covariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Bivariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ {
+static inline-class-member method ET_Bivariant|<T extends core::Object? = dynamic>((self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% f) → self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ {
   lowered final self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Bivariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Bivariant<self::ET_Bivariant|_#new#tearOff::T%> /* = (self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% */
+static inline-class-member method ET_Bivariant|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% f) → self::ET_Bivariant<self::ET_Bivariant|_#new#tearOff::T%> /* = (self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% */
   return self::ET_Bivariant|<self::ET_Bivariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias|<T extends core::Object? = dynamic>((self::ET_ContravariantAlias|::T%) → void f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ {
   lowered final self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|_#new#tearOff::T%> /* = (self::ET_ContravariantAlias|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_ContravariantAlias|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|_#new#tearOff::T%> /* = (self::ET_ContravariantAlias|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias|<self::ET_ContravariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_InvariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ {
+static inline-class-member method ET_InvariantAlias|<T extends core::Object? = dynamic>(<S extends self::ET_InvariantAlias|::T% = dynamic>() → void f) → self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ {
   lowered final self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_InvariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_InvariantAlias<self::ET_InvariantAlias|_#new#tearOff::T%> /* = <S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void */
+static inline-class-member method ET_InvariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(<S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void f) → self::ET_InvariantAlias<self::ET_InvariantAlias|_#new#tearOff::T%> /* = <S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void */
   return self::ET_InvariantAlias|<self::ET_InvariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ {
+static inline-class-member method ET_CovariantAlias|<T extends core::Object? = dynamic>(() → self::ET_CovariantAlias|::T% f) → self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ {
   lowered final self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias<self::ET_CovariantAlias|_#new#tearOff::T%> /* = () → self::ET_CovariantAlias|_#new#tearOff::T% */
+static inline-class-member method ET_CovariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(() → self::ET_CovariantAlias|_#new#tearOff::T% f) → self::ET_CovariantAlias<self::ET_CovariantAlias|_#new#tearOff::T%> /* = () → self::ET_CovariantAlias|_#new#tearOff::T% */
   return self::ET_CovariantAlias|<self::ET_CovariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_BivariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ {
+static inline-class-member method ET_BivariantAlias|<T extends core::Object? = dynamic>((self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% f) → self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ {
   lowered final self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_BivariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_BivariantAlias<self::ET_BivariantAlias|_#new#tearOff::T%> /* = (self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% */
+static inline-class-member method ET_BivariantAlias|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% f) → self::ET_BivariantAlias<self::ET_BivariantAlias|_#new#tearOff::T%> /* = (self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% */
   return self::ET_BivariantAlias|<self::ET_BivariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias1|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias1|<T extends core::Object? = dynamic>(() → (self::ET_ContravariantAlias1|::T%) → void f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ {
   lowered final self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|_#new#tearOff::T%> /* = () → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(() → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|_#new#tearOff::T%> /* = () → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias1|<self::ET_ContravariantAlias1|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias2|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias2|<T extends core::Object? = dynamic>((() → self::ET_ContravariantAlias2|::T%) → void f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ {
   lowered final self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|_#new#tearOff::T%> /* = (() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>((() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|_#new#tearOff::T%> /* = (() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias2|<self::ET_ContravariantAlias2|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias1|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ {
+static inline-class-member method ET_CovariantAlias1|<T extends core::Object? = dynamic>(() → () → self::ET_CovariantAlias1|::T% f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ {
   lowered final self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|_#new#tearOff::T%> /* = () → () → self::ET_CovariantAlias1|_#new#tearOff::T% */
+static inline-class-member method ET_CovariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(() → () → self::ET_CovariantAlias1|_#new#tearOff::T% f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|_#new#tearOff::T%> /* = () → () → self::ET_CovariantAlias1|_#new#tearOff::T% */
   return self::ET_CovariantAlias1|<self::ET_CovariantAlias1|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias2|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ {
+static inline-class-member method ET_CovariantAlias2|<T extends core::Object? = dynamic>(((self::ET_CovariantAlias2|::T%) → void) → void f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ {
   lowered final self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|_#new#tearOff::T%> /* = ((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void */
+static inline-class-member method ET_CovariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|_#new#tearOff::T%> /* = ((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void */
   return self::ET_CovariantAlias2|<self::ET_CovariantAlias2|_#new#tearOff::T%>(f);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.expect
index 4595a81..e47ee55 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.expect
@@ -97,75 +97,75 @@
   constructor • = self::ET_CovariantAlias2|;
   tearoff • = self::ET_CovariantAlias2|_#new#tearOff;
 }
-static inline-class-member method ET_Contravariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ {
+static inline-class-member method ET_Contravariant|<T extends core::Object? = dynamic>((self::ET_Contravariant|::T%) → void f) → self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ {
   lowered final self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Contravariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Contravariant<self::ET_Contravariant|_#new#tearOff::T%> /* = (self::ET_Contravariant|_#new#tearOff::T%) → void */
+static inline-class-member method ET_Contravariant|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_Contravariant|_#new#tearOff::T%) → void f) → self::ET_Contravariant<self::ET_Contravariant|_#new#tearOff::T%> /* = (self::ET_Contravariant|_#new#tearOff::T%) → void */
   return self::ET_Contravariant|<self::ET_Contravariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Invariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ {
+static inline-class-member method ET_Invariant|<T extends core::Object? = dynamic>(<S extends self::ET_Invariant|::T% = dynamic>() → void f) → self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ {
   lowered final self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Invariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Invariant<self::ET_Invariant|_#new#tearOff::T%> /* = <S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void */
+static inline-class-member method ET_Invariant|_#new#tearOff<T extends core::Object? = dynamic>(<S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void f) → self::ET_Invariant<self::ET_Invariant|_#new#tearOff::T%> /* = <S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void */
   return self::ET_Invariant|<self::ET_Invariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Covariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ {
+static inline-class-member method ET_Covariant|<T extends core::Object? = dynamic>(() → self::ET_Covariant|::T% f) → self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ {
   lowered final self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Covariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Covariant<self::ET_Covariant|_#new#tearOff::T%> /* = () → self::ET_Covariant|_#new#tearOff::T% */
+static inline-class-member method ET_Covariant|_#new#tearOff<T extends core::Object? = dynamic>(() → self::ET_Covariant|_#new#tearOff::T% f) → self::ET_Covariant<self::ET_Covariant|_#new#tearOff::T%> /* = () → self::ET_Covariant|_#new#tearOff::T% */
   return self::ET_Covariant|<self::ET_Covariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Bivariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ {
+static inline-class-member method ET_Bivariant|<T extends core::Object? = dynamic>((self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% f) → self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ {
   lowered final self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Bivariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Bivariant<self::ET_Bivariant|_#new#tearOff::T%> /* = (self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% */
+static inline-class-member method ET_Bivariant|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% f) → self::ET_Bivariant<self::ET_Bivariant|_#new#tearOff::T%> /* = (self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% */
   return self::ET_Bivariant|<self::ET_Bivariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias|<T extends core::Object? = dynamic>((self::ET_ContravariantAlias|::T%) → void f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ {
   lowered final self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|_#new#tearOff::T%> /* = (self::ET_ContravariantAlias|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_ContravariantAlias|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|_#new#tearOff::T%> /* = (self::ET_ContravariantAlias|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias|<self::ET_ContravariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_InvariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ {
+static inline-class-member method ET_InvariantAlias|<T extends core::Object? = dynamic>(<S extends self::ET_InvariantAlias|::T% = dynamic>() → void f) → self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ {
   lowered final self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_InvariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_InvariantAlias<self::ET_InvariantAlias|_#new#tearOff::T%> /* = <S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void */
+static inline-class-member method ET_InvariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(<S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void f) → self::ET_InvariantAlias<self::ET_InvariantAlias|_#new#tearOff::T%> /* = <S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void */
   return self::ET_InvariantAlias|<self::ET_InvariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ {
+static inline-class-member method ET_CovariantAlias|<T extends core::Object? = dynamic>(() → self::ET_CovariantAlias|::T% f) → self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ {
   lowered final self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias<self::ET_CovariantAlias|_#new#tearOff::T%> /* = () → self::ET_CovariantAlias|_#new#tearOff::T% */
+static inline-class-member method ET_CovariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(() → self::ET_CovariantAlias|_#new#tearOff::T% f) → self::ET_CovariantAlias<self::ET_CovariantAlias|_#new#tearOff::T%> /* = () → self::ET_CovariantAlias|_#new#tearOff::T% */
   return self::ET_CovariantAlias|<self::ET_CovariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_BivariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ {
+static inline-class-member method ET_BivariantAlias|<T extends core::Object? = dynamic>((self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% f) → self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ {
   lowered final self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_BivariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_BivariantAlias<self::ET_BivariantAlias|_#new#tearOff::T%> /* = (self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% */
+static inline-class-member method ET_BivariantAlias|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% f) → self::ET_BivariantAlias<self::ET_BivariantAlias|_#new#tearOff::T%> /* = (self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% */
   return self::ET_BivariantAlias|<self::ET_BivariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias1|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias1|<T extends core::Object? = dynamic>(() → (self::ET_ContravariantAlias1|::T%) → void f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ {
   lowered final self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|_#new#tearOff::T%> /* = () → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(() → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|_#new#tearOff::T%> /* = () → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias1|<self::ET_ContravariantAlias1|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias2|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias2|<T extends core::Object? = dynamic>((() → self::ET_ContravariantAlias2|::T%) → void f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ {
   lowered final self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|_#new#tearOff::T%> /* = (() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>((() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|_#new#tearOff::T%> /* = (() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias2|<self::ET_ContravariantAlias2|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias1|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ {
+static inline-class-member method ET_CovariantAlias1|<T extends core::Object? = dynamic>(() → () → self::ET_CovariantAlias1|::T% f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ {
   lowered final self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|_#new#tearOff::T%> /* = () → () → self::ET_CovariantAlias1|_#new#tearOff::T% */
+static inline-class-member method ET_CovariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(() → () → self::ET_CovariantAlias1|_#new#tearOff::T% f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|_#new#tearOff::T%> /* = () → () → self::ET_CovariantAlias1|_#new#tearOff::T% */
   return self::ET_CovariantAlias1|<self::ET_CovariantAlias1|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias2|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ {
+static inline-class-member method ET_CovariantAlias2|<T extends core::Object? = dynamic>(((self::ET_CovariantAlias2|::T%) → void) → void f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ {
   lowered final self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|_#new#tearOff::T%> /* = ((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void */
+static inline-class-member method ET_CovariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|_#new#tearOff::T%> /* = ((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void */
   return self::ET_CovariantAlias2|<self::ET_CovariantAlias2|_#new#tearOff::T%>(f);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.modular.expect
index 4595a81..e47ee55 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.modular.expect
@@ -97,75 +97,75 @@
   constructor • = self::ET_CovariantAlias2|;
   tearoff • = self::ET_CovariantAlias2|_#new#tearOff;
 }
-static inline-class-member method ET_Contravariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ {
+static inline-class-member method ET_Contravariant|<T extends core::Object? = dynamic>((self::ET_Contravariant|::T%) → void f) → self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ {
   lowered final self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Contravariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Contravariant<self::ET_Contravariant|_#new#tearOff::T%> /* = (self::ET_Contravariant|_#new#tearOff::T%) → void */
+static inline-class-member method ET_Contravariant|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_Contravariant|_#new#tearOff::T%) → void f) → self::ET_Contravariant<self::ET_Contravariant|_#new#tearOff::T%> /* = (self::ET_Contravariant|_#new#tearOff::T%) → void */
   return self::ET_Contravariant|<self::ET_Contravariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Invariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ {
+static inline-class-member method ET_Invariant|<T extends core::Object? = dynamic>(<S extends self::ET_Invariant|::T% = dynamic>() → void f) → self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ {
   lowered final self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Invariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Invariant<self::ET_Invariant|_#new#tearOff::T%> /* = <S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void */
+static inline-class-member method ET_Invariant|_#new#tearOff<T extends core::Object? = dynamic>(<S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void f) → self::ET_Invariant<self::ET_Invariant|_#new#tearOff::T%> /* = <S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void */
   return self::ET_Invariant|<self::ET_Invariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Covariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ {
+static inline-class-member method ET_Covariant|<T extends core::Object? = dynamic>(() → self::ET_Covariant|::T% f) → self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ {
   lowered final self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Covariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Covariant<self::ET_Covariant|_#new#tearOff::T%> /* = () → self::ET_Covariant|_#new#tearOff::T% */
+static inline-class-member method ET_Covariant|_#new#tearOff<T extends core::Object? = dynamic>(() → self::ET_Covariant|_#new#tearOff::T% f) → self::ET_Covariant<self::ET_Covariant|_#new#tearOff::T%> /* = () → self::ET_Covariant|_#new#tearOff::T% */
   return self::ET_Covariant|<self::ET_Covariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Bivariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ {
+static inline-class-member method ET_Bivariant|<T extends core::Object? = dynamic>((self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% f) → self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ {
   lowered final self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Bivariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Bivariant<self::ET_Bivariant|_#new#tearOff::T%> /* = (self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% */
+static inline-class-member method ET_Bivariant|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% f) → self::ET_Bivariant<self::ET_Bivariant|_#new#tearOff::T%> /* = (self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% */
   return self::ET_Bivariant|<self::ET_Bivariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias|<T extends core::Object? = dynamic>((self::ET_ContravariantAlias|::T%) → void f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ {
   lowered final self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|_#new#tearOff::T%> /* = (self::ET_ContravariantAlias|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_ContravariantAlias|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|_#new#tearOff::T%> /* = (self::ET_ContravariantAlias|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias|<self::ET_ContravariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_InvariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ {
+static inline-class-member method ET_InvariantAlias|<T extends core::Object? = dynamic>(<S extends self::ET_InvariantAlias|::T% = dynamic>() → void f) → self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ {
   lowered final self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_InvariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_InvariantAlias<self::ET_InvariantAlias|_#new#tearOff::T%> /* = <S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void */
+static inline-class-member method ET_InvariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(<S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void f) → self::ET_InvariantAlias<self::ET_InvariantAlias|_#new#tearOff::T%> /* = <S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void */
   return self::ET_InvariantAlias|<self::ET_InvariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ {
+static inline-class-member method ET_CovariantAlias|<T extends core::Object? = dynamic>(() → self::ET_CovariantAlias|::T% f) → self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ {
   lowered final self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias<self::ET_CovariantAlias|_#new#tearOff::T%> /* = () → self::ET_CovariantAlias|_#new#tearOff::T% */
+static inline-class-member method ET_CovariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(() → self::ET_CovariantAlias|_#new#tearOff::T% f) → self::ET_CovariantAlias<self::ET_CovariantAlias|_#new#tearOff::T%> /* = () → self::ET_CovariantAlias|_#new#tearOff::T% */
   return self::ET_CovariantAlias|<self::ET_CovariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_BivariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ {
+static inline-class-member method ET_BivariantAlias|<T extends core::Object? = dynamic>((self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% f) → self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ {
   lowered final self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_BivariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_BivariantAlias<self::ET_BivariantAlias|_#new#tearOff::T%> /* = (self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% */
+static inline-class-member method ET_BivariantAlias|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% f) → self::ET_BivariantAlias<self::ET_BivariantAlias|_#new#tearOff::T%> /* = (self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% */
   return self::ET_BivariantAlias|<self::ET_BivariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias1|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias1|<T extends core::Object? = dynamic>(() → (self::ET_ContravariantAlias1|::T%) → void f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ {
   lowered final self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|_#new#tearOff::T%> /* = () → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(() → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|_#new#tearOff::T%> /* = () → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias1|<self::ET_ContravariantAlias1|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias2|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias2|<T extends core::Object? = dynamic>((() → self::ET_ContravariantAlias2|::T%) → void f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ {
   lowered final self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|_#new#tearOff::T%> /* = (() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>((() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|_#new#tearOff::T%> /* = (() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias2|<self::ET_ContravariantAlias2|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias1|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ {
+static inline-class-member method ET_CovariantAlias1|<T extends core::Object? = dynamic>(() → () → self::ET_CovariantAlias1|::T% f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ {
   lowered final self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|_#new#tearOff::T%> /* = () → () → self::ET_CovariantAlias1|_#new#tearOff::T% */
+static inline-class-member method ET_CovariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(() → () → self::ET_CovariantAlias1|_#new#tearOff::T% f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|_#new#tearOff::T%> /* = () → () → self::ET_CovariantAlias1|_#new#tearOff::T% */
   return self::ET_CovariantAlias1|<self::ET_CovariantAlias1|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias2|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ {
+static inline-class-member method ET_CovariantAlias2|<T extends core::Object? = dynamic>(((self::ET_CovariantAlias2|::T%) → void) → void f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ {
   lowered final self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|_#new#tearOff::T%> /* = ((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void */
+static inline-class-member method ET_CovariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|_#new#tearOff::T%> /* = ((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void */
   return self::ET_CovariantAlias2|<self::ET_CovariantAlias2|_#new#tearOff::T%>(f);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.outline.expect
index c997b9e..2dfb766 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.outline.expect
@@ -97,51 +97,51 @@
   constructor • = self::ET_CovariantAlias2|;
   tearoff • = self::ET_CovariantAlias2|_#new#tearOff;
 }
-static inline-class-member method ET_Contravariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */
+static inline-class-member method ET_Contravariant|<T extends core::Object? = dynamic>((self::ET_Contravariant|::T%) → void f) → self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */
   ;
-static inline-class-member method ET_Contravariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Contravariant<self::ET_Contravariant|_#new#tearOff::T%> /* = (self::ET_Contravariant|_#new#tearOff::T%) → void */
+static inline-class-member method ET_Contravariant|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_Contravariant|_#new#tearOff::T%) → void f) → self::ET_Contravariant<self::ET_Contravariant|_#new#tearOff::T%> /* = (self::ET_Contravariant|_#new#tearOff::T%) → void */
   return self::ET_Contravariant|<self::ET_Contravariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Invariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */
+static inline-class-member method ET_Invariant|<T extends core::Object? = dynamic>(<S extends self::ET_Invariant|::T% = dynamic>() → void f) → self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */
   ;
-static inline-class-member method ET_Invariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Invariant<self::ET_Invariant|_#new#tearOff::T%> /* = <S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void */
+static inline-class-member method ET_Invariant|_#new#tearOff<T extends core::Object? = dynamic>(<S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void f) → self::ET_Invariant<self::ET_Invariant|_#new#tearOff::T%> /* = <S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void */
   return self::ET_Invariant|<self::ET_Invariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Covariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */
+static inline-class-member method ET_Covariant|<T extends core::Object? = dynamic>(() → self::ET_Covariant|::T% f) → self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */
   ;
-static inline-class-member method ET_Covariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Covariant<self::ET_Covariant|_#new#tearOff::T%> /* = () → self::ET_Covariant|_#new#tearOff::T% */
+static inline-class-member method ET_Covariant|_#new#tearOff<T extends core::Object? = dynamic>(() → self::ET_Covariant|_#new#tearOff::T% f) → self::ET_Covariant<self::ET_Covariant|_#new#tearOff::T%> /* = () → self::ET_Covariant|_#new#tearOff::T% */
   return self::ET_Covariant|<self::ET_Covariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Bivariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */
+static inline-class-member method ET_Bivariant|<T extends core::Object? = dynamic>((self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% f) → self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */
   ;
-static inline-class-member method ET_Bivariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Bivariant<self::ET_Bivariant|_#new#tearOff::T%> /* = (self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% */
+static inline-class-member method ET_Bivariant|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% f) → self::ET_Bivariant<self::ET_Bivariant|_#new#tearOff::T%> /* = (self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% */
   return self::ET_Bivariant|<self::ET_Bivariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */
+static inline-class-member method ET_ContravariantAlias|<T extends core::Object? = dynamic>((self::ET_ContravariantAlias|::T%) → void f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */
   ;
-static inline-class-member method ET_ContravariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|_#new#tearOff::T%> /* = (self::ET_ContravariantAlias|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_ContravariantAlias|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|_#new#tearOff::T%> /* = (self::ET_ContravariantAlias|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias|<self::ET_ContravariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_InvariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */
+static inline-class-member method ET_InvariantAlias|<T extends core::Object? = dynamic>(<S extends self::ET_InvariantAlias|::T% = dynamic>() → void f) → self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */
   ;
-static inline-class-member method ET_InvariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_InvariantAlias<self::ET_InvariantAlias|_#new#tearOff::T%> /* = <S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void */
+static inline-class-member method ET_InvariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(<S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void f) → self::ET_InvariantAlias<self::ET_InvariantAlias|_#new#tearOff::T%> /* = <S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void */
   return self::ET_InvariantAlias|<self::ET_InvariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */
+static inline-class-member method ET_CovariantAlias|<T extends core::Object? = dynamic>(() → self::ET_CovariantAlias|::T% f) → self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */
   ;
-static inline-class-member method ET_CovariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias<self::ET_CovariantAlias|_#new#tearOff::T%> /* = () → self::ET_CovariantAlias|_#new#tearOff::T% */
+static inline-class-member method ET_CovariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(() → self::ET_CovariantAlias|_#new#tearOff::T% f) → self::ET_CovariantAlias<self::ET_CovariantAlias|_#new#tearOff::T%> /* = () → self::ET_CovariantAlias|_#new#tearOff::T% */
   return self::ET_CovariantAlias|<self::ET_CovariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_BivariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */
+static inline-class-member method ET_BivariantAlias|<T extends core::Object? = dynamic>((self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% f) → self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */
   ;
-static inline-class-member method ET_BivariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_BivariantAlias<self::ET_BivariantAlias|_#new#tearOff::T%> /* = (self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% */
+static inline-class-member method ET_BivariantAlias|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% f) → self::ET_BivariantAlias<self::ET_BivariantAlias|_#new#tearOff::T%> /* = (self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% */
   return self::ET_BivariantAlias|<self::ET_BivariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias1|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */
+static inline-class-member method ET_ContravariantAlias1|<T extends core::Object? = dynamic>(() → (self::ET_ContravariantAlias1|::T%) → void f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */
   ;
-static inline-class-member method ET_ContravariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|_#new#tearOff::T%> /* = () → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(() → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|_#new#tearOff::T%> /* = () → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias1|<self::ET_ContravariantAlias1|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias2|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */
+static inline-class-member method ET_ContravariantAlias2|<T extends core::Object? = dynamic>((() → self::ET_ContravariantAlias2|::T%) → void f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */
   ;
-static inline-class-member method ET_ContravariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|_#new#tearOff::T%> /* = (() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>((() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|_#new#tearOff::T%> /* = (() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias2|<self::ET_ContravariantAlias2|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias1|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */
+static inline-class-member method ET_CovariantAlias1|<T extends core::Object? = dynamic>(() → () → self::ET_CovariantAlias1|::T% f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */
   ;
-static inline-class-member method ET_CovariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|_#new#tearOff::T%> /* = () → () → self::ET_CovariantAlias1|_#new#tearOff::T% */
+static inline-class-member method ET_CovariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(() → () → self::ET_CovariantAlias1|_#new#tearOff::T% f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|_#new#tearOff::T%> /* = () → () → self::ET_CovariantAlias1|_#new#tearOff::T% */
   return self::ET_CovariantAlias1|<self::ET_CovariantAlias1|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias2|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */
+static inline-class-member method ET_CovariantAlias2|<T extends core::Object? = dynamic>(((self::ET_CovariantAlias2|::T%) → void) → void f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */
   ;
-static inline-class-member method ET_CovariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|_#new#tearOff::T%> /* = ((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void */
+static inline-class-member method ET_CovariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|_#new#tearOff::T%> /* = ((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void */
   return self::ET_CovariantAlias2|<self::ET_CovariantAlias2|_#new#tearOff::T%>(f);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.transformed.expect
index 4595a81..e47ee55 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/non_covariant_type_parameter.dart.weak.transformed.expect
@@ -97,75 +97,75 @@
   constructor • = self::ET_CovariantAlias2|;
   tearoff • = self::ET_CovariantAlias2|_#new#tearOff;
 }
-static inline-class-member method ET_Contravariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ {
+static inline-class-member method ET_Contravariant|<T extends core::Object? = dynamic>((self::ET_Contravariant|::T%) → void f) → self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ {
   lowered final self::ET_Contravariant<self::ET_Contravariant|::T%> /* = (self::ET_Contravariant|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Contravariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Contravariant<self::ET_Contravariant|_#new#tearOff::T%> /* = (self::ET_Contravariant|_#new#tearOff::T%) → void */
+static inline-class-member method ET_Contravariant|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_Contravariant|_#new#tearOff::T%) → void f) → self::ET_Contravariant<self::ET_Contravariant|_#new#tearOff::T%> /* = (self::ET_Contravariant|_#new#tearOff::T%) → void */
   return self::ET_Contravariant|<self::ET_Contravariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Invariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ {
+static inline-class-member method ET_Invariant|<T extends core::Object? = dynamic>(<S extends self::ET_Invariant|::T% = dynamic>() → void f) → self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ {
   lowered final self::ET_Invariant<self::ET_Invariant|::T%> /* = <S extends self::ET_Invariant|::T% = dynamic>() → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Invariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Invariant<self::ET_Invariant|_#new#tearOff::T%> /* = <S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void */
+static inline-class-member method ET_Invariant|_#new#tearOff<T extends core::Object? = dynamic>(<S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void f) → self::ET_Invariant<self::ET_Invariant|_#new#tearOff::T%> /* = <S extends self::ET_Invariant|_#new#tearOff::T% = dynamic>() → void */
   return self::ET_Invariant|<self::ET_Invariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Covariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ {
+static inline-class-member method ET_Covariant|<T extends core::Object? = dynamic>(() → self::ET_Covariant|::T% f) → self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ {
   lowered final self::ET_Covariant<self::ET_Covariant|::T%> /* = () → self::ET_Covariant|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Covariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Covariant<self::ET_Covariant|_#new#tearOff::T%> /* = () → self::ET_Covariant|_#new#tearOff::T% */
+static inline-class-member method ET_Covariant|_#new#tearOff<T extends core::Object? = dynamic>(() → self::ET_Covariant|_#new#tearOff::T% f) → self::ET_Covariant<self::ET_Covariant|_#new#tearOff::T%> /* = () → self::ET_Covariant|_#new#tearOff::T% */
   return self::ET_Covariant|<self::ET_Covariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_Bivariant|<T extends core::Object? = dynamic>(dynamic f) → self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ {
+static inline-class-member method ET_Bivariant|<T extends core::Object? = dynamic>((self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% f) → self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ {
   lowered final self::ET_Bivariant<self::ET_Bivariant|::T%> /* = (self::ET_Bivariant|::T%) → self::ET_Bivariant|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_Bivariant|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_Bivariant<self::ET_Bivariant|_#new#tearOff::T%> /* = (self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% */
+static inline-class-member method ET_Bivariant|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% f) → self::ET_Bivariant<self::ET_Bivariant|_#new#tearOff::T%> /* = (self::ET_Bivariant|_#new#tearOff::T%) → self::ET_Bivariant|_#new#tearOff::T% */
   return self::ET_Bivariant|<self::ET_Bivariant|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias|<T extends core::Object? = dynamic>((self::ET_ContravariantAlias|::T%) → void f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ {
   lowered final self::ET_ContravariantAlias<self::ET_ContravariantAlias|::T%> /* = (self::ET_ContravariantAlias|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|_#new#tearOff::T%> /* = (self::ET_ContravariantAlias|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_ContravariantAlias|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias<self::ET_ContravariantAlias|_#new#tearOff::T%> /* = (self::ET_ContravariantAlias|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias|<self::ET_ContravariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_InvariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ {
+static inline-class-member method ET_InvariantAlias|<T extends core::Object? = dynamic>(<S extends self::ET_InvariantAlias|::T% = dynamic>() → void f) → self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ {
   lowered final self::ET_InvariantAlias<self::ET_InvariantAlias|::T%> /* = <S extends self::ET_InvariantAlias|::T% = dynamic>() → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_InvariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_InvariantAlias<self::ET_InvariantAlias|_#new#tearOff::T%> /* = <S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void */
+static inline-class-member method ET_InvariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(<S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void f) → self::ET_InvariantAlias<self::ET_InvariantAlias|_#new#tearOff::T%> /* = <S extends self::ET_InvariantAlias|_#new#tearOff::T% = dynamic>() → void */
   return self::ET_InvariantAlias|<self::ET_InvariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ {
+static inline-class-member method ET_CovariantAlias|<T extends core::Object? = dynamic>(() → self::ET_CovariantAlias|::T% f) → self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ {
   lowered final self::ET_CovariantAlias<self::ET_CovariantAlias|::T%> /* = () → self::ET_CovariantAlias|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias<self::ET_CovariantAlias|_#new#tearOff::T%> /* = () → self::ET_CovariantAlias|_#new#tearOff::T% */
+static inline-class-member method ET_CovariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(() → self::ET_CovariantAlias|_#new#tearOff::T% f) → self::ET_CovariantAlias<self::ET_CovariantAlias|_#new#tearOff::T%> /* = () → self::ET_CovariantAlias|_#new#tearOff::T% */
   return self::ET_CovariantAlias|<self::ET_CovariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_BivariantAlias|<T extends core::Object? = dynamic>(dynamic f) → self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ {
+static inline-class-member method ET_BivariantAlias|<T extends core::Object? = dynamic>((self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% f) → self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ {
   lowered final self::ET_BivariantAlias<self::ET_BivariantAlias|::T%> /* = (self::ET_BivariantAlias|::T%) → self::ET_BivariantAlias|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_BivariantAlias|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_BivariantAlias<self::ET_BivariantAlias|_#new#tearOff::T%> /* = (self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% */
+static inline-class-member method ET_BivariantAlias|_#new#tearOff<T extends core::Object? = dynamic>((self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% f) → self::ET_BivariantAlias<self::ET_BivariantAlias|_#new#tearOff::T%> /* = (self::ET_BivariantAlias|_#new#tearOff::T%) → self::ET_BivariantAlias|_#new#tearOff::T% */
   return self::ET_BivariantAlias|<self::ET_BivariantAlias|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias1|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias1|<T extends core::Object? = dynamic>(() → (self::ET_ContravariantAlias1|::T%) → void f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ {
   lowered final self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|::T%> /* = () → (self::ET_ContravariantAlias1|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|_#new#tearOff::T%> /* = () → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(() → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias1<self::ET_ContravariantAlias1|_#new#tearOff::T%> /* = () → (self::ET_ContravariantAlias1|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias1|<self::ET_ContravariantAlias1|_#new#tearOff::T%>(f);
-static inline-class-member method ET_ContravariantAlias2|<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ {
+static inline-class-member method ET_ContravariantAlias2|<T extends core::Object? = dynamic>((() → self::ET_ContravariantAlias2|::T%) → void f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ {
   lowered final self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|::T%> /* = (() → self::ET_ContravariantAlias2|::T%) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_ContravariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|_#new#tearOff::T%> /* = (() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void */
+static inline-class-member method ET_ContravariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>((() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void f) → self::ET_ContravariantAlias2<self::ET_ContravariantAlias2|_#new#tearOff::T%> /* = (() → self::ET_ContravariantAlias2|_#new#tearOff::T%) → void */
   return self::ET_ContravariantAlias2|<self::ET_ContravariantAlias2|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias1|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ {
+static inline-class-member method ET_CovariantAlias1|<T extends core::Object? = dynamic>(() → () → self::ET_CovariantAlias1|::T% f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ {
   lowered final self::ET_CovariantAlias1<self::ET_CovariantAlias1|::T%> /* = () → () → self::ET_CovariantAlias1|::T% */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|_#new#tearOff::T%> /* = () → () → self::ET_CovariantAlias1|_#new#tearOff::T% */
+static inline-class-member method ET_CovariantAlias1|_#new#tearOff<T extends core::Object? = dynamic>(() → () → self::ET_CovariantAlias1|_#new#tearOff::T% f) → self::ET_CovariantAlias1<self::ET_CovariantAlias1|_#new#tearOff::T%> /* = () → () → self::ET_CovariantAlias1|_#new#tearOff::T% */
   return self::ET_CovariantAlias1|<self::ET_CovariantAlias1|_#new#tearOff::T%>(f);
-static inline-class-member method ET_CovariantAlias2|<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ {
+static inline-class-member method ET_CovariantAlias2|<T extends core::Object? = dynamic>(((self::ET_CovariantAlias2|::T%) → void) → void f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ {
   lowered final self::ET_CovariantAlias2<self::ET_CovariantAlias2|::T%> /* = ((self::ET_CovariantAlias2|::T%) → void) → void */ #this = f;
   return #this;
 }
-static inline-class-member method ET_CovariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(dynamic f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|_#new#tearOff::T%> /* = ((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void */
+static inline-class-member method ET_CovariantAlias2|_#new#tearOff<T extends core::Object? = dynamic>(((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void f) → self::ET_CovariantAlias2<self::ET_CovariantAlias2|_#new#tearOff::T%> /* = ((self::ET_CovariantAlias2|_#new#tearOff::T%) → void) → void */
   return self::ET_CovariantAlias2|<self::ET_CovariantAlias2|_#new#tearOff::T%>(f);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.expect
index 1004d92..b0e594b 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.expect
@@ -28,11 +28,11 @@
   constructor _ = self::GenericClass|_;
   tearoff _ = self::GenericClass|_#_#tearOff;
 }
-static inline-class-member method Class|_(dynamic it) → self::Class /* = core::int */ {
+static inline-class-member method Class|_(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class|_#_#tearOff(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_#_#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|_(it);
 static inline-class-member method Class|instanceMethod(lowered final self::Class /* = core::int */ #this) → void {
   self::Class /* = core::int */ local = #this;
@@ -66,11 +66,11 @@
 }
 static inline-class-member method Class|genericStaticMethod<S extends core::Object? = dynamic>(self::Class|genericStaticMethod::S% s) → self::Class|genericStaticMethod::S%
   return s;
-static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ {
+static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(self::GenericClass|_::T% it) → self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ {
   lowered final self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%> /* = self::GenericClass|_#_#tearOff::T% */
+static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(self::GenericClass|_#_#tearOff::T% it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%> /* = self::GenericClass|_#_#tearOff::T% */
   return self::GenericClass|_<self::GenericClass|_#_#tearOff::T%>(it);
 static inline-class-member method GenericClass|instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod::T%> /* = self::GenericClass|instanceMethod::T% */ #this) → void {
   self::GenericClass<self::GenericClass|instanceMethod::T%> /* = self::GenericClass|instanceMethod::T% */ local = #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.transformed.expect
index 1004d92..b0e594b 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.strong.transformed.expect
@@ -28,11 +28,11 @@
   constructor _ = self::GenericClass|_;
   tearoff _ = self::GenericClass|_#_#tearOff;
 }
-static inline-class-member method Class|_(dynamic it) → self::Class /* = core::int */ {
+static inline-class-member method Class|_(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class|_#_#tearOff(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_#_#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|_(it);
 static inline-class-member method Class|instanceMethod(lowered final self::Class /* = core::int */ #this) → void {
   self::Class /* = core::int */ local = #this;
@@ -66,11 +66,11 @@
 }
 static inline-class-member method Class|genericStaticMethod<S extends core::Object? = dynamic>(self::Class|genericStaticMethod::S% s) → self::Class|genericStaticMethod::S%
   return s;
-static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ {
+static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(self::GenericClass|_::T% it) → self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ {
   lowered final self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%> /* = self::GenericClass|_#_#tearOff::T% */
+static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(self::GenericClass|_#_#tearOff::T% it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%> /* = self::GenericClass|_#_#tearOff::T% */
   return self::GenericClass|_<self::GenericClass|_#_#tearOff::T%>(it);
 static inline-class-member method GenericClass|instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod::T%> /* = self::GenericClass|instanceMethod::T% */ #this) → void {
   self::GenericClass<self::GenericClass|instanceMethod::T%> /* = self::GenericClass|instanceMethod::T% */ local = #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.expect
index 1004d92..b0e594b 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.expect
@@ -28,11 +28,11 @@
   constructor _ = self::GenericClass|_;
   tearoff _ = self::GenericClass|_#_#tearOff;
 }
-static inline-class-member method Class|_(dynamic it) → self::Class /* = core::int */ {
+static inline-class-member method Class|_(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class|_#_#tearOff(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_#_#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|_(it);
 static inline-class-member method Class|instanceMethod(lowered final self::Class /* = core::int */ #this) → void {
   self::Class /* = core::int */ local = #this;
@@ -66,11 +66,11 @@
 }
 static inline-class-member method Class|genericStaticMethod<S extends core::Object? = dynamic>(self::Class|genericStaticMethod::S% s) → self::Class|genericStaticMethod::S%
   return s;
-static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ {
+static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(self::GenericClass|_::T% it) → self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ {
   lowered final self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%> /* = self::GenericClass|_#_#tearOff::T% */
+static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(self::GenericClass|_#_#tearOff::T% it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%> /* = self::GenericClass|_#_#tearOff::T% */
   return self::GenericClass|_<self::GenericClass|_#_#tearOff::T%>(it);
 static inline-class-member method GenericClass|instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod::T%> /* = self::GenericClass|instanceMethod::T% */ #this) → void {
   self::GenericClass<self::GenericClass|instanceMethod::T%> /* = self::GenericClass|instanceMethod::T% */ local = #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.modular.expect
index 1004d92..b0e594b 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.modular.expect
@@ -28,11 +28,11 @@
   constructor _ = self::GenericClass|_;
   tearoff _ = self::GenericClass|_#_#tearOff;
 }
-static inline-class-member method Class|_(dynamic it) → self::Class /* = core::int */ {
+static inline-class-member method Class|_(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class|_#_#tearOff(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_#_#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|_(it);
 static inline-class-member method Class|instanceMethod(lowered final self::Class /* = core::int */ #this) → void {
   self::Class /* = core::int */ local = #this;
@@ -66,11 +66,11 @@
 }
 static inline-class-member method Class|genericStaticMethod<S extends core::Object? = dynamic>(self::Class|genericStaticMethod::S% s) → self::Class|genericStaticMethod::S%
   return s;
-static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ {
+static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(self::GenericClass|_::T% it) → self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ {
   lowered final self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%> /* = self::GenericClass|_#_#tearOff::T% */
+static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(self::GenericClass|_#_#tearOff::T% it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%> /* = self::GenericClass|_#_#tearOff::T% */
   return self::GenericClass|_<self::GenericClass|_#_#tearOff::T%>(it);
 static inline-class-member method GenericClass|instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod::T%> /* = self::GenericClass|instanceMethod::T% */ #this) → void {
   self::GenericClass<self::GenericClass|instanceMethod::T%> /* = self::GenericClass|instanceMethod::T% */ local = #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.outline.expect
index 42bf35b..322ec45 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.outline.expect
@@ -28,9 +28,9 @@
   constructor _ = self::GenericClass|_;
   tearoff _ = self::GenericClass|_#_#tearOff;
 }
-static inline-class-member method Class|_(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_(core::int it) → self::Class /* = core::int */
   ;
-static inline-class-member method Class|_#_#tearOff(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_#_#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|_(it);
 static inline-class-member method Class|instanceMethod(lowered final self::Class /* = core::int */ #this) → void
   ;
@@ -50,9 +50,9 @@
   ;
 static inline-class-member method Class|genericStaticMethod<S extends core::Object? = dynamic>(self::Class|genericStaticMethod::S% s) → self::Class|genericStaticMethod::S%
   ;
-static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */
+static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(self::GenericClass|_::T% it) → self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */
   ;
-static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%> /* = self::GenericClass|_#_#tearOff::T% */
+static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(self::GenericClass|_#_#tearOff::T% it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%> /* = self::GenericClass|_#_#tearOff::T% */
   return self::GenericClass|_<self::GenericClass|_#_#tearOff::T%>(it);
 static inline-class-member method GenericClass|instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod::T%> /* = self::GenericClass|instanceMethod::T% */ #this) → void
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.transformed.expect
index 1004d92..b0e594b 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/procedures.dart.weak.transformed.expect
@@ -28,11 +28,11 @@
   constructor _ = self::GenericClass|_;
   tearoff _ = self::GenericClass|_#_#tearOff;
 }
-static inline-class-member method Class|_(dynamic it) → self::Class /* = core::int */ {
+static inline-class-member method Class|_(core::int it) → self::Class /* = core::int */ {
   lowered final self::Class /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Class|_#_#tearOff(dynamic it) → self::Class /* = core::int */
+static inline-class-member method Class|_#_#tearOff(core::int it) → self::Class /* = core::int */
   return self::Class|_(it);
 static inline-class-member method Class|instanceMethod(lowered final self::Class /* = core::int */ #this) → void {
   self::Class /* = core::int */ local = #this;
@@ -66,11 +66,11 @@
 }
 static inline-class-member method Class|genericStaticMethod<S extends core::Object? = dynamic>(self::Class|genericStaticMethod::S% s) → self::Class|genericStaticMethod::S%
   return s;
-static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ {
+static inline-class-member method GenericClass|_<T extends core::Object? = dynamic>(self::GenericClass|_::T% it) → self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ {
   lowered final self::GenericClass<self::GenericClass|_::T%> /* = self::GenericClass|_::T% */ #this = it;
   return #this;
 }
-static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%> /* = self::GenericClass|_#_#tearOff::T% */
+static inline-class-member method GenericClass|_#_#tearOff<T extends core::Object? = dynamic>(self::GenericClass|_#_#tearOff::T% it) → self::GenericClass<self::GenericClass|_#_#tearOff::T%> /* = self::GenericClass|_#_#tearOff::T% */
   return self::GenericClass|_<self::GenericClass|_#_#tearOff::T%>(it);
 static inline-class-member method GenericClass|instanceMethod<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericClass|instanceMethod::T%> /* = self::GenericClass|instanceMethod::T% */ #this) → void {
   self::GenericClass<self::GenericClass|instanceMethod::T%> /* = self::GenericClass|instanceMethod::T% */ local = #this;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.expect
index 03d2343..efb482e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.expect
@@ -50,13 +50,13 @@
 }
 static inline-class-member method Missing|_#new#tearOff() → self::Missing /* = invalid-type */
   return self::Missing|();
-static inline-class-member method Multiple|(dynamic instanceField1, dynamic instanceField2) → self::Multiple /* = core::bool */ {
+static inline-class-member method Multiple|(core::bool instanceField1, core::int instanceField2) → self::Multiple /* = core::bool */ {
   lowered final self::Multiple /* = core::bool */ #this = instanceField2;
   return #this;
 }
-static inline-class-member method Multiple|_#new#tearOff(dynamic instanceField1, dynamic instanceField2) → self::Multiple /* = core::bool */
+static inline-class-member method Multiple|_#new#tearOff(core::bool instanceField1, core::int instanceField2) → self::Multiple /* = core::bool */
   return self::Multiple|(instanceField1, instanceField2);
-static inline-class-member method Duplicate|(dynamic instanceField, dynamic instanceField) → self::Duplicate /* = core::bool */ {
+static inline-class-member method Duplicate|(core::int instanceField, core::int instanceField) → self::Duplicate /* = core::bool */ {
   lowered final self::Duplicate /* = core::bool */ #this;
   final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
 extension type Duplicate(bool instanceField, int instanceField) {} // Error
@@ -66,5 +66,5 @@
                                                  ^^^^^^^^^^^^^";
   return #this;
 }
-static inline-class-member method Duplicate|_#new#tearOff(dynamic instanceField, dynamic instanceField) → self::Duplicate /* = core::bool */
+static inline-class-member method Duplicate|_#new#tearOff(core::int instanceField, core::int instanceField) → self::Duplicate /* = core::bool */
   return self::Duplicate|(instanceField, instanceField);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.transformed.expect
index 03d2343..efb482e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.strong.transformed.expect
@@ -50,13 +50,13 @@
 }
 static inline-class-member method Missing|_#new#tearOff() → self::Missing /* = invalid-type */
   return self::Missing|();
-static inline-class-member method Multiple|(dynamic instanceField1, dynamic instanceField2) → self::Multiple /* = core::bool */ {
+static inline-class-member method Multiple|(core::bool instanceField1, core::int instanceField2) → self::Multiple /* = core::bool */ {
   lowered final self::Multiple /* = core::bool */ #this = instanceField2;
   return #this;
 }
-static inline-class-member method Multiple|_#new#tearOff(dynamic instanceField1, dynamic instanceField2) → self::Multiple /* = core::bool */
+static inline-class-member method Multiple|_#new#tearOff(core::bool instanceField1, core::int instanceField2) → self::Multiple /* = core::bool */
   return self::Multiple|(instanceField1, instanceField2);
-static inline-class-member method Duplicate|(dynamic instanceField, dynamic instanceField) → self::Duplicate /* = core::bool */ {
+static inline-class-member method Duplicate|(core::int instanceField, core::int instanceField) → self::Duplicate /* = core::bool */ {
   lowered final self::Duplicate /* = core::bool */ #this;
   final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
 extension type Duplicate(bool instanceField, int instanceField) {} // Error
@@ -66,5 +66,5 @@
                                                  ^^^^^^^^^^^^^";
   return #this;
 }
-static inline-class-member method Duplicate|_#new#tearOff(dynamic instanceField, dynamic instanceField) → self::Duplicate /* = core::bool */
+static inline-class-member method Duplicate|_#new#tearOff(core::int instanceField, core::int instanceField) → self::Duplicate /* = core::bool */
   return self::Duplicate|(instanceField, instanceField);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.expect
index 03d2343..efb482e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.expect
@@ -50,13 +50,13 @@
 }
 static inline-class-member method Missing|_#new#tearOff() → self::Missing /* = invalid-type */
   return self::Missing|();
-static inline-class-member method Multiple|(dynamic instanceField1, dynamic instanceField2) → self::Multiple /* = core::bool */ {
+static inline-class-member method Multiple|(core::bool instanceField1, core::int instanceField2) → self::Multiple /* = core::bool */ {
   lowered final self::Multiple /* = core::bool */ #this = instanceField2;
   return #this;
 }
-static inline-class-member method Multiple|_#new#tearOff(dynamic instanceField1, dynamic instanceField2) → self::Multiple /* = core::bool */
+static inline-class-member method Multiple|_#new#tearOff(core::bool instanceField1, core::int instanceField2) → self::Multiple /* = core::bool */
   return self::Multiple|(instanceField1, instanceField2);
-static inline-class-member method Duplicate|(dynamic instanceField, dynamic instanceField) → self::Duplicate /* = core::bool */ {
+static inline-class-member method Duplicate|(core::int instanceField, core::int instanceField) → self::Duplicate /* = core::bool */ {
   lowered final self::Duplicate /* = core::bool */ #this;
   final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
 extension type Duplicate(bool instanceField, int instanceField) {} // Error
@@ -66,5 +66,5 @@
                                                  ^^^^^^^^^^^^^";
   return #this;
 }
-static inline-class-member method Duplicate|_#new#tearOff(dynamic instanceField, dynamic instanceField) → self::Duplicate /* = core::bool */
+static inline-class-member method Duplicate|_#new#tearOff(core::int instanceField, core::int instanceField) → self::Duplicate /* = core::bool */
   return self::Duplicate|(instanceField, instanceField);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.modular.expect
index 03d2343..efb482e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.modular.expect
@@ -50,13 +50,13 @@
 }
 static inline-class-member method Missing|_#new#tearOff() → self::Missing /* = invalid-type */
   return self::Missing|();
-static inline-class-member method Multiple|(dynamic instanceField1, dynamic instanceField2) → self::Multiple /* = core::bool */ {
+static inline-class-member method Multiple|(core::bool instanceField1, core::int instanceField2) → self::Multiple /* = core::bool */ {
   lowered final self::Multiple /* = core::bool */ #this = instanceField2;
   return #this;
 }
-static inline-class-member method Multiple|_#new#tearOff(dynamic instanceField1, dynamic instanceField2) → self::Multiple /* = core::bool */
+static inline-class-member method Multiple|_#new#tearOff(core::bool instanceField1, core::int instanceField2) → self::Multiple /* = core::bool */
   return self::Multiple|(instanceField1, instanceField2);
-static inline-class-member method Duplicate|(dynamic instanceField, dynamic instanceField) → self::Duplicate /* = core::bool */ {
+static inline-class-member method Duplicate|(core::int instanceField, core::int instanceField) → self::Duplicate /* = core::bool */ {
   lowered final self::Duplicate /* = core::bool */ #this;
   final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
 extension type Duplicate(bool instanceField, int instanceField) {} // Error
@@ -66,5 +66,5 @@
                                                  ^^^^^^^^^^^^^";
   return #this;
 }
-static inline-class-member method Duplicate|_#new#tearOff(dynamic instanceField, dynamic instanceField) → self::Duplicate /* = core::bool */
+static inline-class-member method Duplicate|_#new#tearOff(core::int instanceField, core::int instanceField) → self::Duplicate /* = core::bool */
   return self::Duplicate|(instanceField, instanceField);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.outline.expect
index 1b312e1..670ab1d 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.outline.expect
@@ -35,11 +35,11 @@
   ;
 static inline-class-member method Missing|_#new#tearOff() → self::Missing /* = invalid-type */
   return self::Missing|();
-static inline-class-member method Multiple|(dynamic instanceField1, dynamic instanceField2) → self::Multiple /* = core::bool */
+static inline-class-member method Multiple|(core::bool instanceField1, core::int instanceField2) → self::Multiple /* = core::bool */
   ;
-static inline-class-member method Multiple|_#new#tearOff(dynamic instanceField1, dynamic instanceField2) → self::Multiple /* = core::bool */
+static inline-class-member method Multiple|_#new#tearOff(core::bool instanceField1, core::int instanceField2) → self::Multiple /* = core::bool */
   return self::Multiple|(instanceField1, instanceField2);
-static inline-class-member method Duplicate|(dynamic instanceField, dynamic instanceField) → self::Duplicate /* = core::bool */
+static inline-class-member method Duplicate|(core::int instanceField, core::int instanceField) → self::Duplicate /* = core::bool */
   ;
-static inline-class-member method Duplicate|_#new#tearOff(dynamic instanceField, dynamic instanceField) → self::Duplicate /* = core::bool */
+static inline-class-member method Duplicate|_#new#tearOff(core::int instanceField, core::int instanceField) → self::Duplicate /* = core::bool */
   return self::Duplicate|(instanceField, instanceField);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.transformed.expect
index 03d2343..efb482e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation.dart.weak.transformed.expect
@@ -50,13 +50,13 @@
 }
 static inline-class-member method Missing|_#new#tearOff() → self::Missing /* = invalid-type */
   return self::Missing|();
-static inline-class-member method Multiple|(dynamic instanceField1, dynamic instanceField2) → self::Multiple /* = core::bool */ {
+static inline-class-member method Multiple|(core::bool instanceField1, core::int instanceField2) → self::Multiple /* = core::bool */ {
   lowered final self::Multiple /* = core::bool */ #this = instanceField2;
   return #this;
 }
-static inline-class-member method Multiple|_#new#tearOff(dynamic instanceField1, dynamic instanceField2) → self::Multiple /* = core::bool */
+static inline-class-member method Multiple|_#new#tearOff(core::bool instanceField1, core::int instanceField2) → self::Multiple /* = core::bool */
   return self::Multiple|(instanceField1, instanceField2);
-static inline-class-member method Duplicate|(dynamic instanceField, dynamic instanceField) → self::Duplicate /* = core::bool */ {
+static inline-class-member method Duplicate|(core::int instanceField, core::int instanceField) → self::Duplicate /* = core::bool */ {
   lowered final self::Duplicate /* = core::bool */ #this;
   final dynamic #t1 = invalid-expression "pkg/front_end/testcases/inline_class/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
 extension type Duplicate(bool instanceField, int instanceField) {} // Error
@@ -66,5 +66,5 @@
                                                  ^^^^^^^^^^^^^";
   return #this;
 }
-static inline-class-member method Duplicate|_#new#tearOff(dynamic instanceField, dynamic instanceField) → self::Duplicate /* = core::bool */
+static inline-class-member method Duplicate|_#new#tearOff(core::int instanceField, core::int instanceField) → self::Duplicate /* = core::bool */
   return self::Duplicate|(instanceField, instanceField);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.strong.expect
index 9dc182e..a9197a1 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.strong.expect
@@ -82,125 +82,125 @@
   constructor • = self::Lc|;
   tearoff • = self::Lc|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
-static inline-class-member method Ba|(dynamic it) → self::Ba /* = core::int */ {
+static inline-class-member method Ba|(self::A /* = core::int */ it) → self::Ba /* = core::int */ {
   lowered final self::Ba /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Ba|_#new#tearOff(dynamic it) → self::Ba /* = core::int */
+static inline-class-member method Ba|_#new#tearOff(self::A /* = core::int */ it) → self::Ba /* = core::int */
   return self::Ba|(it);
-static inline-class-member method Bb|(dynamic it) → self::Bb /* = core::int? */ {
+static inline-class-member method Bb|(self::A? /* = core::int? */ it) → self::Bb /* = core::int? */ {
   lowered final self::Bb /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method Bb|_#new#tearOff(dynamic it) → self::Bb /* = core::int? */
+static inline-class-member method Bb|_#new#tearOff(self::A? /* = core::int? */ it) → self::Bb /* = core::int? */
   return self::Bb|(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = self::C|::T% */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(self::C|::T% it) → self::C<self::C|::T%> /* = self::C|::T% */ {
   lowered final self::C<self::C|::T%> /* = self::C|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = self::C|_#new#tearOff::T% */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(self::C|_#new#tearOff::T% it) → self::C<self::C|_#new#tearOff::T%> /* = self::C|_#new#tearOff::T% */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method Da|<T extends core::Object? = dynamic>(dynamic it) → self::Da<self::Da|::T%> /* = self::Da|::T% */ {
+static inline-class-member method Da|<T extends core::Object? = dynamic>(self::C<self::Da|::T%> /* = self::Da|::T% */ it) → self::Da<self::Da|::T%> /* = self::Da|::T% */ {
   lowered final self::Da<self::Da|::T%> /* = self::Da|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method Da|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Da<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */
+static inline-class-member method Da|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */ it) → self::Da<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */
   return self::Da|<self::Da|_#new#tearOff::T%>(it);
-static inline-class-member method Db|<T extends core::Object? = dynamic>(dynamic it) → self::Db<self::Db|::T%> /* = self::Db|::T? */ {
+static inline-class-member method Db|<T extends core::Object? = dynamic>(self::C<self::Db|::T?> /* = self::Db|::T? */ it) → self::Db<self::Db|::T%> /* = self::Db|::T? */ {
   lowered final self::Db<self::Db|::T%> /* = self::Db|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Db|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Db<self::Db|_#new#tearOff::T%> /* = self::Db|_#new#tearOff::T? */
+static inline-class-member method Db|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Db|_#new#tearOff::T?> /* = self::Db|_#new#tearOff::T? */ it) → self::Db<self::Db|_#new#tearOff::T%> /* = self::Db|_#new#tearOff::T? */
   return self::Db|<self::Db|_#new#tearOff::T%>(it);
-static inline-class-member method Dc|<T extends core::Object? = dynamic>(dynamic it) → self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ {
+static inline-class-member method Dc|<T extends core::Object? = dynamic>(self::C<self::Dc|::T%>? /* = self::Dc|::T? */ it) → self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ {
   lowered final self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Dc|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Dc<self::Dc|_#new#tearOff::T%> /* = self::Dc|_#new#tearOff::T? */
+static inline-class-member method Dc|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Dc|_#new#tearOff::T%>? /* = self::Dc|_#new#tearOff::T? */ it) → self::Dc<self::Dc|_#new#tearOff::T%> /* = self::Dc|_#new#tearOff::T? */
   return self::Dc|<self::Dc|_#new#tearOff::T%>(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int? */ {
+static inline-class-member method E|(core::int? it) → self::E /* = core::int? */ {
   lowered final self::E /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int? */
+static inline-class-member method E|_#new#tearOff(core::int? it) → self::E /* = core::int? */
   return self::E|(it);
-static inline-class-member method Fa|(dynamic it) → self::Fa /* = core::int? */ {
+static inline-class-member method Fa|(self::E /* = core::int? */ it) → self::Fa /* = core::int? */ {
   lowered final self::Fa /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method Fa|_#new#tearOff(dynamic it) → self::Fa /* = core::int? */
+static inline-class-member method Fa|_#new#tearOff(self::E /* = core::int? */ it) → self::Fa /* = core::int? */
   return self::Fa|(it);
-static inline-class-member method Fb|_#new#tearOff(dynamic it) → self::Fb /* = core::int? */
+static inline-class-member method Fb|_#new#tearOff(self::E? /* = core::int? */ it) → self::Fb /* = core::int? */
   return self::Fb|(it);
-static inline-class-member method Fb|(dynamic it) → self::Fb /* = core::int? */ {
+static inline-class-member method Fb|(self::E? /* = core::int? */ it) → self::Fb /* = core::int? */ {
   lowered final self::Fb /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method G|<T extends core::Object? = dynamic>(dynamic it) → self::G<self::G|::T%> /* = self::G|::T? */ {
+static inline-class-member method G|<T extends core::Object? = dynamic>(self::G|::T? it) → self::G<self::G|::T%> /* = self::G|::T? */ {
   lowered final self::G<self::G|::T%> /* = self::G|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T? */
+static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(self::G|_#new#tearOff::T? it) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T? */
   return self::G|<self::G|_#new#tearOff::T%>(it);
-static inline-class-member method Ha|<T extends core::Object? = dynamic>(dynamic it) → self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ {
+static inline-class-member method Ha|<T extends core::Object? = dynamic>(self::G<self::Ha|::T%> /* = self::Ha|::T? */ it) → self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ {
   lowered final self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Ha|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Ha<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */
+static inline-class-member method Ha|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */ it) → self::Ha<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */
   return self::Ha|<self::Ha|_#new#tearOff::T%>(it);
-static inline-class-member method Hb|<T extends core::Object? = dynamic>(dynamic it) → self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ {
+static inline-class-member method Hb|<T extends core::Object? = dynamic>(self::G<self::Hb|::T?> /* = self::Hb|::T? */ it) → self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ {
   lowered final self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Hb|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Hb<self::Hb|_#new#tearOff::T%> /* = self::Hb|_#new#tearOff::T? */
+static inline-class-member method Hb|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hb|_#new#tearOff::T?> /* = self::Hb|_#new#tearOff::T? */ it) → self::Hb<self::Hb|_#new#tearOff::T%> /* = self::Hb|_#new#tearOff::T? */
   return self::Hb|<self::Hb|_#new#tearOff::T%>(it);
-static inline-class-member method Hc|<T extends core::Object? = dynamic>(dynamic it) → self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ {
+static inline-class-member method Hc|<T extends core::Object? = dynamic>(self::G<self::Hc|::T%>? /* = self::Hc|::T? */ it) → self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ {
   lowered final self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Hc|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Hc<self::Hc|_#new#tearOff::T%> /* = self::Hc|_#new#tearOff::T? */
+static inline-class-member method Hc|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hc|_#new#tearOff::T%>? /* = self::Hc|_#new#tearOff::T? */ it) → self::Hc<self::Hc|_#new#tearOff::T%> /* = self::Hc|_#new#tearOff::T? */
   return self::Hc|<self::Hc|_#new#tearOff::T%>(it);
-static inline-class-member method I|<T extends core::Object = dynamic>(dynamic it) → self::I<self::I|::T> /* = self::I|::T */ {
+static inline-class-member method I|<T extends core::Object = dynamic>(self::I|::T it) → self::I<self::I|::T> /* = self::I|::T */ {
   lowered final self::I<self::I|::T> /* = self::I|::T */ #this = it;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::I<self::I|_#new#tearOff::T> /* = self::I|_#new#tearOff::T */
+static inline-class-member method I|_#new#tearOff<T extends core::Object = dynamic>(self::I|_#new#tearOff::T it) → self::I<self::I|_#new#tearOff::T> /* = self::I|_#new#tearOff::T */
   return self::I|<self::I|_#new#tearOff::T>(it);
-static inline-class-member method Ja|<T extends core::Object = dynamic>(dynamic it) → self::Ja<self::Ja|::T> /* = self::Ja|::T */ {
+static inline-class-member method Ja|<T extends core::Object = dynamic>(self::I<self::Ja|::T> /* = self::Ja|::T */ it) → self::Ja<self::Ja|::T> /* = self::Ja|::T */ {
   lowered final self::Ja<self::Ja|::T> /* = self::Ja|::T */ #this = it;
   return #this;
 }
-static inline-class-member method Ja|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Ja<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */
+static inline-class-member method Ja|_#new#tearOff<T extends core::Object = dynamic>(self::I<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */ it) → self::Ja<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */
   return self::Ja|<self::Ja|_#new#tearOff::T>(it);
-static inline-class-member method Jc|<T extends core::Object = dynamic>(dynamic it) → self::Jc<self::Jc|::T> /* = self::Jc|::T? */ {
+static inline-class-member method Jc|<T extends core::Object = dynamic>(self::I<self::Jc|::T>? /* = self::Jc|::T? */ it) → self::Jc<self::Jc|::T> /* = self::Jc|::T? */ {
   lowered final self::Jc<self::Jc|::T> /* = self::Jc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Jc|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Jc<self::Jc|_#new#tearOff::T> /* = self::Jc|_#new#tearOff::T? */
+static inline-class-member method Jc|_#new#tearOff<T extends core::Object = dynamic>(self::I<self::Jc|_#new#tearOff::T>? /* = self::Jc|_#new#tearOff::T? */ it) → self::Jc<self::Jc|_#new#tearOff::T> /* = self::Jc|_#new#tearOff::T? */
   return self::Jc|<self::Jc|_#new#tearOff::T>(it);
-static inline-class-member method K|<T extends core::Object = dynamic>(dynamic it) → self::K<self::K|::T> /* = self::K|::T? */ {
+static inline-class-member method K|<T extends core::Object = dynamic>(self::K|::T? it) → self::K<self::K|::T> /* = self::K|::T? */ {
   lowered final self::K<self::K|::T> /* = self::K|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method K|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::K<self::K|_#new#tearOff::T> /* = self::K|_#new#tearOff::T? */
+static inline-class-member method K|_#new#tearOff<T extends core::Object = dynamic>(self::K|_#new#tearOff::T? it) → self::K<self::K|_#new#tearOff::T> /* = self::K|_#new#tearOff::T? */
   return self::K|<self::K|_#new#tearOff::T>(it);
-static inline-class-member method La|<T extends core::Object = dynamic>(dynamic it) → self::La<self::La|::T> /* = self::La|::T? */ {
+static inline-class-member method La|<T extends core::Object = dynamic>(self::K<self::La|::T> /* = self::La|::T? */ it) → self::La<self::La|::T> /* = self::La|::T? */ {
   lowered final self::La<self::La|::T> /* = self::La|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method La|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::La<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */
+static inline-class-member method La|_#new#tearOff<T extends core::Object = dynamic>(self::K<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */ it) → self::La<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */
   return self::La|<self::La|_#new#tearOff::T>(it);
-static inline-class-member method Lc|<T extends core::Object = dynamic>(dynamic it) → self::Lc<self::Lc|::T> /* = self::Lc|::T? */ {
+static inline-class-member method Lc|<T extends core::Object = dynamic>(self::K<self::Lc|::T>? /* = self::Lc|::T? */ it) → self::Lc<self::Lc|::T> /* = self::Lc|::T? */ {
   lowered final self::Lc<self::Lc|::T> /* = self::Lc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Lc|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Lc<self::Lc|_#new#tearOff::T> /* = self::Lc|_#new#tearOff::T? */
+static inline-class-member method Lc|_#new#tearOff<T extends core::Object = dynamic>(self::K<self::Lc|_#new#tearOff::T>? /* = self::Lc|_#new#tearOff::T? */ it) → self::Lc<self::Lc|_#new#tearOff::T> /* = self::Lc|_#new#tearOff::T? */
   return self::Lc|<self::Lc|_#new#tearOff::T>(it);
 static method testA(Never n) → dynamic {
   self::A /* = core::int */ a1 = n;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.strong.transformed.expect
index 9dc182e..a9197a1 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.strong.transformed.expect
@@ -82,125 +82,125 @@
   constructor • = self::Lc|;
   tearoff • = self::Lc|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
-static inline-class-member method Ba|(dynamic it) → self::Ba /* = core::int */ {
+static inline-class-member method Ba|(self::A /* = core::int */ it) → self::Ba /* = core::int */ {
   lowered final self::Ba /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Ba|_#new#tearOff(dynamic it) → self::Ba /* = core::int */
+static inline-class-member method Ba|_#new#tearOff(self::A /* = core::int */ it) → self::Ba /* = core::int */
   return self::Ba|(it);
-static inline-class-member method Bb|(dynamic it) → self::Bb /* = core::int? */ {
+static inline-class-member method Bb|(self::A? /* = core::int? */ it) → self::Bb /* = core::int? */ {
   lowered final self::Bb /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method Bb|_#new#tearOff(dynamic it) → self::Bb /* = core::int? */
+static inline-class-member method Bb|_#new#tearOff(self::A? /* = core::int? */ it) → self::Bb /* = core::int? */
   return self::Bb|(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = self::C|::T% */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(self::C|::T% it) → self::C<self::C|::T%> /* = self::C|::T% */ {
   lowered final self::C<self::C|::T%> /* = self::C|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = self::C|_#new#tearOff::T% */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(self::C|_#new#tearOff::T% it) → self::C<self::C|_#new#tearOff::T%> /* = self::C|_#new#tearOff::T% */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method Da|<T extends core::Object? = dynamic>(dynamic it) → self::Da<self::Da|::T%> /* = self::Da|::T% */ {
+static inline-class-member method Da|<T extends core::Object? = dynamic>(self::C<self::Da|::T%> /* = self::Da|::T% */ it) → self::Da<self::Da|::T%> /* = self::Da|::T% */ {
   lowered final self::Da<self::Da|::T%> /* = self::Da|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method Da|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Da<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */
+static inline-class-member method Da|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */ it) → self::Da<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */
   return self::Da|<self::Da|_#new#tearOff::T%>(it);
-static inline-class-member method Db|<T extends core::Object? = dynamic>(dynamic it) → self::Db<self::Db|::T%> /* = self::Db|::T? */ {
+static inline-class-member method Db|<T extends core::Object? = dynamic>(self::C<self::Db|::T?> /* = self::Db|::T? */ it) → self::Db<self::Db|::T%> /* = self::Db|::T? */ {
   lowered final self::Db<self::Db|::T%> /* = self::Db|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Db|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Db<self::Db|_#new#tearOff::T%> /* = self::Db|_#new#tearOff::T? */
+static inline-class-member method Db|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Db|_#new#tearOff::T?> /* = self::Db|_#new#tearOff::T? */ it) → self::Db<self::Db|_#new#tearOff::T%> /* = self::Db|_#new#tearOff::T? */
   return self::Db|<self::Db|_#new#tearOff::T%>(it);
-static inline-class-member method Dc|<T extends core::Object? = dynamic>(dynamic it) → self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ {
+static inline-class-member method Dc|<T extends core::Object? = dynamic>(self::C<self::Dc|::T%>? /* = self::Dc|::T? */ it) → self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ {
   lowered final self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Dc|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Dc<self::Dc|_#new#tearOff::T%> /* = self::Dc|_#new#tearOff::T? */
+static inline-class-member method Dc|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Dc|_#new#tearOff::T%>? /* = self::Dc|_#new#tearOff::T? */ it) → self::Dc<self::Dc|_#new#tearOff::T%> /* = self::Dc|_#new#tearOff::T? */
   return self::Dc|<self::Dc|_#new#tearOff::T%>(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int? */ {
+static inline-class-member method E|(core::int? it) → self::E /* = core::int? */ {
   lowered final self::E /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int? */
+static inline-class-member method E|_#new#tearOff(core::int? it) → self::E /* = core::int? */
   return self::E|(it);
-static inline-class-member method Fa|(dynamic it) → self::Fa /* = core::int? */ {
+static inline-class-member method Fa|(self::E /* = core::int? */ it) → self::Fa /* = core::int? */ {
   lowered final self::Fa /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method Fa|_#new#tearOff(dynamic it) → self::Fa /* = core::int? */
+static inline-class-member method Fa|_#new#tearOff(self::E /* = core::int? */ it) → self::Fa /* = core::int? */
   return self::Fa|(it);
-static inline-class-member method Fb|_#new#tearOff(dynamic it) → self::Fb /* = core::int? */
+static inline-class-member method Fb|_#new#tearOff(self::E? /* = core::int? */ it) → self::Fb /* = core::int? */
   return self::Fb|(it);
-static inline-class-member method Fb|(dynamic it) → self::Fb /* = core::int? */ {
+static inline-class-member method Fb|(self::E? /* = core::int? */ it) → self::Fb /* = core::int? */ {
   lowered final self::Fb /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method G|<T extends core::Object? = dynamic>(dynamic it) → self::G<self::G|::T%> /* = self::G|::T? */ {
+static inline-class-member method G|<T extends core::Object? = dynamic>(self::G|::T? it) → self::G<self::G|::T%> /* = self::G|::T? */ {
   lowered final self::G<self::G|::T%> /* = self::G|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T? */
+static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(self::G|_#new#tearOff::T? it) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T? */
   return self::G|<self::G|_#new#tearOff::T%>(it);
-static inline-class-member method Ha|<T extends core::Object? = dynamic>(dynamic it) → self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ {
+static inline-class-member method Ha|<T extends core::Object? = dynamic>(self::G<self::Ha|::T%> /* = self::Ha|::T? */ it) → self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ {
   lowered final self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Ha|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Ha<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */
+static inline-class-member method Ha|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */ it) → self::Ha<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */
   return self::Ha|<self::Ha|_#new#tearOff::T%>(it);
-static inline-class-member method Hb|<T extends core::Object? = dynamic>(dynamic it) → self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ {
+static inline-class-member method Hb|<T extends core::Object? = dynamic>(self::G<self::Hb|::T?> /* = self::Hb|::T? */ it) → self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ {
   lowered final self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Hb|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Hb<self::Hb|_#new#tearOff::T%> /* = self::Hb|_#new#tearOff::T? */
+static inline-class-member method Hb|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hb|_#new#tearOff::T?> /* = self::Hb|_#new#tearOff::T? */ it) → self::Hb<self::Hb|_#new#tearOff::T%> /* = self::Hb|_#new#tearOff::T? */
   return self::Hb|<self::Hb|_#new#tearOff::T%>(it);
-static inline-class-member method Hc|<T extends core::Object? = dynamic>(dynamic it) → self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ {
+static inline-class-member method Hc|<T extends core::Object? = dynamic>(self::G<self::Hc|::T%>? /* = self::Hc|::T? */ it) → self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ {
   lowered final self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Hc|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Hc<self::Hc|_#new#tearOff::T%> /* = self::Hc|_#new#tearOff::T? */
+static inline-class-member method Hc|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hc|_#new#tearOff::T%>? /* = self::Hc|_#new#tearOff::T? */ it) → self::Hc<self::Hc|_#new#tearOff::T%> /* = self::Hc|_#new#tearOff::T? */
   return self::Hc|<self::Hc|_#new#tearOff::T%>(it);
-static inline-class-member method I|<T extends core::Object = dynamic>(dynamic it) → self::I<self::I|::T> /* = self::I|::T */ {
+static inline-class-member method I|<T extends core::Object = dynamic>(self::I|::T it) → self::I<self::I|::T> /* = self::I|::T */ {
   lowered final self::I<self::I|::T> /* = self::I|::T */ #this = it;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::I<self::I|_#new#tearOff::T> /* = self::I|_#new#tearOff::T */
+static inline-class-member method I|_#new#tearOff<T extends core::Object = dynamic>(self::I|_#new#tearOff::T it) → self::I<self::I|_#new#tearOff::T> /* = self::I|_#new#tearOff::T */
   return self::I|<self::I|_#new#tearOff::T>(it);
-static inline-class-member method Ja|<T extends core::Object = dynamic>(dynamic it) → self::Ja<self::Ja|::T> /* = self::Ja|::T */ {
+static inline-class-member method Ja|<T extends core::Object = dynamic>(self::I<self::Ja|::T> /* = self::Ja|::T */ it) → self::Ja<self::Ja|::T> /* = self::Ja|::T */ {
   lowered final self::Ja<self::Ja|::T> /* = self::Ja|::T */ #this = it;
   return #this;
 }
-static inline-class-member method Ja|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Ja<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */
+static inline-class-member method Ja|_#new#tearOff<T extends core::Object = dynamic>(self::I<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */ it) → self::Ja<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */
   return self::Ja|<self::Ja|_#new#tearOff::T>(it);
-static inline-class-member method Jc|<T extends core::Object = dynamic>(dynamic it) → self::Jc<self::Jc|::T> /* = self::Jc|::T? */ {
+static inline-class-member method Jc|<T extends core::Object = dynamic>(self::I<self::Jc|::T>? /* = self::Jc|::T? */ it) → self::Jc<self::Jc|::T> /* = self::Jc|::T? */ {
   lowered final self::Jc<self::Jc|::T> /* = self::Jc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Jc|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Jc<self::Jc|_#new#tearOff::T> /* = self::Jc|_#new#tearOff::T? */
+static inline-class-member method Jc|_#new#tearOff<T extends core::Object = dynamic>(self::I<self::Jc|_#new#tearOff::T>? /* = self::Jc|_#new#tearOff::T? */ it) → self::Jc<self::Jc|_#new#tearOff::T> /* = self::Jc|_#new#tearOff::T? */
   return self::Jc|<self::Jc|_#new#tearOff::T>(it);
-static inline-class-member method K|<T extends core::Object = dynamic>(dynamic it) → self::K<self::K|::T> /* = self::K|::T? */ {
+static inline-class-member method K|<T extends core::Object = dynamic>(self::K|::T? it) → self::K<self::K|::T> /* = self::K|::T? */ {
   lowered final self::K<self::K|::T> /* = self::K|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method K|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::K<self::K|_#new#tearOff::T> /* = self::K|_#new#tearOff::T? */
+static inline-class-member method K|_#new#tearOff<T extends core::Object = dynamic>(self::K|_#new#tearOff::T? it) → self::K<self::K|_#new#tearOff::T> /* = self::K|_#new#tearOff::T? */
   return self::K|<self::K|_#new#tearOff::T>(it);
-static inline-class-member method La|<T extends core::Object = dynamic>(dynamic it) → self::La<self::La|::T> /* = self::La|::T? */ {
+static inline-class-member method La|<T extends core::Object = dynamic>(self::K<self::La|::T> /* = self::La|::T? */ it) → self::La<self::La|::T> /* = self::La|::T? */ {
   lowered final self::La<self::La|::T> /* = self::La|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method La|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::La<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */
+static inline-class-member method La|_#new#tearOff<T extends core::Object = dynamic>(self::K<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */ it) → self::La<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */
   return self::La|<self::La|_#new#tearOff::T>(it);
-static inline-class-member method Lc|<T extends core::Object = dynamic>(dynamic it) → self::Lc<self::Lc|::T> /* = self::Lc|::T? */ {
+static inline-class-member method Lc|<T extends core::Object = dynamic>(self::K<self::Lc|::T>? /* = self::Lc|::T? */ it) → self::Lc<self::Lc|::T> /* = self::Lc|::T? */ {
   lowered final self::Lc<self::Lc|::T> /* = self::Lc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Lc|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Lc<self::Lc|_#new#tearOff::T> /* = self::Lc|_#new#tearOff::T? */
+static inline-class-member method Lc|_#new#tearOff<T extends core::Object = dynamic>(self::K<self::Lc|_#new#tearOff::T>? /* = self::Lc|_#new#tearOff::T? */ it) → self::Lc<self::Lc|_#new#tearOff::T> /* = self::Lc|_#new#tearOff::T? */
   return self::Lc|<self::Lc|_#new#tearOff::T>(it);
 static method testA(Never n) → dynamic {
   self::A /* = core::int */ a1 = n;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.expect
index 2224093..aaaed2e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.expect
@@ -83,125 +83,125 @@
   constructor • = self::Lc|;
   tearoff • = self::Lc|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
-static inline-class-member method Ba|(dynamic it) → self::Ba /* = core::int */ {
+static inline-class-member method Ba|(self::A /* = core::int */ it) → self::Ba /* = core::int */ {
   lowered final self::Ba /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Ba|_#new#tearOff(dynamic it) → self::Ba /* = core::int */
+static inline-class-member method Ba|_#new#tearOff(self::A /* = core::int */ it) → self::Ba /* = core::int */
   return self::Ba|(it);
-static inline-class-member method Bb|(dynamic it) → self::Bb /* = core::int? */ {
+static inline-class-member method Bb|(self::A? /* = core::int? */ it) → self::Bb /* = core::int? */ {
   lowered final self::Bb /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method Bb|_#new#tearOff(dynamic it) → self::Bb /* = core::int? */
+static inline-class-member method Bb|_#new#tearOff(self::A? /* = core::int? */ it) → self::Bb /* = core::int? */
   return self::Bb|(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = self::C|::T% */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(self::C|::T% it) → self::C<self::C|::T%> /* = self::C|::T% */ {
   lowered final self::C<self::C|::T%> /* = self::C|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = self::C|_#new#tearOff::T% */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(self::C|_#new#tearOff::T% it) → self::C<self::C|_#new#tearOff::T%> /* = self::C|_#new#tearOff::T% */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method Da|<T extends core::Object? = dynamic>(dynamic it) → self::Da<self::Da|::T%> /* = self::Da|::T% */ {
+static inline-class-member method Da|<T extends core::Object? = dynamic>(self::C<self::Da|::T%> /* = self::Da|::T% */ it) → self::Da<self::Da|::T%> /* = self::Da|::T% */ {
   lowered final self::Da<self::Da|::T%> /* = self::Da|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method Da|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Da<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */
+static inline-class-member method Da|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */ it) → self::Da<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */
   return self::Da|<self::Da|_#new#tearOff::T%>(it);
-static inline-class-member method Db|<T extends core::Object? = dynamic>(dynamic it) → self::Db<self::Db|::T%> /* = self::Db|::T? */ {
+static inline-class-member method Db|<T extends core::Object? = dynamic>(self::C<self::Db|::T?> /* = self::Db|::T? */ it) → self::Db<self::Db|::T%> /* = self::Db|::T? */ {
   lowered final self::Db<self::Db|::T%> /* = self::Db|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Db|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Db<self::Db|_#new#tearOff::T%> /* = self::Db|_#new#tearOff::T? */
+static inline-class-member method Db|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Db|_#new#tearOff::T?> /* = self::Db|_#new#tearOff::T? */ it) → self::Db<self::Db|_#new#tearOff::T%> /* = self::Db|_#new#tearOff::T? */
   return self::Db|<self::Db|_#new#tearOff::T%>(it);
-static inline-class-member method Dc|<T extends core::Object? = dynamic>(dynamic it) → self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ {
+static inline-class-member method Dc|<T extends core::Object? = dynamic>(self::C<self::Dc|::T%>? /* = self::Dc|::T? */ it) → self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ {
   lowered final self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Dc|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Dc<self::Dc|_#new#tearOff::T%> /* = self::Dc|_#new#tearOff::T? */
+static inline-class-member method Dc|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Dc|_#new#tearOff::T%>? /* = self::Dc|_#new#tearOff::T? */ it) → self::Dc<self::Dc|_#new#tearOff::T%> /* = self::Dc|_#new#tearOff::T? */
   return self::Dc|<self::Dc|_#new#tearOff::T%>(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int? */ {
+static inline-class-member method E|(core::int? it) → self::E /* = core::int? */ {
   lowered final self::E /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int? */
+static inline-class-member method E|_#new#tearOff(core::int? it) → self::E /* = core::int? */
   return self::E|(it);
-static inline-class-member method Fa|(dynamic it) → self::Fa /* = core::int? */ {
+static inline-class-member method Fa|(self::E /* = core::int? */ it) → self::Fa /* = core::int? */ {
   lowered final self::Fa /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method Fa|_#new#tearOff(dynamic it) → self::Fa /* = core::int? */
+static inline-class-member method Fa|_#new#tearOff(self::E /* = core::int? */ it) → self::Fa /* = core::int? */
   return self::Fa|(it);
-static inline-class-member method Fb|_#new#tearOff(dynamic it) → self::Fb /* = core::int? */
+static inline-class-member method Fb|_#new#tearOff(self::E? /* = core::int? */ it) → self::Fb /* = core::int? */
   return self::Fb|(it);
-static inline-class-member method Fb|(dynamic it) → self::Fb /* = core::int? */ {
+static inline-class-member method Fb|(self::E? /* = core::int? */ it) → self::Fb /* = core::int? */ {
   lowered final self::Fb /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method G|<T extends core::Object? = dynamic>(dynamic it) → self::G<self::G|::T%> /* = self::G|::T? */ {
+static inline-class-member method G|<T extends core::Object? = dynamic>(self::G|::T? it) → self::G<self::G|::T%> /* = self::G|::T? */ {
   lowered final self::G<self::G|::T%> /* = self::G|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T? */
+static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(self::G|_#new#tearOff::T? it) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T? */
   return self::G|<self::G|_#new#tearOff::T%>(it);
-static inline-class-member method Ha|<T extends core::Object? = dynamic>(dynamic it) → self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ {
+static inline-class-member method Ha|<T extends core::Object? = dynamic>(self::G<self::Ha|::T%> /* = self::Ha|::T? */ it) → self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ {
   lowered final self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Ha|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Ha<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */
+static inline-class-member method Ha|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */ it) → self::Ha<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */
   return self::Ha|<self::Ha|_#new#tearOff::T%>(it);
-static inline-class-member method Hb|<T extends core::Object? = dynamic>(dynamic it) → self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ {
+static inline-class-member method Hb|<T extends core::Object? = dynamic>(self::G<self::Hb|::T?> /* = self::Hb|::T? */ it) → self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ {
   lowered final self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Hb|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Hb<self::Hb|_#new#tearOff::T%> /* = self::Hb|_#new#tearOff::T? */
+static inline-class-member method Hb|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hb|_#new#tearOff::T?> /* = self::Hb|_#new#tearOff::T? */ it) → self::Hb<self::Hb|_#new#tearOff::T%> /* = self::Hb|_#new#tearOff::T? */
   return self::Hb|<self::Hb|_#new#tearOff::T%>(it);
-static inline-class-member method Hc|<T extends core::Object? = dynamic>(dynamic it) → self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ {
+static inline-class-member method Hc|<T extends core::Object? = dynamic>(self::G<self::Hc|::T%>? /* = self::Hc|::T? */ it) → self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ {
   lowered final self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Hc|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Hc<self::Hc|_#new#tearOff::T%> /* = self::Hc|_#new#tearOff::T? */
+static inline-class-member method Hc|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hc|_#new#tearOff::T%>? /* = self::Hc|_#new#tearOff::T? */ it) → self::Hc<self::Hc|_#new#tearOff::T%> /* = self::Hc|_#new#tearOff::T? */
   return self::Hc|<self::Hc|_#new#tearOff::T%>(it);
-static inline-class-member method I|<T extends core::Object = dynamic>(dynamic it) → self::I<self::I|::T> /* = self::I|::T */ {
+static inline-class-member method I|<T extends core::Object = dynamic>(self::I|::T it) → self::I<self::I|::T> /* = self::I|::T */ {
   lowered final self::I<self::I|::T> /* = self::I|::T */ #this = it;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::I<self::I|_#new#tearOff::T> /* = self::I|_#new#tearOff::T */
+static inline-class-member method I|_#new#tearOff<T extends core::Object = dynamic>(self::I|_#new#tearOff::T it) → self::I<self::I|_#new#tearOff::T> /* = self::I|_#new#tearOff::T */
   return self::I|<self::I|_#new#tearOff::T>(it);
-static inline-class-member method Ja|<T extends core::Object = dynamic>(dynamic it) → self::Ja<self::Ja|::T> /* = self::Ja|::T */ {
+static inline-class-member method Ja|<T extends core::Object = dynamic>(self::I<self::Ja|::T> /* = self::Ja|::T */ it) → self::Ja<self::Ja|::T> /* = self::Ja|::T */ {
   lowered final self::Ja<self::Ja|::T> /* = self::Ja|::T */ #this = it;
   return #this;
 }
-static inline-class-member method Ja|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Ja<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */
+static inline-class-member method Ja|_#new#tearOff<T extends core::Object = dynamic>(self::I<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */ it) → self::Ja<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */
   return self::Ja|<self::Ja|_#new#tearOff::T>(it);
-static inline-class-member method Jc|<T extends core::Object = dynamic>(dynamic it) → self::Jc<self::Jc|::T> /* = self::Jc|::T? */ {
+static inline-class-member method Jc|<T extends core::Object = dynamic>(self::I<self::Jc|::T>? /* = self::Jc|::T? */ it) → self::Jc<self::Jc|::T> /* = self::Jc|::T? */ {
   lowered final self::Jc<self::Jc|::T> /* = self::Jc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Jc|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Jc<self::Jc|_#new#tearOff::T> /* = self::Jc|_#new#tearOff::T? */
+static inline-class-member method Jc|_#new#tearOff<T extends core::Object = dynamic>(self::I<self::Jc|_#new#tearOff::T>? /* = self::Jc|_#new#tearOff::T? */ it) → self::Jc<self::Jc|_#new#tearOff::T> /* = self::Jc|_#new#tearOff::T? */
   return self::Jc|<self::Jc|_#new#tearOff::T>(it);
-static inline-class-member method K|<T extends core::Object = dynamic>(dynamic it) → self::K<self::K|::T> /* = self::K|::T? */ {
+static inline-class-member method K|<T extends core::Object = dynamic>(self::K|::T? it) → self::K<self::K|::T> /* = self::K|::T? */ {
   lowered final self::K<self::K|::T> /* = self::K|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method K|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::K<self::K|_#new#tearOff::T> /* = self::K|_#new#tearOff::T? */
+static inline-class-member method K|_#new#tearOff<T extends core::Object = dynamic>(self::K|_#new#tearOff::T? it) → self::K<self::K|_#new#tearOff::T> /* = self::K|_#new#tearOff::T? */
   return self::K|<self::K|_#new#tearOff::T>(it);
-static inline-class-member method La|<T extends core::Object = dynamic>(dynamic it) → self::La<self::La|::T> /* = self::La|::T? */ {
+static inline-class-member method La|<T extends core::Object = dynamic>(self::K<self::La|::T> /* = self::La|::T? */ it) → self::La<self::La|::T> /* = self::La|::T? */ {
   lowered final self::La<self::La|::T> /* = self::La|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method La|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::La<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */
+static inline-class-member method La|_#new#tearOff<T extends core::Object = dynamic>(self::K<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */ it) → self::La<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */
   return self::La|<self::La|_#new#tearOff::T>(it);
-static inline-class-member method Lc|<T extends core::Object = dynamic>(dynamic it) → self::Lc<self::Lc|::T> /* = self::Lc|::T? */ {
+static inline-class-member method Lc|<T extends core::Object = dynamic>(self::K<self::Lc|::T>? /* = self::Lc|::T? */ it) → self::Lc<self::Lc|::T> /* = self::Lc|::T? */ {
   lowered final self::Lc<self::Lc|::T> /* = self::Lc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Lc|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Lc<self::Lc|_#new#tearOff::T> /* = self::Lc|_#new#tearOff::T? */
+static inline-class-member method Lc|_#new#tearOff<T extends core::Object = dynamic>(self::K<self::Lc|_#new#tearOff::T>? /* = self::Lc|_#new#tearOff::T? */ it) → self::Lc<self::Lc|_#new#tearOff::T> /* = self::Lc|_#new#tearOff::T? */
   return self::Lc|<self::Lc|_#new#tearOff::T>(it);
 static method testA(Never n) → dynamic {
   self::A /* = core::int */ a1 = let final Never #t1 = n in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.modular.expect
index 2224093..aaaed2e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.modular.expect
@@ -83,125 +83,125 @@
   constructor • = self::Lc|;
   tearoff • = self::Lc|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
-static inline-class-member method Ba|(dynamic it) → self::Ba /* = core::int */ {
+static inline-class-member method Ba|(self::A /* = core::int */ it) → self::Ba /* = core::int */ {
   lowered final self::Ba /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Ba|_#new#tearOff(dynamic it) → self::Ba /* = core::int */
+static inline-class-member method Ba|_#new#tearOff(self::A /* = core::int */ it) → self::Ba /* = core::int */
   return self::Ba|(it);
-static inline-class-member method Bb|(dynamic it) → self::Bb /* = core::int? */ {
+static inline-class-member method Bb|(self::A? /* = core::int? */ it) → self::Bb /* = core::int? */ {
   lowered final self::Bb /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method Bb|_#new#tearOff(dynamic it) → self::Bb /* = core::int? */
+static inline-class-member method Bb|_#new#tearOff(self::A? /* = core::int? */ it) → self::Bb /* = core::int? */
   return self::Bb|(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = self::C|::T% */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(self::C|::T% it) → self::C<self::C|::T%> /* = self::C|::T% */ {
   lowered final self::C<self::C|::T%> /* = self::C|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = self::C|_#new#tearOff::T% */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(self::C|_#new#tearOff::T% it) → self::C<self::C|_#new#tearOff::T%> /* = self::C|_#new#tearOff::T% */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method Da|<T extends core::Object? = dynamic>(dynamic it) → self::Da<self::Da|::T%> /* = self::Da|::T% */ {
+static inline-class-member method Da|<T extends core::Object? = dynamic>(self::C<self::Da|::T%> /* = self::Da|::T% */ it) → self::Da<self::Da|::T%> /* = self::Da|::T% */ {
   lowered final self::Da<self::Da|::T%> /* = self::Da|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method Da|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Da<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */
+static inline-class-member method Da|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */ it) → self::Da<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */
   return self::Da|<self::Da|_#new#tearOff::T%>(it);
-static inline-class-member method Db|<T extends core::Object? = dynamic>(dynamic it) → self::Db<self::Db|::T%> /* = self::Db|::T? */ {
+static inline-class-member method Db|<T extends core::Object? = dynamic>(self::C<self::Db|::T?> /* = self::Db|::T? */ it) → self::Db<self::Db|::T%> /* = self::Db|::T? */ {
   lowered final self::Db<self::Db|::T%> /* = self::Db|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Db|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Db<self::Db|_#new#tearOff::T%> /* = self::Db|_#new#tearOff::T? */
+static inline-class-member method Db|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Db|_#new#tearOff::T?> /* = self::Db|_#new#tearOff::T? */ it) → self::Db<self::Db|_#new#tearOff::T%> /* = self::Db|_#new#tearOff::T? */
   return self::Db|<self::Db|_#new#tearOff::T%>(it);
-static inline-class-member method Dc|<T extends core::Object? = dynamic>(dynamic it) → self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ {
+static inline-class-member method Dc|<T extends core::Object? = dynamic>(self::C<self::Dc|::T%>? /* = self::Dc|::T? */ it) → self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ {
   lowered final self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Dc|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Dc<self::Dc|_#new#tearOff::T%> /* = self::Dc|_#new#tearOff::T? */
+static inline-class-member method Dc|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Dc|_#new#tearOff::T%>? /* = self::Dc|_#new#tearOff::T? */ it) → self::Dc<self::Dc|_#new#tearOff::T%> /* = self::Dc|_#new#tearOff::T? */
   return self::Dc|<self::Dc|_#new#tearOff::T%>(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int? */ {
+static inline-class-member method E|(core::int? it) → self::E /* = core::int? */ {
   lowered final self::E /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int? */
+static inline-class-member method E|_#new#tearOff(core::int? it) → self::E /* = core::int? */
   return self::E|(it);
-static inline-class-member method Fa|(dynamic it) → self::Fa /* = core::int? */ {
+static inline-class-member method Fa|(self::E /* = core::int? */ it) → self::Fa /* = core::int? */ {
   lowered final self::Fa /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method Fa|_#new#tearOff(dynamic it) → self::Fa /* = core::int? */
+static inline-class-member method Fa|_#new#tearOff(self::E /* = core::int? */ it) → self::Fa /* = core::int? */
   return self::Fa|(it);
-static inline-class-member method Fb|_#new#tearOff(dynamic it) → self::Fb /* = core::int? */
+static inline-class-member method Fb|_#new#tearOff(self::E? /* = core::int? */ it) → self::Fb /* = core::int? */
   return self::Fb|(it);
-static inline-class-member method Fb|(dynamic it) → self::Fb /* = core::int? */ {
+static inline-class-member method Fb|(self::E? /* = core::int? */ it) → self::Fb /* = core::int? */ {
   lowered final self::Fb /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method G|<T extends core::Object? = dynamic>(dynamic it) → self::G<self::G|::T%> /* = self::G|::T? */ {
+static inline-class-member method G|<T extends core::Object? = dynamic>(self::G|::T? it) → self::G<self::G|::T%> /* = self::G|::T? */ {
   lowered final self::G<self::G|::T%> /* = self::G|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T? */
+static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(self::G|_#new#tearOff::T? it) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T? */
   return self::G|<self::G|_#new#tearOff::T%>(it);
-static inline-class-member method Ha|<T extends core::Object? = dynamic>(dynamic it) → self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ {
+static inline-class-member method Ha|<T extends core::Object? = dynamic>(self::G<self::Ha|::T%> /* = self::Ha|::T? */ it) → self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ {
   lowered final self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Ha|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Ha<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */
+static inline-class-member method Ha|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */ it) → self::Ha<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */
   return self::Ha|<self::Ha|_#new#tearOff::T%>(it);
-static inline-class-member method Hb|<T extends core::Object? = dynamic>(dynamic it) → self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ {
+static inline-class-member method Hb|<T extends core::Object? = dynamic>(self::G<self::Hb|::T?> /* = self::Hb|::T? */ it) → self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ {
   lowered final self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Hb|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Hb<self::Hb|_#new#tearOff::T%> /* = self::Hb|_#new#tearOff::T? */
+static inline-class-member method Hb|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hb|_#new#tearOff::T?> /* = self::Hb|_#new#tearOff::T? */ it) → self::Hb<self::Hb|_#new#tearOff::T%> /* = self::Hb|_#new#tearOff::T? */
   return self::Hb|<self::Hb|_#new#tearOff::T%>(it);
-static inline-class-member method Hc|<T extends core::Object? = dynamic>(dynamic it) → self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ {
+static inline-class-member method Hc|<T extends core::Object? = dynamic>(self::G<self::Hc|::T%>? /* = self::Hc|::T? */ it) → self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ {
   lowered final self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Hc|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Hc<self::Hc|_#new#tearOff::T%> /* = self::Hc|_#new#tearOff::T? */
+static inline-class-member method Hc|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hc|_#new#tearOff::T%>? /* = self::Hc|_#new#tearOff::T? */ it) → self::Hc<self::Hc|_#new#tearOff::T%> /* = self::Hc|_#new#tearOff::T? */
   return self::Hc|<self::Hc|_#new#tearOff::T%>(it);
-static inline-class-member method I|<T extends core::Object = dynamic>(dynamic it) → self::I<self::I|::T> /* = self::I|::T */ {
+static inline-class-member method I|<T extends core::Object = dynamic>(self::I|::T it) → self::I<self::I|::T> /* = self::I|::T */ {
   lowered final self::I<self::I|::T> /* = self::I|::T */ #this = it;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::I<self::I|_#new#tearOff::T> /* = self::I|_#new#tearOff::T */
+static inline-class-member method I|_#new#tearOff<T extends core::Object = dynamic>(self::I|_#new#tearOff::T it) → self::I<self::I|_#new#tearOff::T> /* = self::I|_#new#tearOff::T */
   return self::I|<self::I|_#new#tearOff::T>(it);
-static inline-class-member method Ja|<T extends core::Object = dynamic>(dynamic it) → self::Ja<self::Ja|::T> /* = self::Ja|::T */ {
+static inline-class-member method Ja|<T extends core::Object = dynamic>(self::I<self::Ja|::T> /* = self::Ja|::T */ it) → self::Ja<self::Ja|::T> /* = self::Ja|::T */ {
   lowered final self::Ja<self::Ja|::T> /* = self::Ja|::T */ #this = it;
   return #this;
 }
-static inline-class-member method Ja|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Ja<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */
+static inline-class-member method Ja|_#new#tearOff<T extends core::Object = dynamic>(self::I<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */ it) → self::Ja<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */
   return self::Ja|<self::Ja|_#new#tearOff::T>(it);
-static inline-class-member method Jc|<T extends core::Object = dynamic>(dynamic it) → self::Jc<self::Jc|::T> /* = self::Jc|::T? */ {
+static inline-class-member method Jc|<T extends core::Object = dynamic>(self::I<self::Jc|::T>? /* = self::Jc|::T? */ it) → self::Jc<self::Jc|::T> /* = self::Jc|::T? */ {
   lowered final self::Jc<self::Jc|::T> /* = self::Jc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Jc|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Jc<self::Jc|_#new#tearOff::T> /* = self::Jc|_#new#tearOff::T? */
+static inline-class-member method Jc|_#new#tearOff<T extends core::Object = dynamic>(self::I<self::Jc|_#new#tearOff::T>? /* = self::Jc|_#new#tearOff::T? */ it) → self::Jc<self::Jc|_#new#tearOff::T> /* = self::Jc|_#new#tearOff::T? */
   return self::Jc|<self::Jc|_#new#tearOff::T>(it);
-static inline-class-member method K|<T extends core::Object = dynamic>(dynamic it) → self::K<self::K|::T> /* = self::K|::T? */ {
+static inline-class-member method K|<T extends core::Object = dynamic>(self::K|::T? it) → self::K<self::K|::T> /* = self::K|::T? */ {
   lowered final self::K<self::K|::T> /* = self::K|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method K|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::K<self::K|_#new#tearOff::T> /* = self::K|_#new#tearOff::T? */
+static inline-class-member method K|_#new#tearOff<T extends core::Object = dynamic>(self::K|_#new#tearOff::T? it) → self::K<self::K|_#new#tearOff::T> /* = self::K|_#new#tearOff::T? */
   return self::K|<self::K|_#new#tearOff::T>(it);
-static inline-class-member method La|<T extends core::Object = dynamic>(dynamic it) → self::La<self::La|::T> /* = self::La|::T? */ {
+static inline-class-member method La|<T extends core::Object = dynamic>(self::K<self::La|::T> /* = self::La|::T? */ it) → self::La<self::La|::T> /* = self::La|::T? */ {
   lowered final self::La<self::La|::T> /* = self::La|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method La|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::La<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */
+static inline-class-member method La|_#new#tearOff<T extends core::Object = dynamic>(self::K<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */ it) → self::La<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */
   return self::La|<self::La|_#new#tearOff::T>(it);
-static inline-class-member method Lc|<T extends core::Object = dynamic>(dynamic it) → self::Lc<self::Lc|::T> /* = self::Lc|::T? */ {
+static inline-class-member method Lc|<T extends core::Object = dynamic>(self::K<self::Lc|::T>? /* = self::Lc|::T? */ it) → self::Lc<self::Lc|::T> /* = self::Lc|::T? */ {
   lowered final self::Lc<self::Lc|::T> /* = self::Lc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Lc|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Lc<self::Lc|_#new#tearOff::T> /* = self::Lc|_#new#tearOff::T? */
+static inline-class-member method Lc|_#new#tearOff<T extends core::Object = dynamic>(self::K<self::Lc|_#new#tearOff::T>? /* = self::Lc|_#new#tearOff::T? */ it) → self::Lc<self::Lc|_#new#tearOff::T> /* = self::Lc|_#new#tearOff::T? */
   return self::Lc|<self::Lc|_#new#tearOff::T>(it);
 static method testA(Never n) → dynamic {
   self::A /* = core::int */ a1 = let final Never #t1 = n in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.outline.expect
index 2186e20..48f81d5 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.outline.expect
@@ -82,85 +82,85 @@
   constructor • = self::Lc|;
   tearoff • = self::Lc|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|(core::int it) → self::A /* = core::int */
   ;
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
-static inline-class-member method Ba|(dynamic it) → self::Ba /* = core::int */
+static inline-class-member method Ba|(self::A /* = core::int */ it) → self::Ba /* = core::int */
   ;
-static inline-class-member method Ba|_#new#tearOff(dynamic it) → self::Ba /* = core::int */
+static inline-class-member method Ba|_#new#tearOff(self::A /* = core::int */ it) → self::Ba /* = core::int */
   return self::Ba|(it);
-static inline-class-member method Bb|(dynamic it) → self::Bb /* = core::int? */
+static inline-class-member method Bb|(self::A? /* = core::int? */ it) → self::Bb /* = core::int? */
   ;
-static inline-class-member method Bb|_#new#tearOff(dynamic it) → self::Bb /* = core::int? */
+static inline-class-member method Bb|_#new#tearOff(self::A? /* = core::int? */ it) → self::Bb /* = core::int? */
   return self::Bb|(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = self::C|::T% */
+static inline-class-member method C|<T extends core::Object? = dynamic>(self::C|::T% it) → self::C<self::C|::T%> /* = self::C|::T% */
   ;
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = self::C|_#new#tearOff::T% */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(self::C|_#new#tearOff::T% it) → self::C<self::C|_#new#tearOff::T%> /* = self::C|_#new#tearOff::T% */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method Da|<T extends core::Object? = dynamic>(dynamic it) → self::Da<self::Da|::T%> /* = self::Da|::T% */
+static inline-class-member method Da|<T extends core::Object? = dynamic>(self::C<self::Da|::T%> /* = self::Da|::T% */ it) → self::Da<self::Da|::T%> /* = self::Da|::T% */
   ;
-static inline-class-member method Da|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Da<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */
+static inline-class-member method Da|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */ it) → self::Da<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */
   return self::Da|<self::Da|_#new#tearOff::T%>(it);
-static inline-class-member method Db|<T extends core::Object? = dynamic>(dynamic it) → self::Db<self::Db|::T%> /* = self::Db|::T? */
+static inline-class-member method Db|<T extends core::Object? = dynamic>(self::C<self::Db|::T?> /* = self::Db|::T? */ it) → self::Db<self::Db|::T%> /* = self::Db|::T? */
   ;
-static inline-class-member method Db|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Db<self::Db|_#new#tearOff::T%> /* = self::Db|_#new#tearOff::T? */
+static inline-class-member method Db|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Db|_#new#tearOff::T?> /* = self::Db|_#new#tearOff::T? */ it) → self::Db<self::Db|_#new#tearOff::T%> /* = self::Db|_#new#tearOff::T? */
   return self::Db|<self::Db|_#new#tearOff::T%>(it);
-static inline-class-member method Dc|<T extends core::Object? = dynamic>(dynamic it) → self::Dc<self::Dc|::T%> /* = self::Dc|::T? */
+static inline-class-member method Dc|<T extends core::Object? = dynamic>(self::C<self::Dc|::T%>? /* = self::Dc|::T? */ it) → self::Dc<self::Dc|::T%> /* = self::Dc|::T? */
   ;
-static inline-class-member method Dc|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Dc<self::Dc|_#new#tearOff::T%> /* = self::Dc|_#new#tearOff::T? */
+static inline-class-member method Dc|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Dc|_#new#tearOff::T%>? /* = self::Dc|_#new#tearOff::T? */ it) → self::Dc<self::Dc|_#new#tearOff::T%> /* = self::Dc|_#new#tearOff::T? */
   return self::Dc|<self::Dc|_#new#tearOff::T%>(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int? */
+static inline-class-member method E|(core::int? it) → self::E /* = core::int? */
   ;
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int? */
+static inline-class-member method E|_#new#tearOff(core::int? it) → self::E /* = core::int? */
   return self::E|(it);
-static inline-class-member method Fa|(dynamic it) → self::Fa /* = core::int? */
+static inline-class-member method Fa|(self::E /* = core::int? */ it) → self::Fa /* = core::int? */
   ;
-static inline-class-member method Fa|_#new#tearOff(dynamic it) → self::Fa /* = core::int? */
+static inline-class-member method Fa|_#new#tearOff(self::E /* = core::int? */ it) → self::Fa /* = core::int? */
   return self::Fa|(it);
-static inline-class-member method Fb|_#new#tearOff(dynamic it) → self::Fb /* = core::int? */
+static inline-class-member method Fb|_#new#tearOff(self::E? /* = core::int? */ it) → self::Fb /* = core::int? */
   return self::Fb|(it);
-static inline-class-member method Fb|(dynamic it) → self::Fb /* = core::int? */
+static inline-class-member method Fb|(self::E? /* = core::int? */ it) → self::Fb /* = core::int? */
   ;
-static inline-class-member method G|<T extends core::Object? = dynamic>(dynamic it) → self::G<self::G|::T%> /* = self::G|::T? */
+static inline-class-member method G|<T extends core::Object? = dynamic>(self::G|::T? it) → self::G<self::G|::T%> /* = self::G|::T? */
   ;
-static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T? */
+static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(self::G|_#new#tearOff::T? it) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T? */
   return self::G|<self::G|_#new#tearOff::T%>(it);
-static inline-class-member method Ha|<T extends core::Object? = dynamic>(dynamic it) → self::Ha<self::Ha|::T%> /* = self::Ha|::T? */
+static inline-class-member method Ha|<T extends core::Object? = dynamic>(self::G<self::Ha|::T%> /* = self::Ha|::T? */ it) → self::Ha<self::Ha|::T%> /* = self::Ha|::T? */
   ;
-static inline-class-member method Ha|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Ha<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */
+static inline-class-member method Ha|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */ it) → self::Ha<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */
   return self::Ha|<self::Ha|_#new#tearOff::T%>(it);
-static inline-class-member method Hb|<T extends core::Object? = dynamic>(dynamic it) → self::Hb<self::Hb|::T%> /* = self::Hb|::T? */
+static inline-class-member method Hb|<T extends core::Object? = dynamic>(self::G<self::Hb|::T?> /* = self::Hb|::T? */ it) → self::Hb<self::Hb|::T%> /* = self::Hb|::T? */
   ;
-static inline-class-member method Hb|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Hb<self::Hb|_#new#tearOff::T%> /* = self::Hb|_#new#tearOff::T? */
+static inline-class-member method Hb|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hb|_#new#tearOff::T?> /* = self::Hb|_#new#tearOff::T? */ it) → self::Hb<self::Hb|_#new#tearOff::T%> /* = self::Hb|_#new#tearOff::T? */
   return self::Hb|<self::Hb|_#new#tearOff::T%>(it);
-static inline-class-member method Hc|<T extends core::Object? = dynamic>(dynamic it) → self::Hc<self::Hc|::T%> /* = self::Hc|::T? */
+static inline-class-member method Hc|<T extends core::Object? = dynamic>(self::G<self::Hc|::T%>? /* = self::Hc|::T? */ it) → self::Hc<self::Hc|::T%> /* = self::Hc|::T? */
   ;
-static inline-class-member method Hc|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Hc<self::Hc|_#new#tearOff::T%> /* = self::Hc|_#new#tearOff::T? */
+static inline-class-member method Hc|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hc|_#new#tearOff::T%>? /* = self::Hc|_#new#tearOff::T? */ it) → self::Hc<self::Hc|_#new#tearOff::T%> /* = self::Hc|_#new#tearOff::T? */
   return self::Hc|<self::Hc|_#new#tearOff::T%>(it);
-static inline-class-member method I|<T extends core::Object = dynamic>(dynamic it) → self::I<self::I|::T> /* = self::I|::T */
+static inline-class-member method I|<T extends core::Object = dynamic>(self::I|::T it) → self::I<self::I|::T> /* = self::I|::T */
   ;
-static inline-class-member method I|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::I<self::I|_#new#tearOff::T> /* = self::I|_#new#tearOff::T */
+static inline-class-member method I|_#new#tearOff<T extends core::Object = dynamic>(self::I|_#new#tearOff::T it) → self::I<self::I|_#new#tearOff::T> /* = self::I|_#new#tearOff::T */
   return self::I|<self::I|_#new#tearOff::T>(it);
-static inline-class-member method Ja|<T extends core::Object = dynamic>(dynamic it) → self::Ja<self::Ja|::T> /* = self::Ja|::T */
+static inline-class-member method Ja|<T extends core::Object = dynamic>(self::I<self::Ja|::T> /* = self::Ja|::T */ it) → self::Ja<self::Ja|::T> /* = self::Ja|::T */
   ;
-static inline-class-member method Ja|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Ja<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */
+static inline-class-member method Ja|_#new#tearOff<T extends core::Object = dynamic>(self::I<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */ it) → self::Ja<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */
   return self::Ja|<self::Ja|_#new#tearOff::T>(it);
-static inline-class-member method Jc|<T extends core::Object = dynamic>(dynamic it) → self::Jc<self::Jc|::T> /* = self::Jc|::T? */
+static inline-class-member method Jc|<T extends core::Object = dynamic>(self::I<self::Jc|::T>? /* = self::Jc|::T? */ it) → self::Jc<self::Jc|::T> /* = self::Jc|::T? */
   ;
-static inline-class-member method Jc|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Jc<self::Jc|_#new#tearOff::T> /* = self::Jc|_#new#tearOff::T? */
+static inline-class-member method Jc|_#new#tearOff<T extends core::Object = dynamic>(self::I<self::Jc|_#new#tearOff::T>? /* = self::Jc|_#new#tearOff::T? */ it) → self::Jc<self::Jc|_#new#tearOff::T> /* = self::Jc|_#new#tearOff::T? */
   return self::Jc|<self::Jc|_#new#tearOff::T>(it);
-static inline-class-member method K|<T extends core::Object = dynamic>(dynamic it) → self::K<self::K|::T> /* = self::K|::T? */
+static inline-class-member method K|<T extends core::Object = dynamic>(self::K|::T? it) → self::K<self::K|::T> /* = self::K|::T? */
   ;
-static inline-class-member method K|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::K<self::K|_#new#tearOff::T> /* = self::K|_#new#tearOff::T? */
+static inline-class-member method K|_#new#tearOff<T extends core::Object = dynamic>(self::K|_#new#tearOff::T? it) → self::K<self::K|_#new#tearOff::T> /* = self::K|_#new#tearOff::T? */
   return self::K|<self::K|_#new#tearOff::T>(it);
-static inline-class-member method La|<T extends core::Object = dynamic>(dynamic it) → self::La<self::La|::T> /* = self::La|::T? */
+static inline-class-member method La|<T extends core::Object = dynamic>(self::K<self::La|::T> /* = self::La|::T? */ it) → self::La<self::La|::T> /* = self::La|::T? */
   ;
-static inline-class-member method La|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::La<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */
+static inline-class-member method La|_#new#tearOff<T extends core::Object = dynamic>(self::K<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */ it) → self::La<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */
   return self::La|<self::La|_#new#tearOff::T>(it);
-static inline-class-member method Lc|<T extends core::Object = dynamic>(dynamic it) → self::Lc<self::Lc|::T> /* = self::Lc|::T? */
+static inline-class-member method Lc|<T extends core::Object = dynamic>(self::K<self::Lc|::T>? /* = self::Lc|::T? */ it) → self::Lc<self::Lc|::T> /* = self::Lc|::T? */
   ;
-static inline-class-member method Lc|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Lc<self::Lc|_#new#tearOff::T> /* = self::Lc|_#new#tearOff::T? */
+static inline-class-member method Lc|_#new#tearOff<T extends core::Object = dynamic>(self::K<self::Lc|_#new#tearOff::T>? /* = self::Lc|_#new#tearOff::T? */ it) → self::Lc<self::Lc|_#new#tearOff::T> /* = self::Lc|_#new#tearOff::T? */
   return self::Lc|<self::Lc|_#new#tearOff::T>(it);
 static method testA(Never n) → dynamic
   ;
diff --git a/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.transformed.expect
index 2224093..aaaed2e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/representation_type.dart.weak.transformed.expect
@@ -83,125 +83,125 @@
   constructor • = self::Lc|;
   tearoff • = self::Lc|_#new#tearOff;
 }
-static inline-class-member method A|(dynamic it) → self::A /* = core::int */ {
+static inline-class-member method A|(core::int it) → self::A /* = core::int */ {
   lowered final self::A /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff(dynamic it) → self::A /* = core::int */
+static inline-class-member method A|_#new#tearOff(core::int it) → self::A /* = core::int */
   return self::A|(it);
-static inline-class-member method Ba|(dynamic it) → self::Ba /* = core::int */ {
+static inline-class-member method Ba|(self::A /* = core::int */ it) → self::Ba /* = core::int */ {
   lowered final self::Ba /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method Ba|_#new#tearOff(dynamic it) → self::Ba /* = core::int */
+static inline-class-member method Ba|_#new#tearOff(self::A /* = core::int */ it) → self::Ba /* = core::int */
   return self::Ba|(it);
-static inline-class-member method Bb|(dynamic it) → self::Bb /* = core::int? */ {
+static inline-class-member method Bb|(self::A? /* = core::int? */ it) → self::Bb /* = core::int? */ {
   lowered final self::Bb /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method Bb|_#new#tearOff(dynamic it) → self::Bb /* = core::int? */
+static inline-class-member method Bb|_#new#tearOff(self::A? /* = core::int? */ it) → self::Bb /* = core::int? */
   return self::Bb|(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = self::C|::T% */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(self::C|::T% it) → self::C<self::C|::T%> /* = self::C|::T% */ {
   lowered final self::C<self::C|::T%> /* = self::C|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = self::C|_#new#tearOff::T% */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(self::C|_#new#tearOff::T% it) → self::C<self::C|_#new#tearOff::T%> /* = self::C|_#new#tearOff::T% */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method Da|<T extends core::Object? = dynamic>(dynamic it) → self::Da<self::Da|::T%> /* = self::Da|::T% */ {
+static inline-class-member method Da|<T extends core::Object? = dynamic>(self::C<self::Da|::T%> /* = self::Da|::T% */ it) → self::Da<self::Da|::T%> /* = self::Da|::T% */ {
   lowered final self::Da<self::Da|::T%> /* = self::Da|::T% */ #this = it;
   return #this;
 }
-static inline-class-member method Da|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Da<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */
+static inline-class-member method Da|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */ it) → self::Da<self::Da|_#new#tearOff::T%> /* = self::Da|_#new#tearOff::T% */
   return self::Da|<self::Da|_#new#tearOff::T%>(it);
-static inline-class-member method Db|<T extends core::Object? = dynamic>(dynamic it) → self::Db<self::Db|::T%> /* = self::Db|::T? */ {
+static inline-class-member method Db|<T extends core::Object? = dynamic>(self::C<self::Db|::T?> /* = self::Db|::T? */ it) → self::Db<self::Db|::T%> /* = self::Db|::T? */ {
   lowered final self::Db<self::Db|::T%> /* = self::Db|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Db|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Db<self::Db|_#new#tearOff::T%> /* = self::Db|_#new#tearOff::T? */
+static inline-class-member method Db|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Db|_#new#tearOff::T?> /* = self::Db|_#new#tearOff::T? */ it) → self::Db<self::Db|_#new#tearOff::T%> /* = self::Db|_#new#tearOff::T? */
   return self::Db|<self::Db|_#new#tearOff::T%>(it);
-static inline-class-member method Dc|<T extends core::Object? = dynamic>(dynamic it) → self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ {
+static inline-class-member method Dc|<T extends core::Object? = dynamic>(self::C<self::Dc|::T%>? /* = self::Dc|::T? */ it) → self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ {
   lowered final self::Dc<self::Dc|::T%> /* = self::Dc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Dc|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Dc<self::Dc|_#new#tearOff::T%> /* = self::Dc|_#new#tearOff::T? */
+static inline-class-member method Dc|_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Dc|_#new#tearOff::T%>? /* = self::Dc|_#new#tearOff::T? */ it) → self::Dc<self::Dc|_#new#tearOff::T%> /* = self::Dc|_#new#tearOff::T? */
   return self::Dc|<self::Dc|_#new#tearOff::T%>(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int? */ {
+static inline-class-member method E|(core::int? it) → self::E /* = core::int? */ {
   lowered final self::E /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int? */
+static inline-class-member method E|_#new#tearOff(core::int? it) → self::E /* = core::int? */
   return self::E|(it);
-static inline-class-member method Fa|(dynamic it) → self::Fa /* = core::int? */ {
+static inline-class-member method Fa|(self::E /* = core::int? */ it) → self::Fa /* = core::int? */ {
   lowered final self::Fa /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method Fa|_#new#tearOff(dynamic it) → self::Fa /* = core::int? */
+static inline-class-member method Fa|_#new#tearOff(self::E /* = core::int? */ it) → self::Fa /* = core::int? */
   return self::Fa|(it);
-static inline-class-member method Fb|_#new#tearOff(dynamic it) → self::Fb /* = core::int? */
+static inline-class-member method Fb|_#new#tearOff(self::E? /* = core::int? */ it) → self::Fb /* = core::int? */
   return self::Fb|(it);
-static inline-class-member method Fb|(dynamic it) → self::Fb /* = core::int? */ {
+static inline-class-member method Fb|(self::E? /* = core::int? */ it) → self::Fb /* = core::int? */ {
   lowered final self::Fb /* = core::int? */ #this = it;
   return #this;
 }
-static inline-class-member method G|<T extends core::Object? = dynamic>(dynamic it) → self::G<self::G|::T%> /* = self::G|::T? */ {
+static inline-class-member method G|<T extends core::Object? = dynamic>(self::G|::T? it) → self::G<self::G|::T%> /* = self::G|::T? */ {
   lowered final self::G<self::G|::T%> /* = self::G|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T? */
+static inline-class-member method G|_#new#tearOff<T extends core::Object? = dynamic>(self::G|_#new#tearOff::T? it) → self::G<self::G|_#new#tearOff::T%> /* = self::G|_#new#tearOff::T? */
   return self::G|<self::G|_#new#tearOff::T%>(it);
-static inline-class-member method Ha|<T extends core::Object? = dynamic>(dynamic it) → self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ {
+static inline-class-member method Ha|<T extends core::Object? = dynamic>(self::G<self::Ha|::T%> /* = self::Ha|::T? */ it) → self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ {
   lowered final self::Ha<self::Ha|::T%> /* = self::Ha|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Ha|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Ha<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */
+static inline-class-member method Ha|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */ it) → self::Ha<self::Ha|_#new#tearOff::T%> /* = self::Ha|_#new#tearOff::T? */
   return self::Ha|<self::Ha|_#new#tearOff::T%>(it);
-static inline-class-member method Hb|<T extends core::Object? = dynamic>(dynamic it) → self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ {
+static inline-class-member method Hb|<T extends core::Object? = dynamic>(self::G<self::Hb|::T?> /* = self::Hb|::T? */ it) → self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ {
   lowered final self::Hb<self::Hb|::T%> /* = self::Hb|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Hb|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Hb<self::Hb|_#new#tearOff::T%> /* = self::Hb|_#new#tearOff::T? */
+static inline-class-member method Hb|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hb|_#new#tearOff::T?> /* = self::Hb|_#new#tearOff::T? */ it) → self::Hb<self::Hb|_#new#tearOff::T%> /* = self::Hb|_#new#tearOff::T? */
   return self::Hb|<self::Hb|_#new#tearOff::T%>(it);
-static inline-class-member method Hc|<T extends core::Object? = dynamic>(dynamic it) → self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ {
+static inline-class-member method Hc|<T extends core::Object? = dynamic>(self::G<self::Hc|::T%>? /* = self::Hc|::T? */ it) → self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ {
   lowered final self::Hc<self::Hc|::T%> /* = self::Hc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Hc|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::Hc<self::Hc|_#new#tearOff::T%> /* = self::Hc|_#new#tearOff::T? */
+static inline-class-member method Hc|_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hc|_#new#tearOff::T%>? /* = self::Hc|_#new#tearOff::T? */ it) → self::Hc<self::Hc|_#new#tearOff::T%> /* = self::Hc|_#new#tearOff::T? */
   return self::Hc|<self::Hc|_#new#tearOff::T%>(it);
-static inline-class-member method I|<T extends core::Object = dynamic>(dynamic it) → self::I<self::I|::T> /* = self::I|::T */ {
+static inline-class-member method I|<T extends core::Object = dynamic>(self::I|::T it) → self::I<self::I|::T> /* = self::I|::T */ {
   lowered final self::I<self::I|::T> /* = self::I|::T */ #this = it;
   return #this;
 }
-static inline-class-member method I|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::I<self::I|_#new#tearOff::T> /* = self::I|_#new#tearOff::T */
+static inline-class-member method I|_#new#tearOff<T extends core::Object = dynamic>(self::I|_#new#tearOff::T it) → self::I<self::I|_#new#tearOff::T> /* = self::I|_#new#tearOff::T */
   return self::I|<self::I|_#new#tearOff::T>(it);
-static inline-class-member method Ja|<T extends core::Object = dynamic>(dynamic it) → self::Ja<self::Ja|::T> /* = self::Ja|::T */ {
+static inline-class-member method Ja|<T extends core::Object = dynamic>(self::I<self::Ja|::T> /* = self::Ja|::T */ it) → self::Ja<self::Ja|::T> /* = self::Ja|::T */ {
   lowered final self::Ja<self::Ja|::T> /* = self::Ja|::T */ #this = it;
   return #this;
 }
-static inline-class-member method Ja|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Ja<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */
+static inline-class-member method Ja|_#new#tearOff<T extends core::Object = dynamic>(self::I<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */ it) → self::Ja<self::Ja|_#new#tearOff::T> /* = self::Ja|_#new#tearOff::T */
   return self::Ja|<self::Ja|_#new#tearOff::T>(it);
-static inline-class-member method Jc|<T extends core::Object = dynamic>(dynamic it) → self::Jc<self::Jc|::T> /* = self::Jc|::T? */ {
+static inline-class-member method Jc|<T extends core::Object = dynamic>(self::I<self::Jc|::T>? /* = self::Jc|::T? */ it) → self::Jc<self::Jc|::T> /* = self::Jc|::T? */ {
   lowered final self::Jc<self::Jc|::T> /* = self::Jc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Jc|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Jc<self::Jc|_#new#tearOff::T> /* = self::Jc|_#new#tearOff::T? */
+static inline-class-member method Jc|_#new#tearOff<T extends core::Object = dynamic>(self::I<self::Jc|_#new#tearOff::T>? /* = self::Jc|_#new#tearOff::T? */ it) → self::Jc<self::Jc|_#new#tearOff::T> /* = self::Jc|_#new#tearOff::T? */
   return self::Jc|<self::Jc|_#new#tearOff::T>(it);
-static inline-class-member method K|<T extends core::Object = dynamic>(dynamic it) → self::K<self::K|::T> /* = self::K|::T? */ {
+static inline-class-member method K|<T extends core::Object = dynamic>(self::K|::T? it) → self::K<self::K|::T> /* = self::K|::T? */ {
   lowered final self::K<self::K|::T> /* = self::K|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method K|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::K<self::K|_#new#tearOff::T> /* = self::K|_#new#tearOff::T? */
+static inline-class-member method K|_#new#tearOff<T extends core::Object = dynamic>(self::K|_#new#tearOff::T? it) → self::K<self::K|_#new#tearOff::T> /* = self::K|_#new#tearOff::T? */
   return self::K|<self::K|_#new#tearOff::T>(it);
-static inline-class-member method La|<T extends core::Object = dynamic>(dynamic it) → self::La<self::La|::T> /* = self::La|::T? */ {
+static inline-class-member method La|<T extends core::Object = dynamic>(self::K<self::La|::T> /* = self::La|::T? */ it) → self::La<self::La|::T> /* = self::La|::T? */ {
   lowered final self::La<self::La|::T> /* = self::La|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method La|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::La<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */
+static inline-class-member method La|_#new#tearOff<T extends core::Object = dynamic>(self::K<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */ it) → self::La<self::La|_#new#tearOff::T> /* = self::La|_#new#tearOff::T? */
   return self::La|<self::La|_#new#tearOff::T>(it);
-static inline-class-member method Lc|<T extends core::Object = dynamic>(dynamic it) → self::Lc<self::Lc|::T> /* = self::Lc|::T? */ {
+static inline-class-member method Lc|<T extends core::Object = dynamic>(self::K<self::Lc|::T>? /* = self::Lc|::T? */ it) → self::Lc<self::Lc|::T> /* = self::Lc|::T? */ {
   lowered final self::Lc<self::Lc|::T> /* = self::Lc|::T? */ #this = it;
   return #this;
 }
-static inline-class-member method Lc|_#new#tearOff<T extends core::Object = dynamic>(dynamic it) → self::Lc<self::Lc|_#new#tearOff::T> /* = self::Lc|_#new#tearOff::T? */
+static inline-class-member method Lc|_#new#tearOff<T extends core::Object = dynamic>(self::K<self::Lc|_#new#tearOff::T>? /* = self::Lc|_#new#tearOff::T? */ it) → self::Lc<self::Lc|_#new#tearOff::T> /* = self::Lc|_#new#tearOff::T? */
   return self::Lc|<self::Lc|_#new#tearOff::T>(it);
 static method testA(Never n) → dynamic {
   self::A /* = core::int */ a1 = let final Never #t1 = n in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
diff --git a/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.strong.expect
index 12b93d7..5c4ee4a 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.strong.expect
@@ -33,33 +33,33 @@
   constructor • = self::E|;
   tearoff • = self::E|_#new#tearOff;
 }
-static inline-class-member method A|<T extends core::Object? = dynamic>(dynamic it) → self::A<self::A|::T%> /* = core::int */ {
+static inline-class-member method A|<T extends core::Object? = dynamic>(core::int it) → self::A<self::A|::T%> /* = core::int */ {
   lowered final self::A<self::A|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::A<self::A|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method A|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::A<self::A|_#new#tearOff::T%> /* = core::int */
   return self::A|<self::A|_#new#tearOff::T%>(it);
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = core::int */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(core::int it) → self::B<self::B|::T%> /* = core::int */ {
   lowered final self::B<self::B|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::B<self::B|_#new#tearOff::T%> /* = core::int */
   return self::B|<self::B|_#new#tearOff::T%>(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = core::int */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(core::int it) → self::C<self::C|::T%> /* = core::int */ {
   lowered final self::C<self::C|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::C<self::C|_#new#tearOff::T%> /* = core::int */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method D|(dynamic it) → self::D /* = core::int */ {
+static inline-class-member method D|(core::int it) → self::D /* = core::int */ {
   lowered final self::D /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|_#new#tearOff(core::int it) → self::D /* = core::int */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int */ {
+static inline-class-member method E|(core::int it) → self::E /* = core::int */ {
   lowered final self::E /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|_#new#tearOff(core::int it) → self::E /* = core::int */
   return self::E|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.strong.transformed.expect
index 12b93d7..5c4ee4a 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.strong.transformed.expect
@@ -33,33 +33,33 @@
   constructor • = self::E|;
   tearoff • = self::E|_#new#tearOff;
 }
-static inline-class-member method A|<T extends core::Object? = dynamic>(dynamic it) → self::A<self::A|::T%> /* = core::int */ {
+static inline-class-member method A|<T extends core::Object? = dynamic>(core::int it) → self::A<self::A|::T%> /* = core::int */ {
   lowered final self::A<self::A|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::A<self::A|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method A|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::A<self::A|_#new#tearOff::T%> /* = core::int */
   return self::A|<self::A|_#new#tearOff::T%>(it);
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = core::int */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(core::int it) → self::B<self::B|::T%> /* = core::int */ {
   lowered final self::B<self::B|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::B<self::B|_#new#tearOff::T%> /* = core::int */
   return self::B|<self::B|_#new#tearOff::T%>(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = core::int */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(core::int it) → self::C<self::C|::T%> /* = core::int */ {
   lowered final self::C<self::C|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::C<self::C|_#new#tearOff::T%> /* = core::int */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method D|(dynamic it) → self::D /* = core::int */ {
+static inline-class-member method D|(core::int it) → self::D /* = core::int */ {
   lowered final self::D /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|_#new#tearOff(core::int it) → self::D /* = core::int */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int */ {
+static inline-class-member method E|(core::int it) → self::E /* = core::int */ {
   lowered final self::E /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|_#new#tearOff(core::int it) → self::E /* = core::int */
   return self::E|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.expect
index 12b93d7..5c4ee4a 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.expect
@@ -33,33 +33,33 @@
   constructor • = self::E|;
   tearoff • = self::E|_#new#tearOff;
 }
-static inline-class-member method A|<T extends core::Object? = dynamic>(dynamic it) → self::A<self::A|::T%> /* = core::int */ {
+static inline-class-member method A|<T extends core::Object? = dynamic>(core::int it) → self::A<self::A|::T%> /* = core::int */ {
   lowered final self::A<self::A|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::A<self::A|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method A|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::A<self::A|_#new#tearOff::T%> /* = core::int */
   return self::A|<self::A|_#new#tearOff::T%>(it);
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = core::int */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(core::int it) → self::B<self::B|::T%> /* = core::int */ {
   lowered final self::B<self::B|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::B<self::B|_#new#tearOff::T%> /* = core::int */
   return self::B|<self::B|_#new#tearOff::T%>(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = core::int */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(core::int it) → self::C<self::C|::T%> /* = core::int */ {
   lowered final self::C<self::C|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::C<self::C|_#new#tearOff::T%> /* = core::int */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method D|(dynamic it) → self::D /* = core::int */ {
+static inline-class-member method D|(core::int it) → self::D /* = core::int */ {
   lowered final self::D /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|_#new#tearOff(core::int it) → self::D /* = core::int */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int */ {
+static inline-class-member method E|(core::int it) → self::E /* = core::int */ {
   lowered final self::E /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|_#new#tearOff(core::int it) → self::E /* = core::int */
   return self::E|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.modular.expect
index 12b93d7..5c4ee4a 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.modular.expect
@@ -33,33 +33,33 @@
   constructor • = self::E|;
   tearoff • = self::E|_#new#tearOff;
 }
-static inline-class-member method A|<T extends core::Object? = dynamic>(dynamic it) → self::A<self::A|::T%> /* = core::int */ {
+static inline-class-member method A|<T extends core::Object? = dynamic>(core::int it) → self::A<self::A|::T%> /* = core::int */ {
   lowered final self::A<self::A|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::A<self::A|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method A|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::A<self::A|_#new#tearOff::T%> /* = core::int */
   return self::A|<self::A|_#new#tearOff::T%>(it);
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = core::int */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(core::int it) → self::B<self::B|::T%> /* = core::int */ {
   lowered final self::B<self::B|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::B<self::B|_#new#tearOff::T%> /* = core::int */
   return self::B|<self::B|_#new#tearOff::T%>(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = core::int */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(core::int it) → self::C<self::C|::T%> /* = core::int */ {
   lowered final self::C<self::C|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::C<self::C|_#new#tearOff::T%> /* = core::int */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method D|(dynamic it) → self::D /* = core::int */ {
+static inline-class-member method D|(core::int it) → self::D /* = core::int */ {
   lowered final self::D /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|_#new#tearOff(core::int it) → self::D /* = core::int */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int */ {
+static inline-class-member method E|(core::int it) → self::E /* = core::int */ {
   lowered final self::E /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|_#new#tearOff(core::int it) → self::E /* = core::int */
   return self::E|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.outline.expect
index 2f4656b..27cbd4f 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.outline.expect
@@ -33,23 +33,23 @@
   constructor • = self::E|;
   tearoff • = self::E|_#new#tearOff;
 }
-static inline-class-member method A|<T extends core::Object? = dynamic>(dynamic it) → self::A<self::A|::T%> /* = core::int */
+static inline-class-member method A|<T extends core::Object? = dynamic>(core::int it) → self::A<self::A|::T%> /* = core::int */
   ;
-static inline-class-member method A|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::A<self::A|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method A|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::A<self::A|_#new#tearOff::T%> /* = core::int */
   return self::A|<self::A|_#new#tearOff::T%>(it);
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = core::int */
+static inline-class-member method B|<T extends core::Object? = dynamic>(core::int it) → self::B<self::B|::T%> /* = core::int */
   ;
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::B<self::B|_#new#tearOff::T%> /* = core::int */
   return self::B|<self::B|_#new#tearOff::T%>(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = core::int */
+static inline-class-member method C|<T extends core::Object? = dynamic>(core::int it) → self::C<self::C|::T%> /* = core::int */
   ;
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::C<self::C|_#new#tearOff::T%> /* = core::int */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method D|(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|(core::int it) → self::D /* = core::int */
   ;
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|_#new#tearOff(core::int it) → self::D /* = core::int */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|(core::int it) → self::E /* = core::int */
   ;
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|_#new#tearOff(core::int it) → self::E /* = core::int */
   return self::E|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.transformed.expect
index 12b93d7..5c4ee4a 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/super_extension_type_conflict.dart.weak.transformed.expect
@@ -33,33 +33,33 @@
   constructor • = self::E|;
   tearoff • = self::E|_#new#tearOff;
 }
-static inline-class-member method A|<T extends core::Object? = dynamic>(dynamic it) → self::A<self::A|::T%> /* = core::int */ {
+static inline-class-member method A|<T extends core::Object? = dynamic>(core::int it) → self::A<self::A|::T%> /* = core::int */ {
   lowered final self::A<self::A|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method A|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::A<self::A|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method A|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::A<self::A|_#new#tearOff::T%> /* = core::int */
   return self::A|<self::A|_#new#tearOff::T%>(it);
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = core::int */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(core::int it) → self::B<self::B|::T%> /* = core::int */ {
   lowered final self::B<self::B|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::B<self::B|_#new#tearOff::T%> /* = core::int */
   return self::B|<self::B|_#new#tearOff::T%>(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = core::int */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(core::int it) → self::C<self::C|::T%> /* = core::int */ {
   lowered final self::C<self::C|::T%> /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = core::int */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(core::int it) → self::C<self::C|_#new#tearOff::T%> /* = core::int */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method D|(dynamic it) → self::D /* = core::int */ {
+static inline-class-member method D|(core::int it) → self::D /* = core::int */ {
   lowered final self::D /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = core::int */
+static inline-class-member method D|_#new#tearOff(core::int it) → self::D /* = core::int */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = core::int */ {
+static inline-class-member method E|(core::int it) → self::E /* = core::int */ {
   lowered final self::E /* = core::int */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = core::int */
+static inline-class-member method E|_#new#tearOff(core::int it) → self::E /* = core::int */
   return self::E|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.strong.expect
index aab7d02..74d138e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.strong.expect
@@ -34,27 +34,27 @@
   constructor • = self::E|;
   tearoff • = self::E|_#new#tearOff;
 }
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = self::A<self::B|::T%> */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(self::A<self::B|::T%> it) → self::B<self::B|::T%> /* = self::A<self::B|::T%> */ {
   lowered final self::B<self::B|::T%> /* = self::A<self::B|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = self::A<self::B|_#new#tearOff::T%> */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::B|_#new#tearOff::T%> it) → self::B<self::B|_#new#tearOff::T%> /* = self::A<self::B|_#new#tearOff::T%> */
   return self::B|<self::B|_#new#tearOff::T%>(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = self::A<self::C|::T%> */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(self::A<self::C|::T%> it) → self::C<self::C|::T%> /* = self::A<self::C|::T%> */ {
   lowered final self::C<self::C|::T%> /* = self::A<self::C|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = self::A<self::C|_#new#tearOff::T%> */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::C|_#new#tearOff::T%> it) → self::C<self::C|_#new#tearOff::T%> /* = self::A<self::C|_#new#tearOff::T%> */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method D|(dynamic it) → self::D /* = self::A<Never> */ {
+static inline-class-member method D|(self::A<Never> it) → self::D /* = self::A<Never> */ {
   lowered final self::D /* = self::A<Never> */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = self::A<Never> */
+static inline-class-member method D|_#new#tearOff(self::A<Never> it) → self::D /* = self::A<Never> */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = self::A<Never> */ {
+static inline-class-member method E|(self::A<Never> it) → self::E /* = self::A<Never> */ {
   lowered final self::E /* = self::A<Never> */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::A<Never> */
+static inline-class-member method E|_#new#tearOff(self::A<Never> it) → self::E /* = self::A<Never> */
   return self::E|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.strong.transformed.expect
index aab7d02..74d138e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.strong.transformed.expect
@@ -34,27 +34,27 @@
   constructor • = self::E|;
   tearoff • = self::E|_#new#tearOff;
 }
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = self::A<self::B|::T%> */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(self::A<self::B|::T%> it) → self::B<self::B|::T%> /* = self::A<self::B|::T%> */ {
   lowered final self::B<self::B|::T%> /* = self::A<self::B|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = self::A<self::B|_#new#tearOff::T%> */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::B|_#new#tearOff::T%> it) → self::B<self::B|_#new#tearOff::T%> /* = self::A<self::B|_#new#tearOff::T%> */
   return self::B|<self::B|_#new#tearOff::T%>(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = self::A<self::C|::T%> */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(self::A<self::C|::T%> it) → self::C<self::C|::T%> /* = self::A<self::C|::T%> */ {
   lowered final self::C<self::C|::T%> /* = self::A<self::C|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = self::A<self::C|_#new#tearOff::T%> */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::C|_#new#tearOff::T%> it) → self::C<self::C|_#new#tearOff::T%> /* = self::A<self::C|_#new#tearOff::T%> */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method D|(dynamic it) → self::D /* = self::A<Never> */ {
+static inline-class-member method D|(self::A<Never> it) → self::D /* = self::A<Never> */ {
   lowered final self::D /* = self::A<Never> */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = self::A<Never> */
+static inline-class-member method D|_#new#tearOff(self::A<Never> it) → self::D /* = self::A<Never> */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = self::A<Never> */ {
+static inline-class-member method E|(self::A<Never> it) → self::E /* = self::A<Never> */ {
   lowered final self::E /* = self::A<Never> */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::A<Never> */
+static inline-class-member method E|_#new#tearOff(self::A<Never> it) → self::E /* = self::A<Never> */
   return self::E|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.expect
index aab7d02..74d138e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.expect
@@ -34,27 +34,27 @@
   constructor • = self::E|;
   tearoff • = self::E|_#new#tearOff;
 }
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = self::A<self::B|::T%> */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(self::A<self::B|::T%> it) → self::B<self::B|::T%> /* = self::A<self::B|::T%> */ {
   lowered final self::B<self::B|::T%> /* = self::A<self::B|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = self::A<self::B|_#new#tearOff::T%> */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::B|_#new#tearOff::T%> it) → self::B<self::B|_#new#tearOff::T%> /* = self::A<self::B|_#new#tearOff::T%> */
   return self::B|<self::B|_#new#tearOff::T%>(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = self::A<self::C|::T%> */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(self::A<self::C|::T%> it) → self::C<self::C|::T%> /* = self::A<self::C|::T%> */ {
   lowered final self::C<self::C|::T%> /* = self::A<self::C|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = self::A<self::C|_#new#tearOff::T%> */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::C|_#new#tearOff::T%> it) → self::C<self::C|_#new#tearOff::T%> /* = self::A<self::C|_#new#tearOff::T%> */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method D|(dynamic it) → self::D /* = self::A<Never> */ {
+static inline-class-member method D|(self::A<Never> it) → self::D /* = self::A<Never> */ {
   lowered final self::D /* = self::A<Never> */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = self::A<Never> */
+static inline-class-member method D|_#new#tearOff(self::A<Never> it) → self::D /* = self::A<Never> */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = self::A<Never> */ {
+static inline-class-member method E|(self::A<Never> it) → self::E /* = self::A<Never> */ {
   lowered final self::E /* = self::A<Never> */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::A<Never> */
+static inline-class-member method E|_#new#tearOff(self::A<Never> it) → self::E /* = self::A<Never> */
   return self::E|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.modular.expect
index aab7d02..74d138e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.modular.expect
@@ -34,27 +34,27 @@
   constructor • = self::E|;
   tearoff • = self::E|_#new#tearOff;
 }
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = self::A<self::B|::T%> */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(self::A<self::B|::T%> it) → self::B<self::B|::T%> /* = self::A<self::B|::T%> */ {
   lowered final self::B<self::B|::T%> /* = self::A<self::B|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = self::A<self::B|_#new#tearOff::T%> */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::B|_#new#tearOff::T%> it) → self::B<self::B|_#new#tearOff::T%> /* = self::A<self::B|_#new#tearOff::T%> */
   return self::B|<self::B|_#new#tearOff::T%>(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = self::A<self::C|::T%> */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(self::A<self::C|::T%> it) → self::C<self::C|::T%> /* = self::A<self::C|::T%> */ {
   lowered final self::C<self::C|::T%> /* = self::A<self::C|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = self::A<self::C|_#new#tearOff::T%> */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::C|_#new#tearOff::T%> it) → self::C<self::C|_#new#tearOff::T%> /* = self::A<self::C|_#new#tearOff::T%> */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method D|(dynamic it) → self::D /* = self::A<Never> */ {
+static inline-class-member method D|(self::A<Never> it) → self::D /* = self::A<Never> */ {
   lowered final self::D /* = self::A<Never> */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = self::A<Never> */
+static inline-class-member method D|_#new#tearOff(self::A<Never> it) → self::D /* = self::A<Never> */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = self::A<Never> */ {
+static inline-class-member method E|(self::A<Never> it) → self::E /* = self::A<Never> */ {
   lowered final self::E /* = self::A<Never> */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::A<Never> */
+static inline-class-member method E|_#new#tearOff(self::A<Never> it) → self::E /* = self::A<Never> */
   return self::E|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.outline.expect
index 01b337d..dc05936 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.outline.expect
@@ -33,19 +33,19 @@
   constructor • = self::E|;
   tearoff • = self::E|_#new#tearOff;
 }
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = self::A<self::B|::T%> */
+static inline-class-member method B|<T extends core::Object? = dynamic>(self::A<self::B|::T%> it) → self::B<self::B|::T%> /* = self::A<self::B|::T%> */
   ;
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = self::A<self::B|_#new#tearOff::T%> */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::B|_#new#tearOff::T%> it) → self::B<self::B|_#new#tearOff::T%> /* = self::A<self::B|_#new#tearOff::T%> */
   return self::B|<self::B|_#new#tearOff::T%>(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = self::A<self::C|::T%> */
+static inline-class-member method C|<T extends core::Object? = dynamic>(self::A<self::C|::T%> it) → self::C<self::C|::T%> /* = self::A<self::C|::T%> */
   ;
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = self::A<self::C|_#new#tearOff::T%> */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::C|_#new#tearOff::T%> it) → self::C<self::C|_#new#tearOff::T%> /* = self::A<self::C|_#new#tearOff::T%> */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method D|(dynamic it) → self::D /* = self::A<Never> */
+static inline-class-member method D|(self::A<Never> it) → self::D /* = self::A<Never> */
   ;
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = self::A<Never> */
+static inline-class-member method D|_#new#tearOff(self::A<Never> it) → self::D /* = self::A<Never> */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = self::A<Never> */
+static inline-class-member method E|(self::A<Never> it) → self::E /* = self::A<Never> */
   ;
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::A<Never> */
+static inline-class-member method E|_#new#tearOff(self::A<Never> it) → self::E /* = self::A<Never> */
   return self::E|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.transformed.expect
index aab7d02..74d138e 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/supertype_conflict.dart.weak.transformed.expect
@@ -34,27 +34,27 @@
   constructor • = self::E|;
   tearoff • = self::E|_#new#tearOff;
 }
-static inline-class-member method B|<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|::T%> /* = self::A<self::B|::T%> */ {
+static inline-class-member method B|<T extends core::Object? = dynamic>(self::A<self::B|::T%> it) → self::B<self::B|::T%> /* = self::A<self::B|::T%> */ {
   lowered final self::B<self::B|::T%> /* = self::A<self::B|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::B<self::B|_#new#tearOff::T%> /* = self::A<self::B|_#new#tearOff::T%> */
+static inline-class-member method B|_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::B|_#new#tearOff::T%> it) → self::B<self::B|_#new#tearOff::T%> /* = self::A<self::B|_#new#tearOff::T%> */
   return self::B|<self::B|_#new#tearOff::T%>(it);
-static inline-class-member method C|<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|::T%> /* = self::A<self::C|::T%> */ {
+static inline-class-member method C|<T extends core::Object? = dynamic>(self::A<self::C|::T%> it) → self::C<self::C|::T%> /* = self::A<self::C|::T%> */ {
   lowered final self::C<self::C|::T%> /* = self::A<self::C|::T%> */ #this = it;
   return #this;
 }
-static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(dynamic it) → self::C<self::C|_#new#tearOff::T%> /* = self::A<self::C|_#new#tearOff::T%> */
+static inline-class-member method C|_#new#tearOff<T extends core::Object? = dynamic>(self::A<self::C|_#new#tearOff::T%> it) → self::C<self::C|_#new#tearOff::T%> /* = self::A<self::C|_#new#tearOff::T%> */
   return self::C|<self::C|_#new#tearOff::T%>(it);
-static inline-class-member method D|(dynamic it) → self::D /* = self::A<Never> */ {
+static inline-class-member method D|(self::A<Never> it) → self::D /* = self::A<Never> */ {
   lowered final self::D /* = self::A<Never> */ #this = it;
   return #this;
 }
-static inline-class-member method D|_#new#tearOff(dynamic it) → self::D /* = self::A<Never> */
+static inline-class-member method D|_#new#tearOff(self::A<Never> it) → self::D /* = self::A<Never> */
   return self::D|(it);
-static inline-class-member method E|(dynamic it) → self::E /* = self::A<Never> */ {
+static inline-class-member method E|(self::A<Never> it) → self::E /* = self::A<Never> */ {
   lowered final self::E /* = self::A<Never> */ #this = it;
   return #this;
 }
-static inline-class-member method E|_#new#tearOff(dynamic it) → self::E /* = self::A<Never> */
+static inline-class-member method E|_#new#tearOff(self::A<Never> it) → self::E /* = self::A<Never> */
   return self::E|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.strong.expect b/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.strong.expect
index 55bc3e3..c43c7f3 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.strong.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.strong.expect
@@ -16,9 +16,9 @@
   constructor • = self::Extension|;
   tearoff • = self::Extension|_#new#tearOff;
 }
-static inline-class-member method Extension|(dynamic it) → self::Extension /* = invalid-type */ {
+static inline-class-member method Extension|(invalid-type it) → self::Extension /* = invalid-type */ {
   lowered final self::Extension /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method Extension|_#new#tearOff(dynamic it) → self::Extension /* = invalid-type */
+static inline-class-member method Extension|_#new#tearOff(invalid-type it) → self::Extension /* = invalid-type */
   return self::Extension|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.strong.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.strong.transformed.expect
index 55bc3e3..c43c7f3 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.strong.transformed.expect
@@ -16,9 +16,9 @@
   constructor • = self::Extension|;
   tearoff • = self::Extension|_#new#tearOff;
 }
-static inline-class-member method Extension|(dynamic it) → self::Extension /* = invalid-type */ {
+static inline-class-member method Extension|(invalid-type it) → self::Extension /* = invalid-type */ {
   lowered final self::Extension /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method Extension|_#new#tearOff(dynamic it) → self::Extension /* = invalid-type */
+static inline-class-member method Extension|_#new#tearOff(invalid-type it) → self::Extension /* = invalid-type */
   return self::Extension|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.expect b/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.expect
index 55bc3e3..c43c7f3 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.expect
@@ -16,9 +16,9 @@
   constructor • = self::Extension|;
   tearoff • = self::Extension|_#new#tearOff;
 }
-static inline-class-member method Extension|(dynamic it) → self::Extension /* = invalid-type */ {
+static inline-class-member method Extension|(invalid-type it) → self::Extension /* = invalid-type */ {
   lowered final self::Extension /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method Extension|_#new#tearOff(dynamic it) → self::Extension /* = invalid-type */
+static inline-class-member method Extension|_#new#tearOff(invalid-type it) → self::Extension /* = invalid-type */
   return self::Extension|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.modular.expect b/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.modular.expect
index 55bc3e3..c43c7f3 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.modular.expect
@@ -16,9 +16,9 @@
   constructor • = self::Extension|;
   tearoff • = self::Extension|_#new#tearOff;
 }
-static inline-class-member method Extension|(dynamic it) → self::Extension /* = invalid-type */ {
+static inline-class-member method Extension|(invalid-type it) → self::Extension /* = invalid-type */ {
   lowered final self::Extension /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method Extension|_#new#tearOff(dynamic it) → self::Extension /* = invalid-type */
+static inline-class-member method Extension|_#new#tearOff(invalid-type it) → self::Extension /* = invalid-type */
   return self::Extension|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.outline.expect b/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.outline.expect
index 510f4e4..3f287a8 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.outline.expect
@@ -12,7 +12,7 @@
   constructor • = self::Extension|;
   tearoff • = self::Extension|_#new#tearOff;
 }
-static inline-class-member method Extension|(dynamic it) → self::Extension /* = invalid-type */
+static inline-class-member method Extension|(invalid-type it) → self::Extension /* = invalid-type */
   ;
-static inline-class-member method Extension|_#new#tearOff(dynamic it) → self::Extension /* = invalid-type */
+static inline-class-member method Extension|_#new#tearOff(invalid-type it) → self::Extension /* = invalid-type */
   return self::Extension|(it);
diff --git a/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.transformed.expect b/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.transformed.expect
index 55bc3e3..c43c7f3 100644
--- a/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inline_class/extension_types/unresolved_type_extension_type_this.dart.weak.transformed.expect
@@ -16,9 +16,9 @@
   constructor • = self::Extension|;
   tearoff • = self::Extension|_#new#tearOff;
 }
-static inline-class-member method Extension|(dynamic it) → self::Extension /* = invalid-type */ {
+static inline-class-member method Extension|(invalid-type it) → self::Extension /* = invalid-type */ {
   lowered final self::Extension /* = invalid-type */ #this = it;
   return #this;
 }
-static inline-class-member method Extension|_#new#tearOff(dynamic it) → self::Extension /* = invalid-type */
+static inline-class-member method Extension|_#new#tearOff(invalid-type it) → self::Extension /* = invalid-type */
   return self::Extension|(it);
