[cfe] Address more cases of declaredNullability being overridden

This is a follow-up to https://dart-review.googlesource.com/c/sdk/+/350323

This CL addresses more of the cases where the `declaredNullability` of a type
object is overridden by the overall `nullability`, introducing unexpected
values to the field.

TEST=existing

Change-Id: I4830cd8113604dcc38a01ff09a9c1b2f50e091ef
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/351141
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
diff --git a/pkg/front_end/testcases/dart2js/extension_types/external.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/extension_types/external.dart.strong.transformed.expect
index 6439e61..f86f8b4 100644
--- a/pkg/front_end/testcases/dart2js/extension_types/external.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/extension_types/external.dart.strong.transformed.expect
@@ -84,14 +84,14 @@
   a = js_2::getProperty<self::A>(b1, "field");
   js_2::setProperty<self::A>(b1, "field", a);
   a = js_2::_callMethodUnchecked0<self::A>(b1, "method");
-  b2 = js_2::_callMethodUnchecked1<self::B% /* = self::A */>(b2, "genericMethod", b2);
+  b2 = js_2::_callMethodUnchecked1<self::B /* = self::A */>(b2, "genericMethod", b2);
   b1 = js_2::getProperty<self::B /* = self::A */>(b2, "getter");
   js_2::setProperty<self::B /* = self::A */>(b1, "setter", b2);
   js_2::setProperty<self::B /* = self::A */>(b1, "property", js_2::getProperty<self::B /* = self::A */>(b2, "property"));
   a = js_2::getProperty<self::A>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticField");
   js_2::setProperty<self::A>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticField", a);
   a = js_2::_callMethodUnchecked0<self::A>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticMethod");
-  b2 = js_2::_callMethodUnchecked1<self::B% /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticGenericMethod", b2);
+  b2 = js_2::_callMethodUnchecked1<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticGenericMethod", b2);
   b1 = js_2::getProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticGetter");
   js_2::setProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticSetter", b2);
   js_2::setProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticProperty", js_2::getProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticProperty"));
diff --git a/pkg/front_end/testcases/dart2js/extension_types/external.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/extension_types/external.dart.weak.transformed.expect
index 6439e61..f86f8b4 100644
--- a/pkg/front_end/testcases/dart2js/extension_types/external.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/extension_types/external.dart.weak.transformed.expect
@@ -84,14 +84,14 @@
   a = js_2::getProperty<self::A>(b1, "field");
   js_2::setProperty<self::A>(b1, "field", a);
   a = js_2::_callMethodUnchecked0<self::A>(b1, "method");
-  b2 = js_2::_callMethodUnchecked1<self::B% /* = self::A */>(b2, "genericMethod", b2);
+  b2 = js_2::_callMethodUnchecked1<self::B /* = self::A */>(b2, "genericMethod", b2);
   b1 = js_2::getProperty<self::B /* = self::A */>(b2, "getter");
   js_2::setProperty<self::B /* = self::A */>(b1, "setter", b2);
   js_2::setProperty<self::B /* = self::A */>(b1, "property", js_2::getProperty<self::B /* = self::A */>(b2, "property"));
   a = js_2::getProperty<self::A>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticField");
   js_2::setProperty<self::A>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticField", a);
   a = js_2::_callMethodUnchecked0<self::A>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticMethod");
-  b2 = js_2::_callMethodUnchecked1<self::B% /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticGenericMethod", b2);
+  b2 = js_2::_callMethodUnchecked1<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticGenericMethod", b2);
   b1 = js_2::getProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticGetter");
   js_2::setProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticSetter", b2);
   js_2::setProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticProperty", js_2::getProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticProperty"));
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.expect
index b32f91c..e9ebfcf 100644
--- a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.expect
@@ -24,8 +24,8 @@
   static method _#name2#tearOff(self::D arg1, Null arg2) → self::C
     return new self::C1::name1(arg1, arg2);
   abstract operator +(core::double other) → core::double;
-  abstract get g() → FutureOr<FutureOr<void>>?;
-  abstract set g(FutureOr<FutureOr<void>>? value) → void;
+  abstract get g() → FutureOr<FutureOr<void>>;
+  abstract set g(FutureOr<FutureOr<void>>value) → void;
   abstract method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C2]) → core::Map<self::C, self::C>;
   abstract method m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C2}) → void;
 }
@@ -45,9 +45,9 @@
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::List<dynamic>;
   no-such-method-forwarder set v6(core::List<dynamic> value) → void
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6=", <dynamic>[], <dynamic>[value], #C3, 2)){(core::Invocation) → dynamic};
-  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>?
-    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} FutureOr<FutureOr<void>>?;
-  no-such-method-forwarder set g(FutureOr<FutureOr<void>>? value) → void
+  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} FutureOr<FutureOr<void>>;
+  no-such-method-forwarder set g(FutureOr<FutureOr<void>>value) → void
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g=", <dynamic>[], <dynamic>[value], #C3, 2)){(core::Invocation) → dynamic};
   no-such-method-forwarder get v7() → Null
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} Null;
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.transformed.expect
index b32f91c..e9ebfcf 100644
--- a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.strong.transformed.expect
@@ -24,8 +24,8 @@
   static method _#name2#tearOff(self::D arg1, Null arg2) → self::C
     return new self::C1::name1(arg1, arg2);
   abstract operator +(core::double other) → core::double;
-  abstract get g() → FutureOr<FutureOr<void>>?;
-  abstract set g(FutureOr<FutureOr<void>>? value) → void;
+  abstract get g() → FutureOr<FutureOr<void>>;
+  abstract set g(FutureOr<FutureOr<void>>value) → void;
   abstract method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C2]) → core::Map<self::C, self::C>;
   abstract method m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C2}) → void;
 }
@@ -45,9 +45,9 @@
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::List<dynamic>;
   no-such-method-forwarder set v6(core::List<dynamic> value) → void
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6=", <dynamic>[], <dynamic>[value], #C3, 2)){(core::Invocation) → dynamic};
-  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>?
-    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} FutureOr<FutureOr<void>>?;
-  no-such-method-forwarder set g(FutureOr<FutureOr<void>>? value) → void
+  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} FutureOr<FutureOr<void>>;
+  no-such-method-forwarder set g(FutureOr<FutureOr<void>>value) → void
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g=", <dynamic>[], <dynamic>[value], #C3, 2)){(core::Invocation) → dynamic};
   no-such-method-forwarder get v7() → Null
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} Null;
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.expect
index 49cc1f2..94f0fd6 100644
--- a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.expect
@@ -24,8 +24,8 @@
   static method _#name2#tearOff(self::D arg1, Null arg2) → self::C
     return new self::C1::name1(arg1, arg2);
   abstract operator +(core::double other) → core::double;
-  abstract get g() → FutureOr<FutureOr<void>>?;
-  abstract set g(FutureOr<FutureOr<void>>? value) → void;
+  abstract get g() → FutureOr<FutureOr<void>>;
+  abstract set g(FutureOr<FutureOr<void>>value) → void;
   abstract method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C2]) → core::Map<self::C, self::C>;
   abstract method m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C2}) → void;
 }
@@ -45,9 +45,9 @@
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::List<dynamic>;
   no-such-method-forwarder set v6(core::List<dynamic> value) → void
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6=", <dynamic>[], <dynamic>[value], #C3, 2)){(core::Invocation) → dynamic};
-  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>?
-    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} FutureOr<FutureOr<void>>?;
-  no-such-method-forwarder set g(FutureOr<FutureOr<void>>? value) → void
+  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} FutureOr<FutureOr<void>>;
+  no-such-method-forwarder set g(FutureOr<FutureOr<void>>value) → void
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g=", <dynamic>[], <dynamic>[value], #C3, 2)){(core::Invocation) → dynamic};
   no-such-method-forwarder get v7() → Null
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} Null;
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.modular.expect
index 49cc1f2..94f0fd6 100644
--- a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.modular.expect
@@ -24,8 +24,8 @@
   static method _#name2#tearOff(self::D arg1, Null arg2) → self::C
     return new self::C1::name1(arg1, arg2);
   abstract operator +(core::double other) → core::double;
-  abstract get g() → FutureOr<FutureOr<void>>?;
-  abstract set g(FutureOr<FutureOr<void>>? value) → void;
+  abstract get g() → FutureOr<FutureOr<void>>;
+  abstract set g(FutureOr<FutureOr<void>>value) → void;
   abstract method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C2]) → core::Map<self::C, self::C>;
   abstract method m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C2}) → void;
 }
@@ -45,9 +45,9 @@
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::List<dynamic>;
   no-such-method-forwarder set v6(core::List<dynamic> value) → void
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6=", <dynamic>[], <dynamic>[value], #C3, 2)){(core::Invocation) → dynamic};
-  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>?
-    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} FutureOr<FutureOr<void>>?;
-  no-such-method-forwarder set g(FutureOr<FutureOr<void>>? value) → void
+  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} FutureOr<FutureOr<void>>;
+  no-such-method-forwarder set g(FutureOr<FutureOr<void>>value) → void
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g=", <dynamic>[], <dynamic>[value], #C3, 2)){(core::Invocation) → dynamic};
   no-such-method-forwarder get v7() → Null
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} Null;
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.outline.expect
index 4215631..a776e1d 100644
--- a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.outline.expect
@@ -22,8 +22,8 @@
   static method _#name2#tearOff(self::D arg1, Null arg2) → self::C
     return new self::C1::name1(arg1, arg2);
   abstract operator +(core::double other) → core::double;
-  abstract get g() → FutureOr<FutureOr<void>>?;
-  abstract set g(FutureOr<FutureOr<void>>? value) → void;
+  abstract get g() → FutureOr<FutureOr<void>>;
+  abstract set g(FutureOr<FutureOr<void>>value) → void;
   abstract method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = null]) → core::Map<self::C, self::C>;
   abstract method m2({dynamic arg1 = null, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = null}) → void;
 }
@@ -42,9 +42,9 @@
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6", <dynamic>[], <dynamic>[], const <core::String, dynamic>{}, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::List<dynamic>;
   no-such-method-forwarder set v6(core::List<dynamic> value) → void
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6=", <dynamic>[], <dynamic>[value], const <core::String, dynamic>{}, 2)){(core::Invocation) → dynamic};
-  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>?
-    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], const <core::String, dynamic>{}, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} FutureOr<FutureOr<void>>?;
-  no-such-method-forwarder set g(FutureOr<FutureOr<void>>? value) → void
+  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], const <core::String, dynamic>{}, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} FutureOr<FutureOr<void>>;
+  no-such-method-forwarder set g(FutureOr<FutureOr<void>>value) → void
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g=", <dynamic>[], <dynamic>[value], const <core::String, dynamic>{}, 2)){(core::Invocation) → dynamic};
   no-such-method-forwarder get v7() → Null
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], const <core::String, dynamic>{}, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} Null;
diff --git a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.transformed.expect
index 49cc1f2..94f0fd6 100644
--- a/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/generic_usage_type_variable.dart.weak.transformed.expect
@@ -24,8 +24,8 @@
   static method _#name2#tearOff(self::D arg1, Null arg2) → self::C
     return new self::C1::name1(arg1, arg2);
   abstract operator +(core::double other) → core::double;
-  abstract get g() → FutureOr<FutureOr<void>>?;
-  abstract set g(FutureOr<FutureOr<void>>? value) → void;
+  abstract get g() → FutureOr<FutureOr<void>>;
+  abstract set g(FutureOr<FutureOr<void>>value) → void;
   abstract method m1(covariant-by-declaration self::C arg1, [core::Set<core::Set<self::C>> arg2 = #C2]) → core::Map<self::C, self::C>;
   abstract method m2({dynamic arg1 = #C2, ((dynamic) → dynamic, dynamic) → core::Map<dynamic, dynamic> arg2 = #C2}) → void;
 }
@@ -45,9 +45,9 @@
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} core::List<dynamic>;
   no-such-method-forwarder set v6(core::List<dynamic> value) → void
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v6=", <dynamic>[], <dynamic>[value], #C3, 2)){(core::Invocation) → dynamic};
-  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>?
-    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} FutureOr<FutureOr<void>>?;
-  no-such-method-forwarder set g(FutureOr<FutureOr<void>>? value) → void
+  no-such-method-forwarder get g() → FutureOr<FutureOr<void>>
+    return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} FutureOr<FutureOr<void>>;
+  no-such-method-forwarder set g(FutureOr<FutureOr<void>>value) → void
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("g=", <dynamic>[], <dynamic>[value], #C3, 2)){(core::Invocation) → dynamic};
   no-such-method-forwarder get v7() → Null
     return this.{self::C1::noSuchMethod}(core::_createInvocationMirror("v7", <dynamic>[], <dynamic>[], #C3, 1)){(core::Invocation) → dynamic} as{TypeError,ForDynamic} Null;
diff --git a/pkg/front_end/testcases/dartdevc/extension_types/external.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/extension_types/external.dart.strong.transformed.expect
index 6439e61..f86f8b4 100644
--- a/pkg/front_end/testcases/dartdevc/extension_types/external.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/extension_types/external.dart.strong.transformed.expect
@@ -84,14 +84,14 @@
   a = js_2::getProperty<self::A>(b1, "field");
   js_2::setProperty<self::A>(b1, "field", a);
   a = js_2::_callMethodUnchecked0<self::A>(b1, "method");
-  b2 = js_2::_callMethodUnchecked1<self::B% /* = self::A */>(b2, "genericMethod", b2);
+  b2 = js_2::_callMethodUnchecked1<self::B /* = self::A */>(b2, "genericMethod", b2);
   b1 = js_2::getProperty<self::B /* = self::A */>(b2, "getter");
   js_2::setProperty<self::B /* = self::A */>(b1, "setter", b2);
   js_2::setProperty<self::B /* = self::A */>(b1, "property", js_2::getProperty<self::B /* = self::A */>(b2, "property"));
   a = js_2::getProperty<self::A>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticField");
   js_2::setProperty<self::A>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticField", a);
   a = js_2::_callMethodUnchecked0<self::A>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticMethod");
-  b2 = js_2::_callMethodUnchecked1<self::B% /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticGenericMethod", b2);
+  b2 = js_2::_callMethodUnchecked1<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticGenericMethod", b2);
   b1 = js_2::getProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticGetter");
   js_2::setProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticSetter", b2);
   js_2::setProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticProperty", js_2::getProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticProperty"));
diff --git a/pkg/front_end/testcases/dartdevc/extension_types/external.dart.weak.transformed.expect b/pkg/front_end/testcases/dartdevc/extension_types/external.dart.weak.transformed.expect
index 6439e61..f86f8b4 100644
--- a/pkg/front_end/testcases/dartdevc/extension_types/external.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/extension_types/external.dart.weak.transformed.expect
@@ -84,14 +84,14 @@
   a = js_2::getProperty<self::A>(b1, "field");
   js_2::setProperty<self::A>(b1, "field", a);
   a = js_2::_callMethodUnchecked0<self::A>(b1, "method");
-  b2 = js_2::_callMethodUnchecked1<self::B% /* = self::A */>(b2, "genericMethod", b2);
+  b2 = js_2::_callMethodUnchecked1<self::B /* = self::A */>(b2, "genericMethod", b2);
   b1 = js_2::getProperty<self::B /* = self::A */>(b2, "getter");
   js_2::setProperty<self::B /* = self::A */>(b1, "setter", b2);
   js_2::setProperty<self::B /* = self::A */>(b1, "property", js_2::getProperty<self::B /* = self::A */>(b2, "property"));
   a = js_2::getProperty<self::A>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticField");
   js_2::setProperty<self::A>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticField", a);
   a = js_2::_callMethodUnchecked0<self::A>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticMethod");
-  b2 = js_2::_callMethodUnchecked1<self::B% /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticGenericMethod", b2);
+  b2 = js_2::_callMethodUnchecked1<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticGenericMethod", b2);
   b1 = js_2::getProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticGetter");
   js_2::setProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticSetter", b2);
   js_2::setProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticProperty", js_2::getProperty<self::B /* = self::A */>(js_2::_getPropertyTrustType<core::Object>(_js2::staticInteropGlobalContext, "B"), "staticProperty"));
diff --git a/pkg/front_end/testcases/expression/extension_type_03.expression.yaml.expect b/pkg/front_end/testcases/expression/extension_type_03.expression.yaml.expect
index 031f78068..8a4c992 100644
--- a/pkg/front_end/testcases/expression/extension_type_03.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/extension_type_03.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
 static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(#lib1::Foo /* = dart.core::int */ f, dart.core::List<#lib1::Foo /* = dart.core::int */> foos) → dynamic
-  return foos.{dart.core::Iterable::first}{#lib1::Foo% /* = dart.core::int */} as{Unchecked} dart.core::int;
+  return foos.{dart.core::Iterable::first}{#lib1::Foo /* = dart.core::int */} as{Unchecked} dart.core::int;
\ No newline at end of file
diff --git a/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.strong.expect b/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.strong.expect
index 8e87cf7..dce974a 100644
--- a/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.strong.expect
@@ -203,7 +203,7 @@
 typedef Alias15<T extends core::Object? = dynamic> = core::List<T%>;
 typedef Alias16a<unrelated T extends core::Object? = dynamic> = core::List<self::E16b /* = invalid-type */>;
 typedef Alias16b<unrelated T extends core::Object? = dynamic> = core::List<self::E16a /* = invalid-type */>;
-typedef Alias18a<unrelated T extends core::Object? = dynamic> = (self::E18% /* = invalid-type */) → void;
+typedef Alias18a<unrelated T extends core::Object? = dynamic> = (self::E18 /* = invalid-type */) → void;
 typedef Alias18b<contravariant T extends core::Object? = dynamic> = (T%) → void;
 typedef Alias20 = invalid-type;
 typedef Alias21 = core::int;
@@ -297,12 +297,12 @@
   constructor tearoff • = self::E14|constructor#_#new#tearOff;
 }
 extension type E15a(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E15b% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E15b /* = invalid-type */>;
   constructor • = self::E15a|constructor#;
   constructor tearoff • = self::E15a|constructor#_#new#tearOff;
 }
 extension type E15b(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E15a% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E15a /* = invalid-type */>;
   constructor • = self::E15b|constructor#;
   constructor tearoff • = self::E15b|constructor#_#new#tearOff;
 }
@@ -322,7 +322,7 @@
   constructor tearoff • = self::E17|constructor#_#new#tearOff;
 }
 extension type E18(invalid-type it) {
-  abstract extension-type-member representation-field get it() → (self::E18% /* = invalid-type */) → void;
+  abstract extension-type-member representation-field get it() → (self::E18 /* = invalid-type */) → void;
   constructor • = self::E18|constructor#;
   constructor tearoff • = self::E18|constructor#_#new#tearOff;
 }
@@ -352,12 +352,12 @@
   constructor tearoff • = self::E22|constructor#_#new#tearOff;
 }
 extension type E23(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E23% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E23 /* = invalid-type */>;
   constructor • = self::E23|constructor#;
   constructor tearoff • = self::E23|constructor#_#new#tearOff;
 }
 extension type E24<T extends core::Object? = dynamic>(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E24<dynamic>% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E24<dynamic> /* = invalid-type */>;
   constructor • = self::E24|constructor#;
   constructor tearoff • = self::E24|constructor#_#new#tearOff;
 }
@@ -463,17 +463,17 @@
 }
 static extension-type-member method E14|constructor#_#new#tearOff(core::int it) → self::E14 /* = core::int */
   return self::E14|constructor#(it);
-static extension-type-member method E15a|constructor#(core::List<self::E15b% /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
+static extension-type-member method E15a|constructor#(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
   lowered final self::E15a /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E15a|constructor#_#new#tearOff(core::List<self::E15b% /* = invalid-type */> it) → self::E15a /* = invalid-type */
+static extension-type-member method E15a|constructor#_#new#tearOff(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   return self::E15a|constructor#(it);
-static extension-type-member method E15b|constructor#(core::List<self::E15a% /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
+static extension-type-member method E15b|constructor#(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
   lowered final self::E15b /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E15b|constructor#_#new#tearOff(core::List<self::E15a% /* = invalid-type */> it) → self::E15b /* = invalid-type */
+static extension-type-member method E15b|constructor#_#new#tearOff(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   return self::E15b|constructor#(it);
 static extension-type-member method E16a|constructor#(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */ {
   lowered final self::E16a /* = invalid-type */ #this = it;
@@ -493,11 +493,11 @@
 }
 static extension-type-member method E17|constructor#_#new#tearOff((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   return self::E17|constructor#(it);
-static extension-type-member method E18|constructor#((self::E18% /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
+static extension-type-member method E18|constructor#((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
   lowered final self::E18 /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E18|constructor#_#new#tearOff((self::E18% /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
+static extension-type-member method E18|constructor#_#new#tearOff((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   return self::E18|constructor#(it);
 static extension-type-member method E19a|constructor#((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(core::int, core::int) */ {
   lowered final self::E19a /* =(core::int, core::int) */ #this = it;
@@ -529,43 +529,43 @@
 }
 static extension-type-member method E22|constructor#_#new#tearOff(invalid-type it) → self::E22 /* = invalid-type */
   return self::E22|constructor#(it);
-static extension-type-member method E23|constructor#(core::List<self::E23% /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
+static extension-type-member method E23|constructor#(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
   lowered final self::E23 /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E23|constructor#_#new#tearOff(core::List<self::E23% /* = invalid-type */> it) → self::E23 /* = invalid-type */
+static extension-type-member method E23|constructor#_#new#tearOff(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   return self::E23|constructor#(it);
-static extension-type-member method E24|constructor#<T extends core::Object? = dynamic>(core::List<self::E24<dynamic>% /* = invalid-type */> it) → self::E24<self::E24|constructor#::T%> /* = invalid-type */ {
+static extension-type-member method E24|constructor#<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|constructor#::T%> /* = invalid-type */ {
   lowered final self::E24<self::E24|constructor#::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E24|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic>% /* = invalid-type */> it) → self::E24<self::E24|constructor#_#new#tearOff::T%> /* = invalid-type */
+static extension-type-member method E24|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|constructor#_#new#tearOff::T%> /* = invalid-type */
   return self::E24|constructor#<self::E24|constructor#_#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);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16b% /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16b /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16b /* = invalid-type */>
   return core::List::filled<self::E16b /* = invalid-type */>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16b /* = invalid-type */>
   return core::List::empty<self::E16b /* = invalid-type */>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::from<self::E16b /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16b% /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16b /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::of<self::E16b /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16b% /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16b /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::generate<self::E16b /* = invalid-type */>(length, generator, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16b /* = invalid-type */>
   return core::List::unmodifiable<self::E16b /* = invalid-type */>(elements);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16a% /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16a /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16a /* = invalid-type */>
   return core::List::filled<self::E16a /* = invalid-type */>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16a /* = invalid-type */>
   return core::List::empty<self::E16a /* = invalid-type */>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::from<self::E16a /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16a% /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16a /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::of<self::E16a /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16a% /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16a /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::generate<self::E16a /* = invalid-type */>(length, generator, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16a /* = invalid-type */>
   return core::List::unmodifiable<self::E16a /* = invalid-type */>(elements);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias23#filled#tearOff<T extends self::E23 /* = invalid-type */>(core::int length, self::_#Alias23#filled#tearOff::T% fill, {core::bool growable = #C2}) → core::List<self::_#Alias23#filled#tearOff::T%>
   return core::List::filled<self::_#Alias23#filled#tearOff::T%>(length, fill, growable: growable);
diff --git a/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.strong.transformed.expect
index 8e87cf7..dce974a 100644
--- a/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.strong.transformed.expect
@@ -203,7 +203,7 @@
 typedef Alias15<T extends core::Object? = dynamic> = core::List<T%>;
 typedef Alias16a<unrelated T extends core::Object? = dynamic> = core::List<self::E16b /* = invalid-type */>;
 typedef Alias16b<unrelated T extends core::Object? = dynamic> = core::List<self::E16a /* = invalid-type */>;
-typedef Alias18a<unrelated T extends core::Object? = dynamic> = (self::E18% /* = invalid-type */) → void;
+typedef Alias18a<unrelated T extends core::Object? = dynamic> = (self::E18 /* = invalid-type */) → void;
 typedef Alias18b<contravariant T extends core::Object? = dynamic> = (T%) → void;
 typedef Alias20 = invalid-type;
 typedef Alias21 = core::int;
@@ -297,12 +297,12 @@
   constructor tearoff • = self::E14|constructor#_#new#tearOff;
 }
 extension type E15a(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E15b% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E15b /* = invalid-type */>;
   constructor • = self::E15a|constructor#;
   constructor tearoff • = self::E15a|constructor#_#new#tearOff;
 }
 extension type E15b(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E15a% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E15a /* = invalid-type */>;
   constructor • = self::E15b|constructor#;
   constructor tearoff • = self::E15b|constructor#_#new#tearOff;
 }
@@ -322,7 +322,7 @@
   constructor tearoff • = self::E17|constructor#_#new#tearOff;
 }
 extension type E18(invalid-type it) {
-  abstract extension-type-member representation-field get it() → (self::E18% /* = invalid-type */) → void;
+  abstract extension-type-member representation-field get it() → (self::E18 /* = invalid-type */) → void;
   constructor • = self::E18|constructor#;
   constructor tearoff • = self::E18|constructor#_#new#tearOff;
 }
@@ -352,12 +352,12 @@
   constructor tearoff • = self::E22|constructor#_#new#tearOff;
 }
 extension type E23(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E23% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E23 /* = invalid-type */>;
   constructor • = self::E23|constructor#;
   constructor tearoff • = self::E23|constructor#_#new#tearOff;
 }
 extension type E24<T extends core::Object? = dynamic>(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E24<dynamic>% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E24<dynamic> /* = invalid-type */>;
   constructor • = self::E24|constructor#;
   constructor tearoff • = self::E24|constructor#_#new#tearOff;
 }
@@ -463,17 +463,17 @@
 }
 static extension-type-member method E14|constructor#_#new#tearOff(core::int it) → self::E14 /* = core::int */
   return self::E14|constructor#(it);
-static extension-type-member method E15a|constructor#(core::List<self::E15b% /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
+static extension-type-member method E15a|constructor#(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
   lowered final self::E15a /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E15a|constructor#_#new#tearOff(core::List<self::E15b% /* = invalid-type */> it) → self::E15a /* = invalid-type */
+static extension-type-member method E15a|constructor#_#new#tearOff(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   return self::E15a|constructor#(it);
-static extension-type-member method E15b|constructor#(core::List<self::E15a% /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
+static extension-type-member method E15b|constructor#(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
   lowered final self::E15b /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E15b|constructor#_#new#tearOff(core::List<self::E15a% /* = invalid-type */> it) → self::E15b /* = invalid-type */
+static extension-type-member method E15b|constructor#_#new#tearOff(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   return self::E15b|constructor#(it);
 static extension-type-member method E16a|constructor#(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */ {
   lowered final self::E16a /* = invalid-type */ #this = it;
@@ -493,11 +493,11 @@
 }
 static extension-type-member method E17|constructor#_#new#tearOff((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   return self::E17|constructor#(it);
-static extension-type-member method E18|constructor#((self::E18% /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
+static extension-type-member method E18|constructor#((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
   lowered final self::E18 /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E18|constructor#_#new#tearOff((self::E18% /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
+static extension-type-member method E18|constructor#_#new#tearOff((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   return self::E18|constructor#(it);
 static extension-type-member method E19a|constructor#((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(core::int, core::int) */ {
   lowered final self::E19a /* =(core::int, core::int) */ #this = it;
@@ -529,43 +529,43 @@
 }
 static extension-type-member method E22|constructor#_#new#tearOff(invalid-type it) → self::E22 /* = invalid-type */
   return self::E22|constructor#(it);
-static extension-type-member method E23|constructor#(core::List<self::E23% /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
+static extension-type-member method E23|constructor#(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
   lowered final self::E23 /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E23|constructor#_#new#tearOff(core::List<self::E23% /* = invalid-type */> it) → self::E23 /* = invalid-type */
+static extension-type-member method E23|constructor#_#new#tearOff(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   return self::E23|constructor#(it);
-static extension-type-member method E24|constructor#<T extends core::Object? = dynamic>(core::List<self::E24<dynamic>% /* = invalid-type */> it) → self::E24<self::E24|constructor#::T%> /* = invalid-type */ {
+static extension-type-member method E24|constructor#<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|constructor#::T%> /* = invalid-type */ {
   lowered final self::E24<self::E24|constructor#::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E24|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic>% /* = invalid-type */> it) → self::E24<self::E24|constructor#_#new#tearOff::T%> /* = invalid-type */
+static extension-type-member method E24|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|constructor#_#new#tearOff::T%> /* = invalid-type */
   return self::E24|constructor#<self::E24|constructor#_#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);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16b% /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16b /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16b /* = invalid-type */>
   return core::List::filled<self::E16b /* = invalid-type */>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16b /* = invalid-type */>
   return core::List::empty<self::E16b /* = invalid-type */>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::from<self::E16b /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16b% /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16b /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::of<self::E16b /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16b% /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16b /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::generate<self::E16b /* = invalid-type */>(length, generator, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16b /* = invalid-type */>
   return core::List::unmodifiable<self::E16b /* = invalid-type */>(elements);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16a% /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16a /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16a /* = invalid-type */>
   return core::List::filled<self::E16a /* = invalid-type */>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16a /* = invalid-type */>
   return core::List::empty<self::E16a /* = invalid-type */>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::from<self::E16a /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16a% /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16a /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::of<self::E16a /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16a% /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16a /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::generate<self::E16a /* = invalid-type */>(length, generator, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16a /* = invalid-type */>
   return core::List::unmodifiable<self::E16a /* = invalid-type */>(elements);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias23#filled#tearOff<T extends self::E23 /* = invalid-type */>(core::int length, self::_#Alias23#filled#tearOff::T% fill, {core::bool growable = #C2}) → core::List<self::_#Alias23#filled#tearOff::T%>
   return core::List::filled<self::_#Alias23#filled#tearOff::T%>(length, fill, growable: growable);
diff --git a/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.expect b/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.expect
index 8e87cf7..dce974a 100644
--- a/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.expect
@@ -203,7 +203,7 @@
 typedef Alias15<T extends core::Object? = dynamic> = core::List<T%>;
 typedef Alias16a<unrelated T extends core::Object? = dynamic> = core::List<self::E16b /* = invalid-type */>;
 typedef Alias16b<unrelated T extends core::Object? = dynamic> = core::List<self::E16a /* = invalid-type */>;
-typedef Alias18a<unrelated T extends core::Object? = dynamic> = (self::E18% /* = invalid-type */) → void;
+typedef Alias18a<unrelated T extends core::Object? = dynamic> = (self::E18 /* = invalid-type */) → void;
 typedef Alias18b<contravariant T extends core::Object? = dynamic> = (T%) → void;
 typedef Alias20 = invalid-type;
 typedef Alias21 = core::int;
@@ -297,12 +297,12 @@
   constructor tearoff • = self::E14|constructor#_#new#tearOff;
 }
 extension type E15a(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E15b% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E15b /* = invalid-type */>;
   constructor • = self::E15a|constructor#;
   constructor tearoff • = self::E15a|constructor#_#new#tearOff;
 }
 extension type E15b(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E15a% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E15a /* = invalid-type */>;
   constructor • = self::E15b|constructor#;
   constructor tearoff • = self::E15b|constructor#_#new#tearOff;
 }
@@ -322,7 +322,7 @@
   constructor tearoff • = self::E17|constructor#_#new#tearOff;
 }
 extension type E18(invalid-type it) {
-  abstract extension-type-member representation-field get it() → (self::E18% /* = invalid-type */) → void;
+  abstract extension-type-member representation-field get it() → (self::E18 /* = invalid-type */) → void;
   constructor • = self::E18|constructor#;
   constructor tearoff • = self::E18|constructor#_#new#tearOff;
 }
@@ -352,12 +352,12 @@
   constructor tearoff • = self::E22|constructor#_#new#tearOff;
 }
 extension type E23(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E23% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E23 /* = invalid-type */>;
   constructor • = self::E23|constructor#;
   constructor tearoff • = self::E23|constructor#_#new#tearOff;
 }
 extension type E24<T extends core::Object? = dynamic>(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E24<dynamic>% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E24<dynamic> /* = invalid-type */>;
   constructor • = self::E24|constructor#;
   constructor tearoff • = self::E24|constructor#_#new#tearOff;
 }
@@ -463,17 +463,17 @@
 }
 static extension-type-member method E14|constructor#_#new#tearOff(core::int it) → self::E14 /* = core::int */
   return self::E14|constructor#(it);
-static extension-type-member method E15a|constructor#(core::List<self::E15b% /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
+static extension-type-member method E15a|constructor#(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
   lowered final self::E15a /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E15a|constructor#_#new#tearOff(core::List<self::E15b% /* = invalid-type */> it) → self::E15a /* = invalid-type */
+static extension-type-member method E15a|constructor#_#new#tearOff(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   return self::E15a|constructor#(it);
-static extension-type-member method E15b|constructor#(core::List<self::E15a% /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
+static extension-type-member method E15b|constructor#(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
   lowered final self::E15b /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E15b|constructor#_#new#tearOff(core::List<self::E15a% /* = invalid-type */> it) → self::E15b /* = invalid-type */
+static extension-type-member method E15b|constructor#_#new#tearOff(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   return self::E15b|constructor#(it);
 static extension-type-member method E16a|constructor#(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */ {
   lowered final self::E16a /* = invalid-type */ #this = it;
@@ -493,11 +493,11 @@
 }
 static extension-type-member method E17|constructor#_#new#tearOff((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   return self::E17|constructor#(it);
-static extension-type-member method E18|constructor#((self::E18% /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
+static extension-type-member method E18|constructor#((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
   lowered final self::E18 /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E18|constructor#_#new#tearOff((self::E18% /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
+static extension-type-member method E18|constructor#_#new#tearOff((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   return self::E18|constructor#(it);
 static extension-type-member method E19a|constructor#((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(core::int, core::int) */ {
   lowered final self::E19a /* =(core::int, core::int) */ #this = it;
@@ -529,43 +529,43 @@
 }
 static extension-type-member method E22|constructor#_#new#tearOff(invalid-type it) → self::E22 /* = invalid-type */
   return self::E22|constructor#(it);
-static extension-type-member method E23|constructor#(core::List<self::E23% /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
+static extension-type-member method E23|constructor#(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
   lowered final self::E23 /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E23|constructor#_#new#tearOff(core::List<self::E23% /* = invalid-type */> it) → self::E23 /* = invalid-type */
+static extension-type-member method E23|constructor#_#new#tearOff(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   return self::E23|constructor#(it);
-static extension-type-member method E24|constructor#<T extends core::Object? = dynamic>(core::List<self::E24<dynamic>% /* = invalid-type */> it) → self::E24<self::E24|constructor#::T%> /* = invalid-type */ {
+static extension-type-member method E24|constructor#<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|constructor#::T%> /* = invalid-type */ {
   lowered final self::E24<self::E24|constructor#::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E24|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic>% /* = invalid-type */> it) → self::E24<self::E24|constructor#_#new#tearOff::T%> /* = invalid-type */
+static extension-type-member method E24|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|constructor#_#new#tearOff::T%> /* = invalid-type */
   return self::E24|constructor#<self::E24|constructor#_#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);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16b% /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16b /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16b /* = invalid-type */>
   return core::List::filled<self::E16b /* = invalid-type */>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16b /* = invalid-type */>
   return core::List::empty<self::E16b /* = invalid-type */>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::from<self::E16b /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16b% /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16b /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::of<self::E16b /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16b% /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16b /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::generate<self::E16b /* = invalid-type */>(length, generator, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16b /* = invalid-type */>
   return core::List::unmodifiable<self::E16b /* = invalid-type */>(elements);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16a% /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16a /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16a /* = invalid-type */>
   return core::List::filled<self::E16a /* = invalid-type */>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16a /* = invalid-type */>
   return core::List::empty<self::E16a /* = invalid-type */>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::from<self::E16a /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16a% /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16a /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::of<self::E16a /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16a% /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16a /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::generate<self::E16a /* = invalid-type */>(length, generator, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16a /* = invalid-type */>
   return core::List::unmodifiable<self::E16a /* = invalid-type */>(elements);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias23#filled#tearOff<T extends self::E23 /* = invalid-type */>(core::int length, self::_#Alias23#filled#tearOff::T% fill, {core::bool growable = #C2}) → core::List<self::_#Alias23#filled#tearOff::T%>
   return core::List::filled<self::_#Alias23#filled#tearOff::T%>(length, fill, growable: growable);
diff --git a/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.modular.expect
index 8e87cf7..dce974a 100644
--- a/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.modular.expect
@@ -203,7 +203,7 @@
 typedef Alias15<T extends core::Object? = dynamic> = core::List<T%>;
 typedef Alias16a<unrelated T extends core::Object? = dynamic> = core::List<self::E16b /* = invalid-type */>;
 typedef Alias16b<unrelated T extends core::Object? = dynamic> = core::List<self::E16a /* = invalid-type */>;
-typedef Alias18a<unrelated T extends core::Object? = dynamic> = (self::E18% /* = invalid-type */) → void;
+typedef Alias18a<unrelated T extends core::Object? = dynamic> = (self::E18 /* = invalid-type */) → void;
 typedef Alias18b<contravariant T extends core::Object? = dynamic> = (T%) → void;
 typedef Alias20 = invalid-type;
 typedef Alias21 = core::int;
@@ -297,12 +297,12 @@
   constructor tearoff • = self::E14|constructor#_#new#tearOff;
 }
 extension type E15a(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E15b% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E15b /* = invalid-type */>;
   constructor • = self::E15a|constructor#;
   constructor tearoff • = self::E15a|constructor#_#new#tearOff;
 }
 extension type E15b(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E15a% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E15a /* = invalid-type */>;
   constructor • = self::E15b|constructor#;
   constructor tearoff • = self::E15b|constructor#_#new#tearOff;
 }
@@ -322,7 +322,7 @@
   constructor tearoff • = self::E17|constructor#_#new#tearOff;
 }
 extension type E18(invalid-type it) {
-  abstract extension-type-member representation-field get it() → (self::E18% /* = invalid-type */) → void;
+  abstract extension-type-member representation-field get it() → (self::E18 /* = invalid-type */) → void;
   constructor • = self::E18|constructor#;
   constructor tearoff • = self::E18|constructor#_#new#tearOff;
 }
@@ -352,12 +352,12 @@
   constructor tearoff • = self::E22|constructor#_#new#tearOff;
 }
 extension type E23(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E23% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E23 /* = invalid-type */>;
   constructor • = self::E23|constructor#;
   constructor tearoff • = self::E23|constructor#_#new#tearOff;
 }
 extension type E24<T extends core::Object? = dynamic>(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E24<dynamic>% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E24<dynamic> /* = invalid-type */>;
   constructor • = self::E24|constructor#;
   constructor tearoff • = self::E24|constructor#_#new#tearOff;
 }
@@ -463,17 +463,17 @@
 }
 static extension-type-member method E14|constructor#_#new#tearOff(core::int it) → self::E14 /* = core::int */
   return self::E14|constructor#(it);
-static extension-type-member method E15a|constructor#(core::List<self::E15b% /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
+static extension-type-member method E15a|constructor#(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
   lowered final self::E15a /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E15a|constructor#_#new#tearOff(core::List<self::E15b% /* = invalid-type */> it) → self::E15a /* = invalid-type */
+static extension-type-member method E15a|constructor#_#new#tearOff(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   return self::E15a|constructor#(it);
-static extension-type-member method E15b|constructor#(core::List<self::E15a% /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
+static extension-type-member method E15b|constructor#(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
   lowered final self::E15b /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E15b|constructor#_#new#tearOff(core::List<self::E15a% /* = invalid-type */> it) → self::E15b /* = invalid-type */
+static extension-type-member method E15b|constructor#_#new#tearOff(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   return self::E15b|constructor#(it);
 static extension-type-member method E16a|constructor#(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */ {
   lowered final self::E16a /* = invalid-type */ #this = it;
@@ -493,11 +493,11 @@
 }
 static extension-type-member method E17|constructor#_#new#tearOff((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   return self::E17|constructor#(it);
-static extension-type-member method E18|constructor#((self::E18% /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
+static extension-type-member method E18|constructor#((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
   lowered final self::E18 /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E18|constructor#_#new#tearOff((self::E18% /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
+static extension-type-member method E18|constructor#_#new#tearOff((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   return self::E18|constructor#(it);
 static extension-type-member method E19a|constructor#((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(core::int, core::int) */ {
   lowered final self::E19a /* =(core::int, core::int) */ #this = it;
@@ -529,43 +529,43 @@
 }
 static extension-type-member method E22|constructor#_#new#tearOff(invalid-type it) → self::E22 /* = invalid-type */
   return self::E22|constructor#(it);
-static extension-type-member method E23|constructor#(core::List<self::E23% /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
+static extension-type-member method E23|constructor#(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
   lowered final self::E23 /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E23|constructor#_#new#tearOff(core::List<self::E23% /* = invalid-type */> it) → self::E23 /* = invalid-type */
+static extension-type-member method E23|constructor#_#new#tearOff(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   return self::E23|constructor#(it);
-static extension-type-member method E24|constructor#<T extends core::Object? = dynamic>(core::List<self::E24<dynamic>% /* = invalid-type */> it) → self::E24<self::E24|constructor#::T%> /* = invalid-type */ {
+static extension-type-member method E24|constructor#<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|constructor#::T%> /* = invalid-type */ {
   lowered final self::E24<self::E24|constructor#::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E24|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic>% /* = invalid-type */> it) → self::E24<self::E24|constructor#_#new#tearOff::T%> /* = invalid-type */
+static extension-type-member method E24|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|constructor#_#new#tearOff::T%> /* = invalid-type */
   return self::E24|constructor#<self::E24|constructor#_#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);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16b% /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16b /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16b /* = invalid-type */>
   return core::List::filled<self::E16b /* = invalid-type */>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16b /* = invalid-type */>
   return core::List::empty<self::E16b /* = invalid-type */>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::from<self::E16b /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16b% /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16b /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::of<self::E16b /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16b% /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16b /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::generate<self::E16b /* = invalid-type */>(length, generator, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16b /* = invalid-type */>
   return core::List::unmodifiable<self::E16b /* = invalid-type */>(elements);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16a% /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16a /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16a /* = invalid-type */>
   return core::List::filled<self::E16a /* = invalid-type */>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16a /* = invalid-type */>
   return core::List::empty<self::E16a /* = invalid-type */>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::from<self::E16a /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16a% /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16a /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::of<self::E16a /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16a% /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16a /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::generate<self::E16a /* = invalid-type */>(length, generator, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16a /* = invalid-type */>
   return core::List::unmodifiable<self::E16a /* = invalid-type */>(elements);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias23#filled#tearOff<T extends self::E23 /* = invalid-type */>(core::int length, self::_#Alias23#filled#tearOff::T% fill, {core::bool growable = #C2}) → core::List<self::_#Alias23#filled#tearOff::T%>
   return core::List::filled<self::_#Alias23#filled#tearOff::T%>(length, fill, growable: growable);
diff --git a/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.outline.expect
index d32255b..9e9189b 100644
--- a/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.outline.expect
@@ -203,7 +203,7 @@
 typedef Alias15<T extends core::Object? = dynamic> = core::List<T%>;
 typedef Alias16a<unrelated T extends core::Object? = dynamic> = core::List<self::E16b /* = invalid-type */>;
 typedef Alias16b<unrelated T extends core::Object? = dynamic> = core::List<self::E16a /* = invalid-type */>;
-typedef Alias18a<unrelated T extends core::Object? = dynamic> = (self::E18% /* = invalid-type */) → void;
+typedef Alias18a<unrelated T extends core::Object? = dynamic> = (self::E18 /* = invalid-type */) → void;
 typedef Alias18b<contravariant T extends core::Object? = dynamic> = (T%) → void;
 typedef Alias20 = invalid-type;
 typedef Alias21 = core::int;
@@ -297,12 +297,12 @@
   constructor tearoff • = self::E14|constructor#_#new#tearOff;
 }
 extension type E15a(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E15b% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E15b /* = invalid-type */>;
   constructor • = self::E15a|constructor#;
   constructor tearoff • = self::E15a|constructor#_#new#tearOff;
 }
 extension type E15b(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E15a% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E15a /* = invalid-type */>;
   constructor • = self::E15b|constructor#;
   constructor tearoff • = self::E15b|constructor#_#new#tearOff;
 }
@@ -322,7 +322,7 @@
   constructor tearoff • = self::E17|constructor#_#new#tearOff;
 }
 extension type E18(invalid-type it) {
-  abstract extension-type-member representation-field get it() → (self::E18% /* = invalid-type */) → void;
+  abstract extension-type-member representation-field get it() → (self::E18 /* = invalid-type */) → void;
   constructor • = self::E18|constructor#;
   constructor tearoff • = self::E18|constructor#_#new#tearOff;
 }
@@ -352,12 +352,12 @@
   constructor tearoff • = self::E22|constructor#_#new#tearOff;
 }
 extension type E23(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E23% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E23 /* = invalid-type */>;
   constructor • = self::E23|constructor#;
   constructor tearoff • = self::E23|constructor#_#new#tearOff;
 }
 extension type E24<T extends core::Object? = dynamic>(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E24<dynamic>% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E24<dynamic> /* = invalid-type */>;
   constructor • = self::E24|constructor#;
   constructor tearoff • = self::E24|constructor#_#new#tearOff;
 }
@@ -429,13 +429,13 @@
   ;
 static extension-type-member method E14|constructor#_#new#tearOff(core::int it) → self::E14 /* = core::int */
   return self::E14|constructor#(it);
-static extension-type-member method E15a|constructor#(core::List<self::E15b% /* = invalid-type */> it) → self::E15a /* = invalid-type */
+static extension-type-member method E15a|constructor#(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   ;
-static extension-type-member method E15a|constructor#_#new#tearOff(core::List<self::E15b% /* = invalid-type */> it) → self::E15a /* = invalid-type */
+static extension-type-member method E15a|constructor#_#new#tearOff(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   return self::E15a|constructor#(it);
-static extension-type-member method E15b|constructor#(core::List<self::E15a% /* = invalid-type */> it) → self::E15b /* = invalid-type */
+static extension-type-member method E15b|constructor#(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   ;
-static extension-type-member method E15b|constructor#_#new#tearOff(core::List<self::E15a% /* = invalid-type */> it) → self::E15b /* = invalid-type */
+static extension-type-member method E15b|constructor#_#new#tearOff(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   return self::E15b|constructor#(it);
 static extension-type-member method E16a|constructor#(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */
   ;
@@ -449,9 +449,9 @@
   ;
 static extension-type-member method E17|constructor#_#new#tearOff((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   return self::E17|constructor#(it);
-static extension-type-member method E18|constructor#((self::E18% /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
+static extension-type-member method E18|constructor#((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   ;
-static extension-type-member method E18|constructor#_#new#tearOff((self::E18% /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
+static extension-type-member method E18|constructor#_#new#tearOff((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   return self::E18|constructor#(it);
 static extension-type-member method E19a|constructor#((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(core::int, core::int) */
   ;
@@ -473,39 +473,39 @@
   ;
 static extension-type-member method E22|constructor#_#new#tearOff(invalid-type it) → self::E22 /* = invalid-type */
   return self::E22|constructor#(it);
-static extension-type-member method E23|constructor#(core::List<self::E23% /* = invalid-type */> it) → self::E23 /* = invalid-type */
+static extension-type-member method E23|constructor#(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   ;
-static extension-type-member method E23|constructor#_#new#tearOff(core::List<self::E23% /* = invalid-type */> it) → self::E23 /* = invalid-type */
+static extension-type-member method E23|constructor#_#new#tearOff(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   return self::E23|constructor#(it);
-static extension-type-member method E24|constructor#<T extends core::Object? = dynamic>(core::List<self::E24<dynamic>% /* = invalid-type */> it) → self::E24<self::E24|constructor#::T%> /* = invalid-type */
+static extension-type-member method E24|constructor#<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|constructor#::T%> /* = invalid-type */
   ;
-static extension-type-member method E24|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic>% /* = invalid-type */> it) → self::E24<self::E24|constructor#_#new#tearOff::T%> /* = invalid-type */
+static extension-type-member method E24|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|constructor#_#new#tearOff::T%> /* = invalid-type */
   return self::E24|constructor#<self::E24|constructor#_#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);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16b% /* = invalid-type */ fill, {has-declared-initializer core::bool growable}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16b /* = invalid-type */ fill, {has-declared-initializer core::bool growable}) → core::List<self::E16b /* = invalid-type */>
   return core::List::filled<self::E16b /* = invalid-type */>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#empty#tearOff<unrelated T extends core::Object? = dynamic>({has-declared-initializer core::bool growable}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#empty#tearOff<unrelated T extends core::Object? = dynamic>({has-declared-initializer core::bool growable}) → core::List<self::E16b /* = invalid-type */>
   return core::List::empty<self::E16b /* = invalid-type */>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {has-declared-initializer core::bool growable}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {has-declared-initializer core::bool growable}) → core::List<self::E16b /* = invalid-type */>
   return core::List::from<self::E16b /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16b% /* = invalid-type */> elements, {has-declared-initializer core::bool growable}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16b /* = invalid-type */> elements, {has-declared-initializer core::bool growable}) → core::List<self::E16b /* = invalid-type */>
   return core::List::of<self::E16b /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16b% /* = invalid-type */ generator, {has-declared-initializer core::bool growable}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16b /* = invalid-type */ generator, {has-declared-initializer core::bool growable}) → core::List<self::E16b /* = invalid-type */>
   return core::List::generate<self::E16b /* = invalid-type */>(length, generator, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16b /* = invalid-type */>
   return core::List::unmodifiable<self::E16b /* = invalid-type */>(elements);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16a% /* = invalid-type */ fill, {has-declared-initializer core::bool growable}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16a /* = invalid-type */ fill, {has-declared-initializer core::bool growable}) → core::List<self::E16a /* = invalid-type */>
   return core::List::filled<self::E16a /* = invalid-type */>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#empty#tearOff<unrelated T extends core::Object? = dynamic>({has-declared-initializer core::bool growable}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#empty#tearOff<unrelated T extends core::Object? = dynamic>({has-declared-initializer core::bool growable}) → core::List<self::E16a /* = invalid-type */>
   return core::List::empty<self::E16a /* = invalid-type */>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {has-declared-initializer core::bool growable}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {has-declared-initializer core::bool growable}) → core::List<self::E16a /* = invalid-type */>
   return core::List::from<self::E16a /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16a% /* = invalid-type */> elements, {has-declared-initializer core::bool growable}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16a /* = invalid-type */> elements, {has-declared-initializer core::bool growable}) → core::List<self::E16a /* = invalid-type */>
   return core::List::of<self::E16a /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16a% /* = invalid-type */ generator, {has-declared-initializer core::bool growable}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16a /* = invalid-type */ generator, {has-declared-initializer core::bool growable}) → core::List<self::E16a /* = invalid-type */>
   return core::List::generate<self::E16a /* = invalid-type */>(length, generator, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16a /* = invalid-type */>
   return core::List::unmodifiable<self::E16a /* = invalid-type */>(elements);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias23#filled#tearOff<T extends self::E23 /* = invalid-type */>(core::int length, self::_#Alias23#filled#tearOff::T% fill, {has-declared-initializer core::bool growable}) → core::List<self::_#Alias23#filled#tearOff::T%>
   return core::List::filled<self::_#Alias23#filled#tearOff::T%>(length, fill, growable: growable);
diff --git a/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.transformed.expect
index 8e87cf7..dce974a 100644
--- a/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/cyclic_representation_type.dart.weak.transformed.expect
@@ -203,7 +203,7 @@
 typedef Alias15<T extends core::Object? = dynamic> = core::List<T%>;
 typedef Alias16a<unrelated T extends core::Object? = dynamic> = core::List<self::E16b /* = invalid-type */>;
 typedef Alias16b<unrelated T extends core::Object? = dynamic> = core::List<self::E16a /* = invalid-type */>;
-typedef Alias18a<unrelated T extends core::Object? = dynamic> = (self::E18% /* = invalid-type */) → void;
+typedef Alias18a<unrelated T extends core::Object? = dynamic> = (self::E18 /* = invalid-type */) → void;
 typedef Alias18b<contravariant T extends core::Object? = dynamic> = (T%) → void;
 typedef Alias20 = invalid-type;
 typedef Alias21 = core::int;
@@ -297,12 +297,12 @@
   constructor tearoff • = self::E14|constructor#_#new#tearOff;
 }
 extension type E15a(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E15b% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E15b /* = invalid-type */>;
   constructor • = self::E15a|constructor#;
   constructor tearoff • = self::E15a|constructor#_#new#tearOff;
 }
 extension type E15b(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E15a% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E15a /* = invalid-type */>;
   constructor • = self::E15b|constructor#;
   constructor tearoff • = self::E15b|constructor#_#new#tearOff;
 }
@@ -322,7 +322,7 @@
   constructor tearoff • = self::E17|constructor#_#new#tearOff;
 }
 extension type E18(invalid-type it) {
-  abstract extension-type-member representation-field get it() → (self::E18% /* = invalid-type */) → void;
+  abstract extension-type-member representation-field get it() → (self::E18 /* = invalid-type */) → void;
   constructor • = self::E18|constructor#;
   constructor tearoff • = self::E18|constructor#_#new#tearOff;
 }
@@ -352,12 +352,12 @@
   constructor tearoff • = self::E22|constructor#_#new#tearOff;
 }
 extension type E23(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E23% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E23 /* = invalid-type */>;
   constructor • = self::E23|constructor#;
   constructor tearoff • = self::E23|constructor#_#new#tearOff;
 }
 extension type E24<T extends core::Object? = dynamic>(invalid-type it) {
-  abstract extension-type-member representation-field get it() → core::List<self::E24<dynamic>% /* = invalid-type */>;
+  abstract extension-type-member representation-field get it() → core::List<self::E24<dynamic> /* = invalid-type */>;
   constructor • = self::E24|constructor#;
   constructor tearoff • = self::E24|constructor#_#new#tearOff;
 }
@@ -463,17 +463,17 @@
 }
 static extension-type-member method E14|constructor#_#new#tearOff(core::int it) → self::E14 /* = core::int */
   return self::E14|constructor#(it);
-static extension-type-member method E15a|constructor#(core::List<self::E15b% /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
+static extension-type-member method E15a|constructor#(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */ {
   lowered final self::E15a /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E15a|constructor#_#new#tearOff(core::List<self::E15b% /* = invalid-type */> it) → self::E15a /* = invalid-type */
+static extension-type-member method E15a|constructor#_#new#tearOff(core::List<self::E15b /* = invalid-type */> it) → self::E15a /* = invalid-type */
   return self::E15a|constructor#(it);
-static extension-type-member method E15b|constructor#(core::List<self::E15a% /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
+static extension-type-member method E15b|constructor#(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */ {
   lowered final self::E15b /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E15b|constructor#_#new#tearOff(core::List<self::E15a% /* = invalid-type */> it) → self::E15b /* = invalid-type */
+static extension-type-member method E15b|constructor#_#new#tearOff(core::List<self::E15a /* = invalid-type */> it) → self::E15b /* = invalid-type */
   return self::E15b|constructor#(it);
 static extension-type-member method E16a|constructor#(core::List<self::E16b /* = invalid-type */> it) → self::E16a /* = invalid-type */ {
   lowered final self::E16a /* = invalid-type */ #this = it;
@@ -493,11 +493,11 @@
 }
 static extension-type-member method E17|constructor#_#new#tearOff((core::int, {required a: self::E17 /* = invalid-type */}) it) → self::E17 /* = invalid-type */
   return self::E17|constructor#(it);
-static extension-type-member method E18|constructor#((self::E18% /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
+static extension-type-member method E18|constructor#((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */ {
   lowered final self::E18 /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E18|constructor#_#new#tearOff((self::E18% /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
+static extension-type-member method E18|constructor#_#new#tearOff((self::E18 /* = invalid-type */) → void it) → self::E18 /* = invalid-type */
   return self::E18|constructor#(it);
 static extension-type-member method E19a|constructor#((self::E19b /* = core::int */, self::E19b /* = core::int */) it) → self::E19a /* =(core::int, core::int) */ {
   lowered final self::E19a /* =(core::int, core::int) */ #this = it;
@@ -529,43 +529,43 @@
 }
 static extension-type-member method E22|constructor#_#new#tearOff(invalid-type it) → self::E22 /* = invalid-type */
   return self::E22|constructor#(it);
-static extension-type-member method E23|constructor#(core::List<self::E23% /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
+static extension-type-member method E23|constructor#(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */ {
   lowered final self::E23 /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E23|constructor#_#new#tearOff(core::List<self::E23% /* = invalid-type */> it) → self::E23 /* = invalid-type */
+static extension-type-member method E23|constructor#_#new#tearOff(core::List<self::E23 /* = invalid-type */> it) → self::E23 /* = invalid-type */
   return self::E23|constructor#(it);
-static extension-type-member method E24|constructor#<T extends core::Object? = dynamic>(core::List<self::E24<dynamic>% /* = invalid-type */> it) → self::E24<self::E24|constructor#::T%> /* = invalid-type */ {
+static extension-type-member method E24|constructor#<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|constructor#::T%> /* = invalid-type */ {
   lowered final self::E24<self::E24|constructor#::T%> /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E24|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic>% /* = invalid-type */> it) → self::E24<self::E24|constructor#_#new#tearOff::T%> /* = invalid-type */
+static extension-type-member method E24|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::List<self::E24<dynamic> /* = invalid-type */> it) → self::E24<self::E24|constructor#_#new#tearOff::T%> /* = invalid-type */
   return self::E24|constructor#<self::E24|constructor#_#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);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16b% /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16b /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16b /* = invalid-type */>
   return core::List::filled<self::E16b /* = invalid-type */>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16b /* = invalid-type */>
   return core::List::empty<self::E16b /* = invalid-type */>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::from<self::E16b /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16b% /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16b /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::of<self::E16b /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16b% /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16b /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16b /* = invalid-type */>
   return core::List::generate<self::E16b /* = invalid-type */>(length, generator, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16b% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16a#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16b /* = invalid-type */>
   return core::List::unmodifiable<self::E16b /* = invalid-type */>(elements);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16a% /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#filled#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, self::E16a /* = invalid-type */ fill, {core::bool growable = #C2}) → core::List<self::E16a /* = invalid-type */>
   return core::List::filled<self::E16a /* = invalid-type */>(length, fill, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#empty#tearOff<unrelated T extends core::Object? = dynamic>({core::bool growable = #C2}) → core::List<self::E16a /* = invalid-type */>
   return core::List::empty<self::E16a /* = invalid-type */>(growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#from#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::from<self::E16a /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16a% /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#of#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<self::E16a /* = invalid-type */> elements, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::of<self::E16a /* = invalid-type */>(elements, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16a% /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#generate#tearOff<unrelated T extends core::Object? = dynamic>(core::int length, (core::int) → self::E16a /* = invalid-type */ generator, {core::bool growable = #C3}) → core::List<self::E16a /* = invalid-type */>
   return core::List::generate<self::E16a /* = invalid-type */>(length, generator, growable: growable);
-static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16a% /* = invalid-type */>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias16b#unmodifiable#tearOff<unrelated T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<self::E16a /* = invalid-type */>
   return core::List::unmodifiable<self::E16a /* = invalid-type */>(elements);
 static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm_shared/lib/array_patch.dart */ _#Alias23#filled#tearOff<T extends self::E23 /* = invalid-type */>(core::int length, self::_#Alias23#filled#tearOff::T% fill, {core::bool growable = #C2}) → core::List<self::_#Alias23#filled#tearOff::T%>
   return core::List::filled<self::_#Alias23#filled#tearOff::T%>(length, fill, growable: growable);
diff --git a/pkg/front_end/testcases/extension_types/issue53155.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue53155.dart.strong.expect
index f3df712..877825f 100644
--- a/pkg/front_end/testcases/extension_types/issue53155.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue53155.dart.strong.expect
@@ -27,8 +27,8 @@
   self::V<core::int, core::num> /* = core::int */ v = self::V|constructor#<core::int, core::num>(42);
   self::expect(42, v as{Unchecked} core::int);
   self::expect(v, self::foo<self::V<core::int, core::num> /* = core::int */>(v));
-  self::expect(self::V|constructor#<core::int, core::int>(0), let final self::C<self::V<core::int, core::int>% /* = core::int */> #t1 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t2 = self::V|constructor#<core::int, core::int>(0) in #t1.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t2){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
-  self::expect(self::V|constructor#<core::int, core::Object>(1), let final self::C<self::V<core::int, core::int>% /* = core::int */> #t3 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t4 = self::V|constructor#<core::int, core::int>(1) in #t3.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t4){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
+  self::expect(self::V|constructor#<core::int, core::int>(0), let final self::C<self::V<core::int, core::int> /* = core::int */> #t1 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t2 = self::V|constructor#<core::int, core::int>(0) in #t1.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t2){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
+  self::expect(self::V|constructor#<core::int, core::Object>(1), let final self::C<self::V<core::int, core::int> /* = core::int */> #t3 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t4 = self::V|constructor#<core::int, core::int>(1) in #t3.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t4){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/extension_types/issue53155.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue53155.dart.strong.transformed.expect
index f3df712..877825f 100644
--- a/pkg/front_end/testcases/extension_types/issue53155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue53155.dart.strong.transformed.expect
@@ -27,8 +27,8 @@
   self::V<core::int, core::num> /* = core::int */ v = self::V|constructor#<core::int, core::num>(42);
   self::expect(42, v as{Unchecked} core::int);
   self::expect(v, self::foo<self::V<core::int, core::num> /* = core::int */>(v));
-  self::expect(self::V|constructor#<core::int, core::int>(0), let final self::C<self::V<core::int, core::int>% /* = core::int */> #t1 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t2 = self::V|constructor#<core::int, core::int>(0) in #t1.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t2){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
-  self::expect(self::V|constructor#<core::int, core::Object>(1), let final self::C<self::V<core::int, core::int>% /* = core::int */> #t3 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t4 = self::V|constructor#<core::int, core::int>(1) in #t3.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t4){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
+  self::expect(self::V|constructor#<core::int, core::int>(0), let final self::C<self::V<core::int, core::int> /* = core::int */> #t1 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t2 = self::V|constructor#<core::int, core::int>(0) in #t1.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t2){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
+  self::expect(self::V|constructor#<core::int, core::Object>(1), let final self::C<self::V<core::int, core::int> /* = core::int */> #t3 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t4 = self::V|constructor#<core::int, core::int>(1) in #t3.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t4){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/extension_types/issue53155.dart.weak.expect b/pkg/front_end/testcases/extension_types/issue53155.dart.weak.expect
index 749a312..f53f972 100644
--- a/pkg/front_end/testcases/extension_types/issue53155.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/issue53155.dart.weak.expect
@@ -27,8 +27,8 @@
   self::V<core::int, core::num> /* = core::int */ v = self::V|constructor#<core::int, core::num>(42);
   self::expect(42, v as{Unchecked} core::int);
   self::expect(v, self::foo<self::V<core::int, core::num> /* = core::int */>(v));
-  self::expect(self::V|constructor#<core::int, core::int>(0), let final self::C<self::V<core::int, core::int>% /* = core::int */> #t1 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t2 = self::V|constructor#<core::int, core::int>(0) in #t1.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t2){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
-  self::expect(self::V|constructor#<core::int, core::Object>(1), let final self::C<self::V<core::int, core::int>% /* = core::int */> #t3 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t4 = self::V|constructor#<core::int, core::int>(1) in #t3.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t4){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
+  self::expect(self::V|constructor#<core::int, core::int>(0), let final self::C<self::V<core::int, core::int> /* = core::int */> #t1 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t2 = self::V|constructor#<core::int, core::int>(0) in #t1.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t2){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
+  self::expect(self::V|constructor#<core::int, core::Object>(1), let final self::C<self::V<core::int, core::int> /* = core::int */> #t3 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t4 = self::V|constructor#<core::int, core::int>(1) in #t3.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t4){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/extension_types/issue53155.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/issue53155.dart.weak.modular.expect
index 749a312..f53f972 100644
--- a/pkg/front_end/testcases/extension_types/issue53155.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue53155.dart.weak.modular.expect
@@ -27,8 +27,8 @@
   self::V<core::int, core::num> /* = core::int */ v = self::V|constructor#<core::int, core::num>(42);
   self::expect(42, v as{Unchecked} core::int);
   self::expect(v, self::foo<self::V<core::int, core::num> /* = core::int */>(v));
-  self::expect(self::V|constructor#<core::int, core::int>(0), let final self::C<self::V<core::int, core::int>% /* = core::int */> #t1 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t2 = self::V|constructor#<core::int, core::int>(0) in #t1.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t2){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
-  self::expect(self::V|constructor#<core::int, core::Object>(1), let final self::C<self::V<core::int, core::int>% /* = core::int */> #t3 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t4 = self::V|constructor#<core::int, core::int>(1) in #t3.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t4){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
+  self::expect(self::V|constructor#<core::int, core::int>(0), let final self::C<self::V<core::int, core::int> /* = core::int */> #t1 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t2 = self::V|constructor#<core::int, core::int>(0) in #t1.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t2){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
+  self::expect(self::V|constructor#<core::int, core::Object>(1), let final self::C<self::V<core::int, core::int> /* = core::int */> #t3 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t4 = self::V|constructor#<core::int, core::int>(1) in #t3.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t4){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/extension_types/issue53155.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/issue53155.dart.weak.transformed.expect
index 749a312..f53f972 100644
--- a/pkg/front_end/testcases/extension_types/issue53155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue53155.dart.weak.transformed.expect
@@ -27,8 +27,8 @@
   self::V<core::int, core::num> /* = core::int */ v = self::V|constructor#<core::int, core::num>(42);
   self::expect(42, v as{Unchecked} core::int);
   self::expect(v, self::foo<self::V<core::int, core::num> /* = core::int */>(v));
-  self::expect(self::V|constructor#<core::int, core::int>(0), let final self::C<self::V<core::int, core::int>% /* = core::int */> #t1 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t2 = self::V|constructor#<core::int, core::int>(0) in #t1.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t2){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
-  self::expect(self::V|constructor#<core::int, core::Object>(1), let final self::C<self::V<core::int, core::int>% /* = core::int */> #t3 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t4 = self::V|constructor#<core::int, core::int>(1) in #t3.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t4){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
+  self::expect(self::V|constructor#<core::int, core::int>(0), let final self::C<self::V<core::int, core::int> /* = core::int */> #t1 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t2 = self::V|constructor#<core::int, core::int>(0) in #t1.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t2){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
+  self::expect(self::V|constructor#<core::int, core::Object>(1), let final self::C<self::V<core::int, core::int> /* = core::int */> #t3 = new self::C::•<self::V<core::int, core::int> /* = core::int */>() in let final self::V<core::int, core::int> /* = core::int */ #t4 = self::V|constructor#<core::int, core::int>(1) in #t3.{self::C::f}{(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */}(#t4){(self::V<core::int, core::int> /* = core::int */) → self::V<core::int, core::int> /* = core::int */});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
diff --git a/pkg/front_end/testcases/extension_types/issue54097_2.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue54097_2.dart.strong.expect
index 86f6a04..99a614b 100644
--- a/pkg/front_end/testcases/extension_types/issue54097_2.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue54097_2.dart.strong.expect
@@ -162,9 +162,9 @@
 
 typedef F1<X extends core::Object? = dynamic> = X%;
 typedef F2<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
-typedef F3<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
-typedef F4<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
-typedef F5<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
+typedef F3<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
+typedef F4<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
+typedef F5<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
 typedef F6<X extends core::Object? = dynamic> = X%;
 typedef F7<X extends core::Object? = dynamic> = self::E1<self::E1<X%> /* = X% */> /* = X% */;
 class A1<X extends self::A1::Y% = dynamic, Y extends invalid-type = dynamic> extends core::Object {
@@ -192,17 +192,17 @@
     : super core::Object::•()
     ;
 }
-class AF13<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF13<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF13<self::AF13::X%>
     : super core::Object::•()
     ;
 }
-class AF14<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF14<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF14<self::AF14::X%>
     : super core::Object::•()
     ;
 }
-class AF15<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF15<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF15<self::AF15::X%>
     : super core::Object::•()
     ;
@@ -262,18 +262,18 @@
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
-extension type E3<X extends core::Object? = dynamic>(self::E1<X%>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<X%>% /* = X% */;
+extension type E3<X extends core::Object? = dynamic>(self::E1<X%> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<X%> /* = X% */;
   constructor • = self::E3|constructor#;
   constructor tearoff • = self::E3|constructor#_#new#tearOff;
 }
-extension type E4<X extends core::Object? = dynamic>(self::E1<X%>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<X%>% /* = X% */;
+extension type E4<X extends core::Object? = dynamic>(self::E1<X%> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<X%> /* = X% */;
   constructor • = self::E4|constructor#;
   constructor tearoff • = self::E4|constructor#_#new#tearOff;
 }
-extension type E5<X extends core::Object? = dynamic>(self::E1<self::E1<X%>% /* = X% */>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%>% /* = X% */>% /* = X% */;
+extension type E5<X extends core::Object? = dynamic>(self::E1<self::E1<X%> /* = X% */> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%> /* = X% */> /* = X% */;
   constructor • = self::E5|constructor#;
   constructor tearoff • = self::E5|constructor#_#new#tearOff;
 }
@@ -299,23 +299,23 @@
 }
 static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E2|constructor#_#new#tearOff::X% it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
   return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E3|constructor#<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#::X%>% /* = self::E3|constructor#::X% */ it) → self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ {
+static extension-type-member method E3|constructor#<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ it) → self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ {
   lowered final self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E3|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#_#new#tearOff::X%>% /* = self::E3|constructor#_#new#tearOff::X% */ it) → self::E3<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */
+static extension-type-member method E3|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */ it) → self::E3<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */
   return self::E3|constructor#<self::E3|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E4|constructor#<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#::X%>% /* = self::E4|constructor#::X% */ it) → self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ {
+static extension-type-member method E4|constructor#<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ it) → self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ {
   lowered final self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E4|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#_#new#tearOff::X%>% /* = self::E4|constructor#_#new#tearOff::X% */ it) → self::E4<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */
+static extension-type-member method E4|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */ it) → self::E4<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */
   return self::E4|constructor#<self::E4|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#::X%>% /* = self::E5|constructor#::X% */>% /* = self::E5|constructor#::X% */ it) → self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ {
+static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */> /* = self::E5|constructor#::X% */ it) → self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ {
   lowered final self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#_#new#tearOff::X%>% /* = self::E5|constructor#_#new#tearOff::X% */>% /* = self::E5|constructor#_#new#tearOff::X% */ it) → self::E5<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */
+static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */> /* = self::E5|constructor#_#new#tearOff::X% */ it) → self::E5<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */
   return self::E5|constructor#<self::E5|constructor#_#new#tearOff::X%>(it);
 static extension-type-member method E6|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */> /* = self::E6|constructor#::X% */ it) → self::E6<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */ {
   lowered final self::E6<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */ #this = it;
@@ -345,5 +345,5 @@
   <X extends invalid-type>() → Null {};
   <X extends invalid-type>() → Null {};
 }
-static method _#F7#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::_#F7#new#tearOff::X%>% /* = self::_#F7#new#tearOff::X% */ it) → self::E1<self::E1<self::_#F7#new#tearOff::X%>% /* = self::_#F7#new#tearOff::X% */> /* = self::_#F7#new#tearOff::X% */
+static method _#F7#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */ it) → self::E1<self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */> /* = self::_#F7#new#tearOff::X% */
   return self::E1|constructor#<self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */>(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54097_2.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue54097_2.dart.strong.transformed.expect
index 86f6a04..99a614b 100644
--- a/pkg/front_end/testcases/extension_types/issue54097_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue54097_2.dart.strong.transformed.expect
@@ -162,9 +162,9 @@
 
 typedef F1<X extends core::Object? = dynamic> = X%;
 typedef F2<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
-typedef F3<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
-typedef F4<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
-typedef F5<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
+typedef F3<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
+typedef F4<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
+typedef F5<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
 typedef F6<X extends core::Object? = dynamic> = X%;
 typedef F7<X extends core::Object? = dynamic> = self::E1<self::E1<X%> /* = X% */> /* = X% */;
 class A1<X extends self::A1::Y% = dynamic, Y extends invalid-type = dynamic> extends core::Object {
@@ -192,17 +192,17 @@
     : super core::Object::•()
     ;
 }
-class AF13<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF13<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF13<self::AF13::X%>
     : super core::Object::•()
     ;
 }
-class AF14<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF14<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF14<self::AF14::X%>
     : super core::Object::•()
     ;
 }
-class AF15<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF15<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF15<self::AF15::X%>
     : super core::Object::•()
     ;
@@ -262,18 +262,18 @@
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
-extension type E3<X extends core::Object? = dynamic>(self::E1<X%>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<X%>% /* = X% */;
+extension type E3<X extends core::Object? = dynamic>(self::E1<X%> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<X%> /* = X% */;
   constructor • = self::E3|constructor#;
   constructor tearoff • = self::E3|constructor#_#new#tearOff;
 }
-extension type E4<X extends core::Object? = dynamic>(self::E1<X%>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<X%>% /* = X% */;
+extension type E4<X extends core::Object? = dynamic>(self::E1<X%> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<X%> /* = X% */;
   constructor • = self::E4|constructor#;
   constructor tearoff • = self::E4|constructor#_#new#tearOff;
 }
-extension type E5<X extends core::Object? = dynamic>(self::E1<self::E1<X%>% /* = X% */>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%>% /* = X% */>% /* = X% */;
+extension type E5<X extends core::Object? = dynamic>(self::E1<self::E1<X%> /* = X% */> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%> /* = X% */> /* = X% */;
   constructor • = self::E5|constructor#;
   constructor tearoff • = self::E5|constructor#_#new#tearOff;
 }
@@ -299,23 +299,23 @@
 }
 static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E2|constructor#_#new#tearOff::X% it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
   return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E3|constructor#<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#::X%>% /* = self::E3|constructor#::X% */ it) → self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ {
+static extension-type-member method E3|constructor#<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ it) → self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ {
   lowered final self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E3|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#_#new#tearOff::X%>% /* = self::E3|constructor#_#new#tearOff::X% */ it) → self::E3<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */
+static extension-type-member method E3|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */ it) → self::E3<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */
   return self::E3|constructor#<self::E3|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E4|constructor#<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#::X%>% /* = self::E4|constructor#::X% */ it) → self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ {
+static extension-type-member method E4|constructor#<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ it) → self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ {
   lowered final self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E4|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#_#new#tearOff::X%>% /* = self::E4|constructor#_#new#tearOff::X% */ it) → self::E4<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */
+static extension-type-member method E4|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */ it) → self::E4<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */
   return self::E4|constructor#<self::E4|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#::X%>% /* = self::E5|constructor#::X% */>% /* = self::E5|constructor#::X% */ it) → self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ {
+static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */> /* = self::E5|constructor#::X% */ it) → self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ {
   lowered final self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#_#new#tearOff::X%>% /* = self::E5|constructor#_#new#tearOff::X% */>% /* = self::E5|constructor#_#new#tearOff::X% */ it) → self::E5<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */
+static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */> /* = self::E5|constructor#_#new#tearOff::X% */ it) → self::E5<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */
   return self::E5|constructor#<self::E5|constructor#_#new#tearOff::X%>(it);
 static extension-type-member method E6|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */> /* = self::E6|constructor#::X% */ it) → self::E6<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */ {
   lowered final self::E6<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */ #this = it;
@@ -345,5 +345,5 @@
   <X extends invalid-type>() → Null {};
   <X extends invalid-type>() → Null {};
 }
-static method _#F7#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::_#F7#new#tearOff::X%>% /* = self::_#F7#new#tearOff::X% */ it) → self::E1<self::E1<self::_#F7#new#tearOff::X%>% /* = self::_#F7#new#tearOff::X% */> /* = self::_#F7#new#tearOff::X% */
+static method _#F7#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */ it) → self::E1<self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */> /* = self::_#F7#new#tearOff::X% */
   return self::E1|constructor#<self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */>(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.expect b/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.expect
index 86f6a04..99a614b 100644
--- a/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.expect
@@ -162,9 +162,9 @@
 
 typedef F1<X extends core::Object? = dynamic> = X%;
 typedef F2<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
-typedef F3<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
-typedef F4<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
-typedef F5<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
+typedef F3<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
+typedef F4<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
+typedef F5<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
 typedef F6<X extends core::Object? = dynamic> = X%;
 typedef F7<X extends core::Object? = dynamic> = self::E1<self::E1<X%> /* = X% */> /* = X% */;
 class A1<X extends self::A1::Y% = dynamic, Y extends invalid-type = dynamic> extends core::Object {
@@ -192,17 +192,17 @@
     : super core::Object::•()
     ;
 }
-class AF13<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF13<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF13<self::AF13::X%>
     : super core::Object::•()
     ;
 }
-class AF14<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF14<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF14<self::AF14::X%>
     : super core::Object::•()
     ;
 }
-class AF15<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF15<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF15<self::AF15::X%>
     : super core::Object::•()
     ;
@@ -262,18 +262,18 @@
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
-extension type E3<X extends core::Object? = dynamic>(self::E1<X%>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<X%>% /* = X% */;
+extension type E3<X extends core::Object? = dynamic>(self::E1<X%> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<X%> /* = X% */;
   constructor • = self::E3|constructor#;
   constructor tearoff • = self::E3|constructor#_#new#tearOff;
 }
-extension type E4<X extends core::Object? = dynamic>(self::E1<X%>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<X%>% /* = X% */;
+extension type E4<X extends core::Object? = dynamic>(self::E1<X%> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<X%> /* = X% */;
   constructor • = self::E4|constructor#;
   constructor tearoff • = self::E4|constructor#_#new#tearOff;
 }
-extension type E5<X extends core::Object? = dynamic>(self::E1<self::E1<X%>% /* = X% */>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%>% /* = X% */>% /* = X% */;
+extension type E5<X extends core::Object? = dynamic>(self::E1<self::E1<X%> /* = X% */> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%> /* = X% */> /* = X% */;
   constructor • = self::E5|constructor#;
   constructor tearoff • = self::E5|constructor#_#new#tearOff;
 }
@@ -299,23 +299,23 @@
 }
 static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E2|constructor#_#new#tearOff::X% it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
   return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E3|constructor#<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#::X%>% /* = self::E3|constructor#::X% */ it) → self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ {
+static extension-type-member method E3|constructor#<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ it) → self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ {
   lowered final self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E3|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#_#new#tearOff::X%>% /* = self::E3|constructor#_#new#tearOff::X% */ it) → self::E3<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */
+static extension-type-member method E3|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */ it) → self::E3<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */
   return self::E3|constructor#<self::E3|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E4|constructor#<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#::X%>% /* = self::E4|constructor#::X% */ it) → self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ {
+static extension-type-member method E4|constructor#<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ it) → self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ {
   lowered final self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E4|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#_#new#tearOff::X%>% /* = self::E4|constructor#_#new#tearOff::X% */ it) → self::E4<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */
+static extension-type-member method E4|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */ it) → self::E4<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */
   return self::E4|constructor#<self::E4|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#::X%>% /* = self::E5|constructor#::X% */>% /* = self::E5|constructor#::X% */ it) → self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ {
+static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */> /* = self::E5|constructor#::X% */ it) → self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ {
   lowered final self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#_#new#tearOff::X%>% /* = self::E5|constructor#_#new#tearOff::X% */>% /* = self::E5|constructor#_#new#tearOff::X% */ it) → self::E5<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */
+static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */> /* = self::E5|constructor#_#new#tearOff::X% */ it) → self::E5<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */
   return self::E5|constructor#<self::E5|constructor#_#new#tearOff::X%>(it);
 static extension-type-member method E6|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */> /* = self::E6|constructor#::X% */ it) → self::E6<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */ {
   lowered final self::E6<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */ #this = it;
@@ -345,5 +345,5 @@
   <X extends invalid-type>() → Null {};
   <X extends invalid-type>() → Null {};
 }
-static method _#F7#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::_#F7#new#tearOff::X%>% /* = self::_#F7#new#tearOff::X% */ it) → self::E1<self::E1<self::_#F7#new#tearOff::X%>% /* = self::_#F7#new#tearOff::X% */> /* = self::_#F7#new#tearOff::X% */
+static method _#F7#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */ it) → self::E1<self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */> /* = self::_#F7#new#tearOff::X% */
   return self::E1|constructor#<self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */>(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.modular.expect
index 86f6a04..99a614b 100644
--- a/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.modular.expect
@@ -162,9 +162,9 @@
 
 typedef F1<X extends core::Object? = dynamic> = X%;
 typedef F2<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
-typedef F3<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
-typedef F4<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
-typedef F5<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
+typedef F3<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
+typedef F4<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
+typedef F5<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
 typedef F6<X extends core::Object? = dynamic> = X%;
 typedef F7<X extends core::Object? = dynamic> = self::E1<self::E1<X%> /* = X% */> /* = X% */;
 class A1<X extends self::A1::Y% = dynamic, Y extends invalid-type = dynamic> extends core::Object {
@@ -192,17 +192,17 @@
     : super core::Object::•()
     ;
 }
-class AF13<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF13<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF13<self::AF13::X%>
     : super core::Object::•()
     ;
 }
-class AF14<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF14<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF14<self::AF14::X%>
     : super core::Object::•()
     ;
 }
-class AF15<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF15<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF15<self::AF15::X%>
     : super core::Object::•()
     ;
@@ -262,18 +262,18 @@
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
-extension type E3<X extends core::Object? = dynamic>(self::E1<X%>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<X%>% /* = X% */;
+extension type E3<X extends core::Object? = dynamic>(self::E1<X%> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<X%> /* = X% */;
   constructor • = self::E3|constructor#;
   constructor tearoff • = self::E3|constructor#_#new#tearOff;
 }
-extension type E4<X extends core::Object? = dynamic>(self::E1<X%>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<X%>% /* = X% */;
+extension type E4<X extends core::Object? = dynamic>(self::E1<X%> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<X%> /* = X% */;
   constructor • = self::E4|constructor#;
   constructor tearoff • = self::E4|constructor#_#new#tearOff;
 }
-extension type E5<X extends core::Object? = dynamic>(self::E1<self::E1<X%>% /* = X% */>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%>% /* = X% */>% /* = X% */;
+extension type E5<X extends core::Object? = dynamic>(self::E1<self::E1<X%> /* = X% */> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%> /* = X% */> /* = X% */;
   constructor • = self::E5|constructor#;
   constructor tearoff • = self::E5|constructor#_#new#tearOff;
 }
@@ -299,23 +299,23 @@
 }
 static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E2|constructor#_#new#tearOff::X% it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
   return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E3|constructor#<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#::X%>% /* = self::E3|constructor#::X% */ it) → self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ {
+static extension-type-member method E3|constructor#<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ it) → self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ {
   lowered final self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E3|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#_#new#tearOff::X%>% /* = self::E3|constructor#_#new#tearOff::X% */ it) → self::E3<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */
+static extension-type-member method E3|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */ it) → self::E3<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */
   return self::E3|constructor#<self::E3|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E4|constructor#<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#::X%>% /* = self::E4|constructor#::X% */ it) → self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ {
+static extension-type-member method E4|constructor#<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ it) → self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ {
   lowered final self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E4|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#_#new#tearOff::X%>% /* = self::E4|constructor#_#new#tearOff::X% */ it) → self::E4<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */
+static extension-type-member method E4|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */ it) → self::E4<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */
   return self::E4|constructor#<self::E4|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#::X%>% /* = self::E5|constructor#::X% */>% /* = self::E5|constructor#::X% */ it) → self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ {
+static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */> /* = self::E5|constructor#::X% */ it) → self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ {
   lowered final self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#_#new#tearOff::X%>% /* = self::E5|constructor#_#new#tearOff::X% */>% /* = self::E5|constructor#_#new#tearOff::X% */ it) → self::E5<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */
+static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */> /* = self::E5|constructor#_#new#tearOff::X% */ it) → self::E5<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */
   return self::E5|constructor#<self::E5|constructor#_#new#tearOff::X%>(it);
 static extension-type-member method E6|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */> /* = self::E6|constructor#::X% */ it) → self::E6<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */ {
   lowered final self::E6<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */ #this = it;
@@ -345,5 +345,5 @@
   <X extends invalid-type>() → Null {};
   <X extends invalid-type>() → Null {};
 }
-static method _#F7#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::_#F7#new#tearOff::X%>% /* = self::_#F7#new#tearOff::X% */ it) → self::E1<self::E1<self::_#F7#new#tearOff::X%>% /* = self::_#F7#new#tearOff::X% */> /* = self::_#F7#new#tearOff::X% */
+static method _#F7#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */ it) → self::E1<self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */> /* = self::_#F7#new#tearOff::X% */
   return self::E1|constructor#<self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */>(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.outline.expect
index 494a7cd..b9a06e8 100644
--- a/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.outline.expect
@@ -92,9 +92,9 @@
 
 typedef F1<X extends core::Object? = dynamic> = X%;
 typedef F2<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
-typedef F3<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
-typedef F4<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
-typedef F5<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
+typedef F3<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
+typedef F4<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
+typedef F5<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
 typedef F6<X extends core::Object? = dynamic> = X%;
 typedef F7<X extends core::Object? = dynamic> = self::E1<self::E1<X%> /* = X% */> /* = X% */;
 class A1<X extends self::A1::Y% = dynamic, Y extends invalid-type = dynamic> extends core::Object {
@@ -117,15 +117,15 @@
   synthetic constructor •() → self::AF12<self::AF12::X%>
     ;
 }
-class AF13<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF13<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF13<self::AF13::X%>
     ;
 }
-class AF14<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF14<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF14<self::AF14::X%>
     ;
 }
-class AF15<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF15<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF15<self::AF15::X%>
     ;
 }
@@ -175,18 +175,18 @@
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
-extension type E3<X extends core::Object? = dynamic>(self::E1<X%>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<X%>% /* = X% */;
+extension type E3<X extends core::Object? = dynamic>(self::E1<X%> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<X%> /* = X% */;
   constructor • = self::E3|constructor#;
   constructor tearoff • = self::E3|constructor#_#new#tearOff;
 }
-extension type E4<X extends core::Object? = dynamic>(self::E1<X%>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<X%>% /* = X% */;
+extension type E4<X extends core::Object? = dynamic>(self::E1<X%> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<X%> /* = X% */;
   constructor • = self::E4|constructor#;
   constructor tearoff • = self::E4|constructor#_#new#tearOff;
 }
-extension type E5<X extends core::Object? = dynamic>(self::E1<self::E1<X%>% /* = X% */>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%>% /* = X% */>% /* = X% */;
+extension type E5<X extends core::Object? = dynamic>(self::E1<self::E1<X%> /* = X% */> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%> /* = X% */> /* = X% */;
   constructor • = self::E5|constructor#;
   constructor tearoff • = self::E5|constructor#_#new#tearOff;
 }
@@ -208,17 +208,17 @@
   ;
 static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E2|constructor#_#new#tearOff::X% it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
   return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E3|constructor#<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#::X%>% /* = self::E3|constructor#::X% */ it) → self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */
+static extension-type-member method E3|constructor#<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ it) → self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */
   ;
-static extension-type-member method E3|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#_#new#tearOff::X%>% /* = self::E3|constructor#_#new#tearOff::X% */ it) → self::E3<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */
+static extension-type-member method E3|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */ it) → self::E3<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */
   return self::E3|constructor#<self::E3|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E4|constructor#<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#::X%>% /* = self::E4|constructor#::X% */ it) → self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */
+static extension-type-member method E4|constructor#<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ it) → self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */
   ;
-static extension-type-member method E4|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#_#new#tearOff::X%>% /* = self::E4|constructor#_#new#tearOff::X% */ it) → self::E4<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */
+static extension-type-member method E4|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */ it) → self::E4<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */
   return self::E4|constructor#<self::E4|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#::X%>% /* = self::E5|constructor#::X% */>% /* = self::E5|constructor#::X% */ it) → self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */
+static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */> /* = self::E5|constructor#::X% */ it) → self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */
   ;
-static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#_#new#tearOff::X%>% /* = self::E5|constructor#_#new#tearOff::X% */>% /* = self::E5|constructor#_#new#tearOff::X% */ it) → self::E5<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */
+static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */> /* = self::E5|constructor#_#new#tearOff::X% */ it) → self::E5<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */
   return self::E5|constructor#<self::E5|constructor#_#new#tearOff::X%>(it);
 static extension-type-member method E6|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */> /* = self::E6|constructor#::X% */ it) → self::E6<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */
   ;
@@ -230,5 +230,5 @@
   return self::E7|constructor#<self::E7|constructor#_#new#tearOff::X%>(it);
 static method test() → dynamic
   ;
-static method _#F7#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::_#F7#new#tearOff::X%>% /* = self::_#F7#new#tearOff::X% */ it) → self::E1<self::E1<self::_#F7#new#tearOff::X%>% /* = self::_#F7#new#tearOff::X% */> /* = self::_#F7#new#tearOff::X% */
+static method _#F7#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */ it) → self::E1<self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */> /* = self::_#F7#new#tearOff::X% */
   return self::E1|constructor#<self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */>(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.transformed.expect
index 86f6a04..99a614b 100644
--- a/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue54097_2.dart.weak.transformed.expect
@@ -162,9 +162,9 @@
 
 typedef F1<X extends core::Object? = dynamic> = X%;
 typedef F2<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
-typedef F3<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
-typedef F4<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
-typedef F5<X extends core::Object? = dynamic> = self::E1<X%>% /* = X% */;
+typedef F3<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
+typedef F4<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
+typedef F5<X extends core::Object? = dynamic> = self::E1<X%> /* = X% */;
 typedef F6<X extends core::Object? = dynamic> = X%;
 typedef F7<X extends core::Object? = dynamic> = self::E1<self::E1<X%> /* = X% */> /* = X% */;
 class A1<X extends self::A1::Y% = dynamic, Y extends invalid-type = dynamic> extends core::Object {
@@ -192,17 +192,17 @@
     : super core::Object::•()
     ;
 }
-class AF13<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF13<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF13<self::AF13::X%>
     : super core::Object::•()
     ;
 }
-class AF14<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF14<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF14<self::AF14::X%>
     : super core::Object::•()
     ;
 }
-class AF15<X extends invalid-type = self::E1<dynamic>% /* = dynamic */> extends core::Object {
+class AF15<X extends invalid-type = self::E1<dynamic> /* = dynamic */> extends core::Object {
   synthetic constructor •() → self::AF15<self::AF15::X%>
     : super core::Object::•()
     ;
@@ -262,18 +262,18 @@
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
-extension type E3<X extends core::Object? = dynamic>(self::E1<X%>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<X%>% /* = X% */;
+extension type E3<X extends core::Object? = dynamic>(self::E1<X%> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<X%> /* = X% */;
   constructor • = self::E3|constructor#;
   constructor tearoff • = self::E3|constructor#_#new#tearOff;
 }
-extension type E4<X extends core::Object? = dynamic>(self::E1<X%>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<X%>% /* = X% */;
+extension type E4<X extends core::Object? = dynamic>(self::E1<X%> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<X%> /* = X% */;
   constructor • = self::E4|constructor#;
   constructor tearoff • = self::E4|constructor#_#new#tearOff;
 }
-extension type E5<X extends core::Object? = dynamic>(self::E1<self::E1<X%>% /* = X% */>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%>% /* = X% */>% /* = X% */;
+extension type E5<X extends core::Object? = dynamic>(self::E1<self::E1<X%> /* = X% */> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%> /* = X% */> /* = X% */;
   constructor • = self::E5|constructor#;
   constructor tearoff • = self::E5|constructor#_#new#tearOff;
 }
@@ -299,23 +299,23 @@
 }
 static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E2|constructor#_#new#tearOff::X% it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
   return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E3|constructor#<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#::X%>% /* = self::E3|constructor#::X% */ it) → self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ {
+static extension-type-member method E3|constructor#<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ it) → self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ {
   lowered final self::E3<self::E3|constructor#::X%> /* = self::E3|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E3|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#_#new#tearOff::X%>% /* = self::E3|constructor#_#new#tearOff::X% */ it) → self::E3<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */
+static extension-type-member method E3|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */ it) → self::E3<self::E3|constructor#_#new#tearOff::X%> /* = self::E3|constructor#_#new#tearOff::X% */
   return self::E3|constructor#<self::E3|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E4|constructor#<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#::X%>% /* = self::E4|constructor#::X% */ it) → self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ {
+static extension-type-member method E4|constructor#<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ it) → self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ {
   lowered final self::E4<self::E4|constructor#::X%> /* = self::E4|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E4|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#_#new#tearOff::X%>% /* = self::E4|constructor#_#new#tearOff::X% */ it) → self::E4<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */
+static extension-type-member method E4|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */ it) → self::E4<self::E4|constructor#_#new#tearOff::X%> /* = self::E4|constructor#_#new#tearOff::X% */
   return self::E4|constructor#<self::E4|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#::X%>% /* = self::E5|constructor#::X% */>% /* = self::E5|constructor#::X% */ it) → self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ {
+static extension-type-member method E5|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */> /* = self::E5|constructor#::X% */ it) → self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ {
   lowered final self::E5<self::E5|constructor#::X%> /* = self::E5|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#_#new#tearOff::X%>% /* = self::E5|constructor#_#new#tearOff::X% */>% /* = self::E5|constructor#_#new#tearOff::X% */ it) → self::E5<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */
+static extension-type-member method E5|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */> /* = self::E5|constructor#_#new#tearOff::X% */ it) → self::E5<self::E5|constructor#_#new#tearOff::X%> /* = self::E5|constructor#_#new#tearOff::X% */
   return self::E5|constructor#<self::E5|constructor#_#new#tearOff::X%>(it);
 static extension-type-member method E6|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */> /* = self::E6|constructor#::X% */ it) → self::E6<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */ {
   lowered final self::E6<self::E6|constructor#::X%> /* = self::E6|constructor#::X% */ #this = it;
@@ -345,5 +345,5 @@
   <X extends invalid-type>() → Null {};
   <X extends invalid-type>() → Null {};
 }
-static method _#F7#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::_#F7#new#tearOff::X%>% /* = self::_#F7#new#tearOff::X% */ it) → self::E1<self::E1<self::_#F7#new#tearOff::X%>% /* = self::_#F7#new#tearOff::X% */> /* = self::_#F7#new#tearOff::X% */
+static method _#F7#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */ it) → self::E1<self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */> /* = self::_#F7#new#tearOff::X% */
   return self::E1|constructor#<self::E1<self::_#F7#new#tearOff::X%> /* = self::_#F7#new#tearOff::X% */>(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54169.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue54169.dart.strong.expect
index e67473d..4a3f378 100644
--- a/pkg/front_end/testcases/extension_types/issue54169.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue54169.dart.strong.expect
@@ -8,8 +8,8 @@
   constructor • = self::E1|constructor#;
   constructor tearoff • = self::E1|constructor#_#new#tearOff;
 }
-extension type E2<X extends core::Object? = dynamic>(self::E1<self::E1<X%>% /* = X% */>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%>% /* = X% */>% /* = X% */;
+extension type E2<X extends core::Object? = dynamic>(self::E1<self::E1<X%> /* = X% */> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%> /* = X% */> /* = X% */;
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
@@ -19,9 +19,9 @@
 }
 static extension-type-member method E1|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1|constructor#_#new#tearOff::X% it) → self::E1<self::E1|constructor#_#new#tearOff::X%> /* = self::E1|constructor#_#new#tearOff::X% */
   return self::E1|constructor#<self::E1|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E2|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#::X%>% /* = self::E2|constructor#::X% */>% /* = self::E2|constructor#::X% */ it) → self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ {
+static extension-type-member method E2|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */> /* = self::E2|constructor#::X% */ it) → self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ {
   lowered final self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#_#new#tearOff::X%>% /* = self::E2|constructor#_#new#tearOff::X% */>% /* = self::E2|constructor#_#new#tearOff::X% */ it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
+static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */> /* = self::E2|constructor#_#new#tearOff::X% */ it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
   return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X%>(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54169.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue54169.dart.strong.transformed.expect
index e67473d..4a3f378 100644
--- a/pkg/front_end/testcases/extension_types/issue54169.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue54169.dart.strong.transformed.expect
@@ -8,8 +8,8 @@
   constructor • = self::E1|constructor#;
   constructor tearoff • = self::E1|constructor#_#new#tearOff;
 }
-extension type E2<X extends core::Object? = dynamic>(self::E1<self::E1<X%>% /* = X% */>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%>% /* = X% */>% /* = X% */;
+extension type E2<X extends core::Object? = dynamic>(self::E1<self::E1<X%> /* = X% */> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%> /* = X% */> /* = X% */;
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
@@ -19,9 +19,9 @@
 }
 static extension-type-member method E1|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1|constructor#_#new#tearOff::X% it) → self::E1<self::E1|constructor#_#new#tearOff::X%> /* = self::E1|constructor#_#new#tearOff::X% */
   return self::E1|constructor#<self::E1|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E2|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#::X%>% /* = self::E2|constructor#::X% */>% /* = self::E2|constructor#::X% */ it) → self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ {
+static extension-type-member method E2|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */> /* = self::E2|constructor#::X% */ it) → self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ {
   lowered final self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#_#new#tearOff::X%>% /* = self::E2|constructor#_#new#tearOff::X% */>% /* = self::E2|constructor#_#new#tearOff::X% */ it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
+static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */> /* = self::E2|constructor#_#new#tearOff::X% */ it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
   return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X%>(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54169.dart.weak.expect b/pkg/front_end/testcases/extension_types/issue54169.dart.weak.expect
index e67473d..4a3f378 100644
--- a/pkg/front_end/testcases/extension_types/issue54169.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/issue54169.dart.weak.expect
@@ -8,8 +8,8 @@
   constructor • = self::E1|constructor#;
   constructor tearoff • = self::E1|constructor#_#new#tearOff;
 }
-extension type E2<X extends core::Object? = dynamic>(self::E1<self::E1<X%>% /* = X% */>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%>% /* = X% */>% /* = X% */;
+extension type E2<X extends core::Object? = dynamic>(self::E1<self::E1<X%> /* = X% */> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%> /* = X% */> /* = X% */;
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
@@ -19,9 +19,9 @@
 }
 static extension-type-member method E1|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1|constructor#_#new#tearOff::X% it) → self::E1<self::E1|constructor#_#new#tearOff::X%> /* = self::E1|constructor#_#new#tearOff::X% */
   return self::E1|constructor#<self::E1|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E2|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#::X%>% /* = self::E2|constructor#::X% */>% /* = self::E2|constructor#::X% */ it) → self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ {
+static extension-type-member method E2|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */> /* = self::E2|constructor#::X% */ it) → self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ {
   lowered final self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#_#new#tearOff::X%>% /* = self::E2|constructor#_#new#tearOff::X% */>% /* = self::E2|constructor#_#new#tearOff::X% */ it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
+static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */> /* = self::E2|constructor#_#new#tearOff::X% */ it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
   return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X%>(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54169.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/issue54169.dart.weak.modular.expect
index e67473d..4a3f378 100644
--- a/pkg/front_end/testcases/extension_types/issue54169.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue54169.dart.weak.modular.expect
@@ -8,8 +8,8 @@
   constructor • = self::E1|constructor#;
   constructor tearoff • = self::E1|constructor#_#new#tearOff;
 }
-extension type E2<X extends core::Object? = dynamic>(self::E1<self::E1<X%>% /* = X% */>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%>% /* = X% */>% /* = X% */;
+extension type E2<X extends core::Object? = dynamic>(self::E1<self::E1<X%> /* = X% */> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%> /* = X% */> /* = X% */;
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
@@ -19,9 +19,9 @@
 }
 static extension-type-member method E1|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1|constructor#_#new#tearOff::X% it) → self::E1<self::E1|constructor#_#new#tearOff::X%> /* = self::E1|constructor#_#new#tearOff::X% */
   return self::E1|constructor#<self::E1|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E2|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#::X%>% /* = self::E2|constructor#::X% */>% /* = self::E2|constructor#::X% */ it) → self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ {
+static extension-type-member method E2|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */> /* = self::E2|constructor#::X% */ it) → self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ {
   lowered final self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#_#new#tearOff::X%>% /* = self::E2|constructor#_#new#tearOff::X% */>% /* = self::E2|constructor#_#new#tearOff::X% */ it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
+static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */> /* = self::E2|constructor#_#new#tearOff::X% */ it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
   return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X%>(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54169.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/issue54169.dart.weak.outline.expect
index 357409c..9a6a9c6 100644
--- a/pkg/front_end/testcases/extension_types/issue54169.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/issue54169.dart.weak.outline.expect
@@ -8,8 +8,8 @@
   constructor • = self::E1|constructor#;
   constructor tearoff • = self::E1|constructor#_#new#tearOff;
 }
-extension type E2<X extends core::Object? = dynamic>(self::E1<self::E1<X%>% /* = X% */>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%>% /* = X% */>% /* = X% */;
+extension type E2<X extends core::Object? = dynamic>(self::E1<self::E1<X%> /* = X% */> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%> /* = X% */> /* = X% */;
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
@@ -17,7 +17,7 @@
   ;
 static extension-type-member method E1|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1|constructor#_#new#tearOff::X% it) → self::E1<self::E1|constructor#_#new#tearOff::X%> /* = self::E1|constructor#_#new#tearOff::X% */
   return self::E1|constructor#<self::E1|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E2|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#::X%>% /* = self::E2|constructor#::X% */>% /* = self::E2|constructor#::X% */ it) → self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */
+static extension-type-member method E2|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */> /* = self::E2|constructor#::X% */ it) → self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */
   ;
-static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#_#new#tearOff::X%>% /* = self::E2|constructor#_#new#tearOff::X% */>% /* = self::E2|constructor#_#new#tearOff::X% */ it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
+static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */> /* = self::E2|constructor#_#new#tearOff::X% */ it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
   return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X%>(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54169.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/issue54169.dart.weak.transformed.expect
index e67473d..4a3f378 100644
--- a/pkg/front_end/testcases/extension_types/issue54169.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue54169.dart.weak.transformed.expect
@@ -8,8 +8,8 @@
   constructor • = self::E1|constructor#;
   constructor tearoff • = self::E1|constructor#_#new#tearOff;
 }
-extension type E2<X extends core::Object? = dynamic>(self::E1<self::E1<X%>% /* = X% */>% /* = X% */ it) {
-  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%>% /* = X% */>% /* = X% */;
+extension type E2<X extends core::Object? = dynamic>(self::E1<self::E1<X%> /* = X% */> /* = X% */ it) {
+  abstract extension-type-member representation-field get it() → self::E1<self::E1<X%> /* = X% */> /* = X% */;
   constructor • = self::E2|constructor#;
   constructor tearoff • = self::E2|constructor#_#new#tearOff;
 }
@@ -19,9 +19,9 @@
 }
 static extension-type-member method E1|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1|constructor#_#new#tearOff::X% it) → self::E1<self::E1|constructor#_#new#tearOff::X%> /* = self::E1|constructor#_#new#tearOff::X% */
   return self::E1|constructor#<self::E1|constructor#_#new#tearOff::X%>(it);
-static extension-type-member method E2|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#::X%>% /* = self::E2|constructor#::X% */>% /* = self::E2|constructor#::X% */ it) → self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ {
+static extension-type-member method E2|constructor#<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */> /* = self::E2|constructor#::X% */ it) → self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ {
   lowered final self::E2<self::E2|constructor#::X%> /* = self::E2|constructor#::X% */ #this = it;
   return #this;
 }
-static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#_#new#tearOff::X%>% /* = self::E2|constructor#_#new#tearOff::X% */>% /* = self::E2|constructor#_#new#tearOff::X% */ it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
+static extension-type-member method E2|constructor#_#new#tearOff<X extends core::Object? = dynamic>(self::E1<self::E1<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */> /* = self::E2|constructor#_#new#tearOff::X% */ it) → self::E2<self::E2|constructor#_#new#tearOff::X%> /* = self::E2|constructor#_#new#tearOff::X% */
   return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X%>(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54269.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue54269.dart.strong.expect
index 9758478..cd512bb 100644
--- a/pkg/front_end/testcases/extension_types/issue54269.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue54269.dart.strong.expect
@@ -14,13 +14,13 @@
 
 typedef F<X extends core::Object? = dynamic> = X%;
 extension type E(invalid-type it) {
-  abstract extension-type-member representation-field get it() → self::E% /* = invalid-type */;
+  abstract extension-type-member representation-field get it() → self::E /* = invalid-type */;
   constructor • = self::E|constructor#;
   constructor tearoff • = self::E|constructor#_#new#tearOff;
 }
-static extension-type-member method E|constructor#(self::E% /* = invalid-type */ it) → self::E /* = invalid-type */ {
+static extension-type-member method E|constructor#(self::E /* = invalid-type */ it) → self::E /* = invalid-type */ {
   lowered final self::E /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E|constructor#_#new#tearOff(self::E% /* = invalid-type */ it) → self::E /* = invalid-type */
+static extension-type-member method E|constructor#_#new#tearOff(self::E /* = invalid-type */ it) → self::E /* = invalid-type */
   return self::E|constructor#(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54269.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue54269.dart.strong.transformed.expect
index 9758478..cd512bb 100644
--- a/pkg/front_end/testcases/extension_types/issue54269.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue54269.dart.strong.transformed.expect
@@ -14,13 +14,13 @@
 
 typedef F<X extends core::Object? = dynamic> = X%;
 extension type E(invalid-type it) {
-  abstract extension-type-member representation-field get it() → self::E% /* = invalid-type */;
+  abstract extension-type-member representation-field get it() → self::E /* = invalid-type */;
   constructor • = self::E|constructor#;
   constructor tearoff • = self::E|constructor#_#new#tearOff;
 }
-static extension-type-member method E|constructor#(self::E% /* = invalid-type */ it) → self::E /* = invalid-type */ {
+static extension-type-member method E|constructor#(self::E /* = invalid-type */ it) → self::E /* = invalid-type */ {
   lowered final self::E /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E|constructor#_#new#tearOff(self::E% /* = invalid-type */ it) → self::E /* = invalid-type */
+static extension-type-member method E|constructor#_#new#tearOff(self::E /* = invalid-type */ it) → self::E /* = invalid-type */
   return self::E|constructor#(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54269.dart.weak.expect b/pkg/front_end/testcases/extension_types/issue54269.dart.weak.expect
index 9758478..cd512bb 100644
--- a/pkg/front_end/testcases/extension_types/issue54269.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/issue54269.dart.weak.expect
@@ -14,13 +14,13 @@
 
 typedef F<X extends core::Object? = dynamic> = X%;
 extension type E(invalid-type it) {
-  abstract extension-type-member representation-field get it() → self::E% /* = invalid-type */;
+  abstract extension-type-member representation-field get it() → self::E /* = invalid-type */;
   constructor • = self::E|constructor#;
   constructor tearoff • = self::E|constructor#_#new#tearOff;
 }
-static extension-type-member method E|constructor#(self::E% /* = invalid-type */ it) → self::E /* = invalid-type */ {
+static extension-type-member method E|constructor#(self::E /* = invalid-type */ it) → self::E /* = invalid-type */ {
   lowered final self::E /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E|constructor#_#new#tearOff(self::E% /* = invalid-type */ it) → self::E /* = invalid-type */
+static extension-type-member method E|constructor#_#new#tearOff(self::E /* = invalid-type */ it) → self::E /* = invalid-type */
   return self::E|constructor#(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54269.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/issue54269.dart.weak.modular.expect
index 9758478..cd512bb 100644
--- a/pkg/front_end/testcases/extension_types/issue54269.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue54269.dart.weak.modular.expect
@@ -14,13 +14,13 @@
 
 typedef F<X extends core::Object? = dynamic> = X%;
 extension type E(invalid-type it) {
-  abstract extension-type-member representation-field get it() → self::E% /* = invalid-type */;
+  abstract extension-type-member representation-field get it() → self::E /* = invalid-type */;
   constructor • = self::E|constructor#;
   constructor tearoff • = self::E|constructor#_#new#tearOff;
 }
-static extension-type-member method E|constructor#(self::E% /* = invalid-type */ it) → self::E /* = invalid-type */ {
+static extension-type-member method E|constructor#(self::E /* = invalid-type */ it) → self::E /* = invalid-type */ {
   lowered final self::E /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E|constructor#_#new#tearOff(self::E% /* = invalid-type */ it) → self::E /* = invalid-type */
+static extension-type-member method E|constructor#_#new#tearOff(self::E /* = invalid-type */ it) → self::E /* = invalid-type */
   return self::E|constructor#(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54269.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/issue54269.dart.weak.outline.expect
index 2e40434..516b955 100644
--- a/pkg/front_end/testcases/extension_types/issue54269.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/issue54269.dart.weak.outline.expect
@@ -14,11 +14,11 @@
 
 typedef F<X extends core::Object? = dynamic> = X%;
 extension type E(invalid-type it) {
-  abstract extension-type-member representation-field get it() → self::E% /* = invalid-type */;
+  abstract extension-type-member representation-field get it() → self::E /* = invalid-type */;
   constructor • = self::E|constructor#;
   constructor tearoff • = self::E|constructor#_#new#tearOff;
 }
-static extension-type-member method E|constructor#(self::E% /* = invalid-type */ it) → self::E /* = invalid-type */
+static extension-type-member method E|constructor#(self::E /* = invalid-type */ it) → self::E /* = invalid-type */
   ;
-static extension-type-member method E|constructor#_#new#tearOff(self::E% /* = invalid-type */ it) → self::E /* = invalid-type */
+static extension-type-member method E|constructor#_#new#tearOff(self::E /* = invalid-type */ it) → self::E /* = invalid-type */
   return self::E|constructor#(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54269.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/issue54269.dart.weak.transformed.expect
index 9758478..cd512bb 100644
--- a/pkg/front_end/testcases/extension_types/issue54269.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue54269.dart.weak.transformed.expect
@@ -14,13 +14,13 @@
 
 typedef F<X extends core::Object? = dynamic> = X%;
 extension type E(invalid-type it) {
-  abstract extension-type-member representation-field get it() → self::E% /* = invalid-type */;
+  abstract extension-type-member representation-field get it() → self::E /* = invalid-type */;
   constructor • = self::E|constructor#;
   constructor tearoff • = self::E|constructor#_#new#tearOff;
 }
-static extension-type-member method E|constructor#(self::E% /* = invalid-type */ it) → self::E /* = invalid-type */ {
+static extension-type-member method E|constructor#(self::E /* = invalid-type */ it) → self::E /* = invalid-type */ {
   lowered final self::E /* = invalid-type */ #this = it;
   return #this;
 }
-static extension-type-member method E|constructor#_#new#tearOff(self::E% /* = invalid-type */ it) → self::E /* = invalid-type */
+static extension-type-member method E|constructor#_#new#tearOff(self::E /* = invalid-type */ it) → self::E /* = invalid-type */
   return self::E|constructor#(it);
diff --git a/pkg/front_end/testcases/extension_types/issue54649_2.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue54649_2.dart.strong.expect
index deabe44..aaf63d4 100644
--- a/pkg/front_end/testcases/extension_types/issue54649_2.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue54649_2.dart.strong.expect
@@ -58,7 +58,7 @@
   if(x is self::test2::Y%) {
     await invalid-expression "pkg/front_end/testcases/extension_types/issue54649_2.dart:25:11: Error: The 'await' expression can't be used for an expression with an extension type that is not a subtype of 'Future'.
     await x; // Error.
-          ^" in x{self::test2::X% & self::test2::Y% /* '%' & '%' = '%' */} /* runtimeCheckType= asy::Future<self::E1% /* = asy::Future<core::int> */> */ ;
+          ^" in x{self::test2::X% & self::test2::Y% /* '%' & '%' = '%' */} /* runtimeCheckType= asy::Future<self::E1 /* = asy::Future<core::int> */> */ ;
   }
 }
 static method test3<X extends self::E3? /* = asy::Future<core::int>? */, Y extends self::E3 /* = asy::Future<core::int> */>(self::test3::X% x) → dynamic async /* emittedValueType= dynamic */ {
diff --git a/pkg/front_end/testcases/extension_types/issue54649_2.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue54649_2.dart.strong.transformed.expect
index deabe44..aaf63d4 100644
--- a/pkg/front_end/testcases/extension_types/issue54649_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue54649_2.dart.strong.transformed.expect
@@ -58,7 +58,7 @@
   if(x is self::test2::Y%) {
     await invalid-expression "pkg/front_end/testcases/extension_types/issue54649_2.dart:25:11: Error: The 'await' expression can't be used for an expression with an extension type that is not a subtype of 'Future'.
     await x; // Error.
-          ^" in x{self::test2::X% & self::test2::Y% /* '%' & '%' = '%' */} /* runtimeCheckType= asy::Future<self::E1% /* = asy::Future<core::int> */> */ ;
+          ^" in x{self::test2::X% & self::test2::Y% /* '%' & '%' = '%' */} /* runtimeCheckType= asy::Future<self::E1 /* = asy::Future<core::int> */> */ ;
   }
 }
 static method test3<X extends self::E3? /* = asy::Future<core::int>? */, Y extends self::E3 /* = asy::Future<core::int> */>(self::test3::X% x) → dynamic async /* emittedValueType= dynamic */ {
diff --git a/pkg/front_end/testcases/extension_types/issue54649_2.dart.weak.expect b/pkg/front_end/testcases/extension_types/issue54649_2.dart.weak.expect
index deabe44..aaf63d4 100644
--- a/pkg/front_end/testcases/extension_types/issue54649_2.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/issue54649_2.dart.weak.expect
@@ -58,7 +58,7 @@
   if(x is self::test2::Y%) {
     await invalid-expression "pkg/front_end/testcases/extension_types/issue54649_2.dart:25:11: Error: The 'await' expression can't be used for an expression with an extension type that is not a subtype of 'Future'.
     await x; // Error.
-          ^" in x{self::test2::X% & self::test2::Y% /* '%' & '%' = '%' */} /* runtimeCheckType= asy::Future<self::E1% /* = asy::Future<core::int> */> */ ;
+          ^" in x{self::test2::X% & self::test2::Y% /* '%' & '%' = '%' */} /* runtimeCheckType= asy::Future<self::E1 /* = asy::Future<core::int> */> */ ;
   }
 }
 static method test3<X extends self::E3? /* = asy::Future<core::int>? */, Y extends self::E3 /* = asy::Future<core::int> */>(self::test3::X% x) → dynamic async /* emittedValueType= dynamic */ {
diff --git a/pkg/front_end/testcases/extension_types/issue54649_2.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/issue54649_2.dart.weak.modular.expect
index deabe44..aaf63d4 100644
--- a/pkg/front_end/testcases/extension_types/issue54649_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue54649_2.dart.weak.modular.expect
@@ -58,7 +58,7 @@
   if(x is self::test2::Y%) {
     await invalid-expression "pkg/front_end/testcases/extension_types/issue54649_2.dart:25:11: Error: The 'await' expression can't be used for an expression with an extension type that is not a subtype of 'Future'.
     await x; // Error.
-          ^" in x{self::test2::X% & self::test2::Y% /* '%' & '%' = '%' */} /* runtimeCheckType= asy::Future<self::E1% /* = asy::Future<core::int> */> */ ;
+          ^" in x{self::test2::X% & self::test2::Y% /* '%' & '%' = '%' */} /* runtimeCheckType= asy::Future<self::E1 /* = asy::Future<core::int> */> */ ;
   }
 }
 static method test3<X extends self::E3? /* = asy::Future<core::int>? */, Y extends self::E3 /* = asy::Future<core::int> */>(self::test3::X% x) → dynamic async /* emittedValueType= dynamic */ {
diff --git a/pkg/front_end/testcases/extension_types/issue54649_2.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/issue54649_2.dart.weak.transformed.expect
index deabe44..aaf63d4 100644
--- a/pkg/front_end/testcases/extension_types/issue54649_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue54649_2.dart.weak.transformed.expect
@@ -58,7 +58,7 @@
   if(x is self::test2::Y%) {
     await invalid-expression "pkg/front_end/testcases/extension_types/issue54649_2.dart:25:11: Error: The 'await' expression can't be used for an expression with an extension type that is not a subtype of 'Future'.
     await x; // Error.
-          ^" in x{self::test2::X% & self::test2::Y% /* '%' & '%' = '%' */} /* runtimeCheckType= asy::Future<self::E1% /* = asy::Future<core::int> */> */ ;
+          ^" in x{self::test2::X% & self::test2::Y% /* '%' & '%' = '%' */} /* runtimeCheckType= asy::Future<self::E1 /* = asy::Future<core::int> */> */ ;
   }
 }
 static method test3<X extends self::E3? /* = asy::Future<core::int>? */, Y extends self::E3 /* = asy::Future<core::int> */>(self::test3::X% x) → dynamic async /* emittedValueType= dynamic */ {
diff --git a/pkg/front_end/testcases/general/implicit_new2.dart.strong.expect b/pkg/front_end/testcases/general/implicit_new2.dart.strong.expect
index 589ead7..57547ad 100644
--- a/pkg/front_end/testcases/general/implicit_new2.dart.strong.expect
+++ b/pkg/front_end/testcases/general/implicit_new2.dart.strong.expect
@@ -27,7 +27,7 @@
   return 42;
 }
 static method test6() → FutureOr<FutureOr<void>> {
-  return asy::Future::value<FutureOr<void>?>(42);
+  return asy::Future::value<FutureOr<void>>(42);
 }
 static method test() → FutureOr<FutureOr<void>> {
   return asy::Future::value<asy::Future<asy::Future<void>>>(asy::Future::value<asy::Future<void>>(asy::Future::value<void>(null)));
diff --git a/pkg/front_end/testcases/general/implicit_new2.dart.strong.transformed.expect b/pkg/front_end/testcases/general/implicit_new2.dart.strong.transformed.expect
index d4bdea6..692dee5 100644
--- a/pkg/front_end/testcases/general/implicit_new2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_new2.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
   return 42;
 }
 static method test6() → FutureOr<FutureOr<void>> {
-  return asy::Future::value<FutureOr<void>?>(42);
+  return asy::Future::value<FutureOr<void>>(42);
 }
 static method test() → FutureOr<FutureOr<void>> {
   return asy::Future::value<asy::Future<asy::Future<void>>>(asy::Future::value<asy::Future<void>>(asy::Future::value<void>(null)));
diff --git a/pkg/front_end/testcases/general/implicit_new2.dart.weak.expect b/pkg/front_end/testcases/general/implicit_new2.dart.weak.expect
index 589ead7..57547ad 100644
--- a/pkg/front_end/testcases/general/implicit_new2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_new2.dart.weak.expect
@@ -27,7 +27,7 @@
   return 42;
 }
 static method test6() → FutureOr<FutureOr<void>> {
-  return asy::Future::value<FutureOr<void>?>(42);
+  return asy::Future::value<FutureOr<void>>(42);
 }
 static method test() → FutureOr<FutureOr<void>> {
   return asy::Future::value<asy::Future<asy::Future<void>>>(asy::Future::value<asy::Future<void>>(asy::Future::value<void>(null)));
diff --git a/pkg/front_end/testcases/general/implicit_new2.dart.weak.modular.expect b/pkg/front_end/testcases/general/implicit_new2.dart.weak.modular.expect
index 589ead7..57547ad 100644
--- a/pkg/front_end/testcases/general/implicit_new2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/implicit_new2.dart.weak.modular.expect
@@ -27,7 +27,7 @@
   return 42;
 }
 static method test6() → FutureOr<FutureOr<void>> {
-  return asy::Future::value<FutureOr<void>?>(42);
+  return asy::Future::value<FutureOr<void>>(42);
 }
 static method test() → FutureOr<FutureOr<void>> {
   return asy::Future::value<asy::Future<asy::Future<void>>>(asy::Future::value<asy::Future<void>>(asy::Future::value<void>(null)));
diff --git a/pkg/front_end/testcases/general/implicit_new2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_new2.dart.weak.transformed.expect
index d4bdea6..692dee5 100644
--- a/pkg/front_end/testcases/general/implicit_new2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_new2.dart.weak.transformed.expect
@@ -27,7 +27,7 @@
   return 42;
 }
 static method test6() → FutureOr<FutureOr<void>> {
-  return asy::Future::value<FutureOr<void>?>(42);
+  return asy::Future::value<FutureOr<void>>(42);
 }
 static method test() → FutureOr<FutureOr<void>> {
   return asy::Future::value<asy::Future<asy::Future<void>>>(asy::Future::value<asy::Future<void>>(asy::Future::value<void>(null)));
diff --git a/pkg/front_end/testcases/nnbd/issue48631_2.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue48631_2.dart.strong.expect
index 11335c3..216904e 100644
--- a/pkg/front_end/testcases/nnbd/issue48631_2.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue48631_2.dart.strong.expect
@@ -18,8 +18,8 @@
     ;
 }
 class C<Y extends core::Object? = dynamic> extends core::Object {
-  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar;
-  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar) → self::C<self::C::Y%>
+  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>bar;
+  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>bar) → self::C<self::C::Y%>
     : self::C::bar = bar, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue48631_2.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue48631_2.dart.strong.transformed.expect
index 11335c3..216904e 100644
--- a/pkg/front_end/testcases/nnbd/issue48631_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue48631_2.dart.strong.transformed.expect
@@ -18,8 +18,8 @@
     ;
 }
 class C<Y extends core::Object? = dynamic> extends core::Object {
-  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar;
-  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar) → self::C<self::C::Y%>
+  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>bar;
+  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>bar) → self::C<self::C::Y%>
     : self::C::bar = bar, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.expect
index 11335c3..216904e 100644
--- a/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.expect
@@ -18,8 +18,8 @@
     ;
 }
 class C<Y extends core::Object? = dynamic> extends core::Object {
-  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar;
-  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar) → self::C<self::C::Y%>
+  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>bar;
+  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>bar) → self::C<self::C::Y%>
     : self::C::bar = bar, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.modular.expect
index 11335c3..216904e 100644
--- a/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.modular.expect
@@ -18,8 +18,8 @@
     ;
 }
 class C<Y extends core::Object? = dynamic> extends core::Object {
-  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar;
-  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar) → self::C<self::C::Y%>
+  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>bar;
+  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>bar) → self::C<self::C::Y%>
     : self::C::bar = bar, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.outline.expect
index 49a5696..e1ce54f 100644
--- a/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.outline.expect
@@ -15,8 +15,8 @@
     ;
 }
 class C<Y extends core::Object? = dynamic> extends core::Object {
-  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar;
-  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar) → self::C<self::C::Y%>
+  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>bar;
+  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>bar) → self::C<self::C::Y%>
     ;
 }
 abstract class D<W extends core::Object? = dynamic> extends core::Object implements self::A {
diff --git a/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.transformed.expect
index 11335c3..216904e 100644
--- a/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue48631_2.dart.weak.transformed.expect
@@ -18,8 +18,8 @@
     ;
 }
 class C<Y extends core::Object? = dynamic> extends core::Object {
-  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar;
-  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar) → self::C<self::C::Y%>
+  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>bar;
+  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>bar) → self::C<self::C::Y%>
     : self::C::bar = bar, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue48768.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue48768.dart.strong.expect
index cd66026..14c85df 100644
--- a/pkg/front_end/testcases/nnbd/issue48768.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue48768.dart.strong.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method foo(dynamic y) → dynamic async /* emittedValueType= dynamic */ {
-  dynamic a = await(<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>?>, FutureOr<dynamic>?) → FutureOr<dynamic>?} /* runtimeCheckType= dart.async::Future<dynamic> */ ;
+  dynamic a = await(<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>>, FutureOr<dynamic>) → FutureOr<dynamic>} /* runtimeCheckType= dart.async::Future<dynamic> */ ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue48768.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue48768.dart.strong.transformed.expect
index cd66026..14c85df 100644
--- a/pkg/front_end/testcases/nnbd/issue48768.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue48768.dart.strong.transformed.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method foo(dynamic y) → dynamic async /* emittedValueType= dynamic */ {
-  dynamic a = await(<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>?>, FutureOr<dynamic>?) → FutureOr<dynamic>?} /* runtimeCheckType= dart.async::Future<dynamic> */ ;
+  dynamic a = await(<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>>, FutureOr<dynamic>) → FutureOr<dynamic>} /* runtimeCheckType= dart.async::Future<dynamic> */ ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue48768.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue48768.dart.weak.expect
index cd66026..14c85df 100644
--- a/pkg/front_end/testcases/nnbd/issue48768.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue48768.dart.weak.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method foo(dynamic y) → dynamic async /* emittedValueType= dynamic */ {
-  dynamic a = await(<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>?>, FutureOr<dynamic>?) → FutureOr<dynamic>?} /* runtimeCheckType= dart.async::Future<dynamic> */ ;
+  dynamic a = await(<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>>, FutureOr<dynamic>) → FutureOr<dynamic>} /* runtimeCheckType= dart.async::Future<dynamic> */ ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue48768.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/issue48768.dart.weak.modular.expect
index cd66026..14c85df 100644
--- a/pkg/front_end/testcases/nnbd/issue48768.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue48768.dart.weak.modular.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method foo(dynamic y) → dynamic async /* emittedValueType= dynamic */ {
-  dynamic a = await(<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>?>, FutureOr<dynamic>?) → FutureOr<dynamic>?} /* runtimeCheckType= dart.async::Future<dynamic> */ ;
+  dynamic a = await(<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>>, FutureOr<dynamic>) → FutureOr<dynamic>} /* runtimeCheckType= dart.async::Future<dynamic> */ ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue48768.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue48768.dart.weak.transformed.expect
index cd66026..14c85df 100644
--- a/pkg/front_end/testcases/nnbd/issue48768.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue48768.dart.weak.transformed.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method foo(dynamic y) → dynamic async /* emittedValueType= dynamic */ {
-  dynamic a = await(<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>?>, FutureOr<dynamic>?) → FutureOr<dynamic>?} /* runtimeCheckType= dart.async::Future<dynamic> */ ;
+  dynamic a = await(<X extends core::Object? = dynamic>(() → core::List<X%> x, X% x2) → X% => x2)<FutureOr<dynamic>>(() → core::List<FutureOr<dynamic>> => y as{TypeError,ForDynamic} core::List<FutureOr<dynamic>>, throw 0){(() → core::List<FutureOr<dynamic>>, FutureOr<dynamic>) → FutureOr<dynamic>} /* runtimeCheckType= dart.async::Future<dynamic> */ ;
 }
 static method main() → dynamic {}
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index d73420c..117e662 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -12367,7 +12367,8 @@
     DartType resolvedTypeParameterType = right.nonTypeVariableBound;
     return resolvedTypeParameterType.withDeclaredNullability(
         combineNullabilitiesForSubstitution(
-            resolvedTypeParameterType.nullability, declaredNullability));
+            resolvedTypeParameterType.declaredNullability,
+            declaredNullability));
   }
 
   @override
@@ -12659,7 +12660,8 @@
     DartType resolvedTypeParameterType = bound.nonTypeVariableBound;
     return resolvedTypeParameterType.withDeclaredNullability(
         combineNullabilitiesForSubstitution(
-            resolvedTypeParameterType.nullability, declaredNullability));
+            resolvedTypeParameterType.declaredNullability,
+            declaredNullability));
   }
 
   @override
diff --git a/pkg/kernel/lib/src/replacement_visitor.dart b/pkg/kernel/lib/src/replacement_visitor.dart
index 3b84b4a..64abcf6 100644
--- a/pkg/kernel/lib/src/replacement_visitor.dart
+++ b/pkg/kernel/lib/src/replacement_visitor.dart
@@ -360,7 +360,7 @@
     } else {
       return new ExtensionType(
           node.extensionTypeDeclaration,
-          newNullability ?? node.nullability,
+          newNullability ?? node.declaredNullability,
           newTypeArguments ?? node.typeArguments);
     }
   }
diff --git a/pkg/kernel/lib/src/types.dart b/pkg/kernel/lib/src/types.dart
index bf02ede..d8eab43 100644
--- a/pkg/kernel/lib/src/types.dart
+++ b/pkg/kernel/lib/src/types.dart
@@ -1211,12 +1211,16 @@
     return types
         // Rule 11.
         .performNullabilityAwareSubtypeCheck(
-            s, t.typeArgument.withDeclaredNullability(t.nullability))
+            s,
+            t.typeArgument.withDeclaredNullability(
+                combineNullabilitiesForSubstitution(
+                    t.typeArgument.declaredNullability, t.declaredNullability)))
         // Rule 13.
         .orSubtypeCheckFor(
             s.parameter.bound.withDeclaredNullability(
                 combineNullabilitiesForSubstitution(
-                    s.parameter.bound.nullability, s.nullability)),
+                    s.parameter.bound.declaredNullability,
+                    s.declaredNullability)),
             t,
             types)
         // Rule 10.
diff --git a/pkg/kernel/lib/type_algebra.dart b/pkg/kernel/lib/type_algebra.dart
index 39fbe33..d091022 100644
--- a/pkg/kernel/lib/type_algebra.dart
+++ b/pkg/kernel/lib/type_algebra.dart
@@ -1282,7 +1282,7 @@
     if (replacement != null) {
       return replacement.withDeclaredNullability(
           combineNullabilitiesForSubstitution(
-              replacement.nullability, node.nullability));
+              replacement.declaredNullability, node.nullability));
     }
     return node;
   }
@@ -1304,7 +1304,7 @@
     if (replacement == null) return node;
     return replacement.withDeclaredNullability(
         combineNullabilitiesForSubstitution(
-            node.nullability, replacement.nullability));
+            node.declaredNullability, replacement.nullability));
   }
 
   @override
@@ -1564,7 +1564,7 @@
     if (replacement != null) {
       return replacement.withDeclaredNullability(
           combineNullabilitiesForSubstitution(
-              replacement.nullability, node.nullability));
+              replacement.declaredNullability, node.nullability));
     }
     return null;
   }
diff --git a/pkg/kernel/lib/type_environment.dart b/pkg/kernel/lib/type_environment.dart
index 5ec517a..84424d5 100644
--- a/pkg/kernel/lib/type_environment.dart
+++ b/pkg/kernel/lib/type_environment.dart
@@ -82,12 +82,6 @@
         coreTypes.futureClass, nullability, <DartType>[type]);
   }
 
-  DartType _withDeclaredNullability(DartType type, Nullability nullability) {
-    if (type is NullType) return type;
-    return type.withDeclaredNullability(
-        uniteNullabilities(type.declaredNullability, nullability));
-  }
-
   DartType? _futureTypeOf(DartType t) {
     // We say that S is the "future type of a type" T in the following cases,
     // using the first applicable case:
@@ -106,7 +100,7 @@
       if (futureType != null) {
         // TODO(johnniwinther): The two implementations are inconsistent wrt.
         //  how [isNonNullableByDefault] is treated.
-        return futureType.withDeclaredNullability(resolved.nullability);
+        return futureType.withDeclaredNullability(resolved.declaredNullability);
       }
     } else if (resolved is FutureOrType) {
       return resolved;
@@ -129,33 +123,29 @@
       DartType bound = t.right;
       DartType? futureType = _futureTypeOf(bound);
       if (futureType != null) {
-        DartType flattenedFutureType = flatten(futureType);
-        return _withDeclaredNullability(flattenedFutureType,
-            uniteNullabilities(t.nullability, flattenedFutureType.nullability));
+        return flatten(futureType);
       } else {
-        DartType flattenedFutureType = flatten(t.left);
-        return _withDeclaredNullability(flattenedFutureType,
-            uniteNullabilities(t.nullability, flattenedFutureType.nullability));
+        return flatten(t.left);
       }
     } else {
       DartType? futureType = _futureTypeOf(t);
       if (futureType is InterfaceType) {
         assert(futureType.classNode == coreTypes.futureClass);
         DartType typeArgument = futureType.typeArguments.single;
-        return _withDeclaredNullability(
-            typeArgument,
-            uniteNullabilities(
-                t.nullability,
-                uniteNullabilities(
-                    futureType.nullability, typeArgument.nullability)));
+        return typeArgument.withDeclaredNullability(
+            combineNullabilitiesForSubstitution(
+                combineNullabilitiesForSubstitution(
+                    typeArgument.declaredNullability,
+                    futureType.declaredNullability),
+                t.declaredNullability));
       } else if (futureType is FutureOrType) {
         DartType typeArgument = futureType.typeArgument;
-        return _withDeclaredNullability(
-            typeArgument,
-            uniteNullabilities(
-                t.nullability,
-                uniteNullabilities(
-                    futureType.nullability, typeArgument.nullability)));
+        return typeArgument.withDeclaredNullability(
+            combineNullabilitiesForSubstitution(
+                combineNullabilitiesForSubstitution(
+                    typeArgument.declaredNullability,
+                    futureType.declaredNullability),
+                t.declaredNullability));
       } else {
         return t;
       }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/extension_type.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/extension_type.dart.expect
index be27bcf..494eab0 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/extension_type.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/extension_type.dart.expect
@@ -43,9 +43,9 @@
   return #this;
 }
 static method testTypeCheckRemoval() → void {
-  final core::List<self::SomeExtensionType% /* = core::int */> list = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<self::SomeExtensionType% /* = core::int */>(10, (final core::int a) → self::SomeExtensionType /* = core::int */ => [@vm.inferred-type.metadata=int] self::SomeExtensionType|constructor#(a));
-  final self::Run<self::SomeExtensionType% /* = core::int */> obj = new self::Run::•<self::SomeExtensionType /* = core::int */>();
-  [@vm.call-site-attributes.metadata=receiverType:#lib::Run<#lib::SomeExtensionType%>] [@vm.direct-call.metadata=#lib::Run.execute] [@vm.inferred-type.metadata=!? (skip check)] obj.{self::Run::execute}(list){(core::List<self::SomeExtensionType% /* = core::int */>) → void};
+  final core::List<self::SomeExtensionType /* = core::int */> list = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<self::SomeExtensionType /* = core::int */>(10, (final core::int a) → self::SomeExtensionType /* = core::int */ => [@vm.inferred-type.metadata=int] self::SomeExtensionType|constructor#(a));
+  final self::Run<self::SomeExtensionType /* = core::int */> obj = new self::Run::•<self::SomeExtensionType /* = core::int */>();
+  [@vm.call-site-attributes.metadata=receiverType:#lib::Run<#lib::SomeExtensionType>] [@vm.direct-call.metadata=#lib::Run.execute] [@vm.inferred-type.metadata=!? (skip check)] obj.{self::Run::execute}(list){(core::List<self::SomeExtensionType /* = core::int */>) → void};
 }
 static method main() → dynamic {
   let final self::C4 #t1 = new self::C4::•() in let final self::IC2 /* = core::int */ #t2 = [@vm.inferred-type.metadata=dart.core::_Smi (value: 42)] self::IC2|constructor#(42) in [@vm.direct-call.metadata=#lib::C4.foo3] [@vm.inferred-type.metadata=!? (skip check)] #t1.{self::C4::foo3}(){(self::IC2 /* = core::int */) → dynamic};