[stable][cfe] Issue 60121: Fix bug with isWildcard flag for formals.

Issue description: Users are finding that their debug variables are
evaluated to the wrong values and it's due to wildcard variables being
included, but being unable to be evaluated. Wildcard variables shouldn't
be able to be evaluated in the first place.

What is the fix: Correctly propagate the `isWildcard` flag in the CFE to
formal parameters. The VM uses this flag to determine if the variable
can be excluded from debugging evaluation. The flag is now set correctly
with the fix and won't appear in VM debug.

Why cherry-pick: This is causing debug variables to be evaluated
incorrectly because wildcard variables are appearing in the debug panel
of variables and shouldn't be.

Risk: Low, fixes wildcard variables that are formal parameters and touches no other code. This is code that should've been in the feature from the start.

Issue link(s): https://github.com/dart-lang/sdk/issues/60121

Cherry-pick: https://dart-review.googlesource.com/c/sdk/+/410161
Change-Id: Ie7aa3561183e6e326d65c09165a132d6bb3e72a2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/410640
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Kevin Chisholm <kevinjchisholm@google.com>
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 910e5c2..3e53560 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,9 +7,13 @@
    traffic to be dropped (issue [#8888])
  - Fixes a bug in DDC that prevents code from compiling when it includes
    factory constructors containing generic local functions (issue [#160338])
+ - Fixes a bug in the CFE that didn't correctly mark wildcard variables
+   in formal parameters, causing the wildcard variables to appear in
+   variable lists while debugging (issue [#60121])
 
 [#8888]: https://github.com/flutter/devtools/issues/8888
 [#160338]: https://github.com/flutter/flutter/issues/160338
+[#60121]: https://github.com/dart-lang/sdk/issues/60121
 
 ## 3.7.0
 
diff --git a/pkg/front_end/lib/src/kernel/body_builder.dart b/pkg/front_end/lib/src/kernel/body_builder.dart
index 8dd7677..87825d6 100644
--- a/pkg/front_end/lib/src/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/kernel/body_builder.dart
@@ -5460,8 +5460,7 @@
           offsetForToken(nameToken),
           fileUri: uri,
           hasImmediatelyDeclaredInitializer: initializerStart != null,
-          isWildcard: libraryFeatures.wildcardVariables.isEnabled &&
-              parameterName == '_');
+          isWildcard: isWildcard);
     }
     VariableDeclaration variable = parameter.build(libraryBuilder);
     Expression? initializer = name?.initializer;
diff --git a/pkg/front_end/testcases/general/await_complex.dart.strong.expect b/pkg/front_end/testcases/general/await_complex.dart.strong.expect
index 33492f9..c16b5a6 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.strong.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.strong.expect
@@ -39,7 +39,7 @@
     assert(false);
     return false;
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return true;
   }
 })(){() → core::bool};
diff --git a/pkg/front_end/testcases/general/await_complex.dart.strong.modular.expect b/pkg/front_end/testcases/general/await_complex.dart.strong.modular.expect
index 33492f9..c16b5a6 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.strong.modular.expect
@@ -39,7 +39,7 @@
     assert(false);
     return false;
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return true;
   }
 })(){() → core::bool};
diff --git a/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect b/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect
index e6d4b8c..6a67190 100644
--- a/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/await_complex.dart.strong.transformed.expect
@@ -39,7 +39,7 @@
     assert(false);
     return false;
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return true;
   }
 })(){() → core::bool};
diff --git a/pkg/front_end/testcases/general/bad_setter_abstract.dart.strong.expect b/pkg/front_end/testcases/general/bad_setter_abstract.dart.strong.expect
index b65d51a..bd7ad5e 100644
--- a/pkg/front_end/testcases/general/bad_setter_abstract.dart.strong.expect
+++ b/pkg/front_end/testcases/general/bad_setter_abstract.dart.strong.expect
@@ -151,7 +151,7 @@
     invalid-expression "The class 'B' is abstract and can't be instantiated.";
     threw = false;
   }
-  on core::Error catch(final core::Error _#wc0#formal) {
+  on core::Error catch(final wildcard core::Error _#wc0#formal) {
   }
   if(!threw) {
     throw "Expected an error above.";
diff --git a/pkg/front_end/testcases/general/bad_setter_abstract.dart.strong.modular.expect b/pkg/front_end/testcases/general/bad_setter_abstract.dart.strong.modular.expect
index b65d51a..bd7ad5e 100644
--- a/pkg/front_end/testcases/general/bad_setter_abstract.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/bad_setter_abstract.dart.strong.modular.expect
@@ -151,7 +151,7 @@
     invalid-expression "The class 'B' is abstract and can't be instantiated.";
     threw = false;
   }
-  on core::Error catch(final core::Error _#wc0#formal) {
+  on core::Error catch(final wildcard core::Error _#wc0#formal) {
   }
   if(!threw) {
     throw "Expected an error above.";
diff --git a/pkg/front_end/testcases/general/bad_setter_abstract.dart.strong.transformed.expect b/pkg/front_end/testcases/general/bad_setter_abstract.dart.strong.transformed.expect
index b65d51a..bd7ad5e 100644
--- a/pkg/front_end/testcases/general/bad_setter_abstract.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/bad_setter_abstract.dart.strong.transformed.expect
@@ -151,7 +151,7 @@
     invalid-expression "The class 'B' is abstract and can't be instantiated.";
     threw = false;
   }
-  on core::Error catch(final core::Error _#wc0#formal) {
+  on core::Error catch(final wildcard core::Error _#wc0#formal) {
   }
   if(!threw) {
     throw "Expected an error above.";
diff --git a/pkg/front_end/testcases/general/issue34899.dart.strong.expect b/pkg/front_end/testcases/general/issue34899.dart.strong.expect
index bbb9c9a..c993b58 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.strong.expect
@@ -10,7 +10,7 @@
     : self::Foo::quux = quux, self::Foo::t = t, super core::Object::•()
     ;
   method call() → asy::Future<self::Foo::T%>
-    return this.{self::Foo::quux}{() → asy::Future<dynamic>}(){() → asy::Future<dynamic>}.{asy::Future::then}<self::Foo::T%>((dynamic _#wc0#formal) → self::Foo::T% => this.{self::Foo::t}{self::Foo::T%}){((dynamic) → FutureOr<self::Foo::T%>, {onError: core::Function?}) → asy::Future<self::Foo::T%>};
+    return this.{self::Foo::quux}{() → asy::Future<dynamic>}(){() → asy::Future<dynamic>}.{asy::Future::then}<self::Foo::T%>((wildcard dynamic _#wc0#formal) → self::Foo::T% => this.{self::Foo::t}{self::Foo::T%}){((dynamic) → FutureOr<self::Foo::T%>, {onError: core::Function?}) → asy::Future<self::Foo::T%>};
 }
 class Bar extends core::Object {
   field self::Foo<self::Baz> qux = throw "";
diff --git a/pkg/front_end/testcases/general/issue34899.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue34899.dart.strong.modular.expect
index bbb9c9a..c993b58 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.strong.modular.expect
@@ -10,7 +10,7 @@
     : self::Foo::quux = quux, self::Foo::t = t, super core::Object::•()
     ;
   method call() → asy::Future<self::Foo::T%>
-    return this.{self::Foo::quux}{() → asy::Future<dynamic>}(){() → asy::Future<dynamic>}.{asy::Future::then}<self::Foo::T%>((dynamic _#wc0#formal) → self::Foo::T% => this.{self::Foo::t}{self::Foo::T%}){((dynamic) → FutureOr<self::Foo::T%>, {onError: core::Function?}) → asy::Future<self::Foo::T%>};
+    return this.{self::Foo::quux}{() → asy::Future<dynamic>}(){() → asy::Future<dynamic>}.{asy::Future::then}<self::Foo::T%>((wildcard dynamic _#wc0#formal) → self::Foo::T% => this.{self::Foo::t}{self::Foo::T%}){((dynamic) → FutureOr<self::Foo::T%>, {onError: core::Function?}) → asy::Future<self::Foo::T%>};
 }
 class Bar extends core::Object {
   field self::Foo<self::Baz> qux = throw "";
diff --git a/pkg/front_end/testcases/general/issue34899.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue34899.dart.strong.transformed.expect
index bbb9c9a..c993b58 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
     : self::Foo::quux = quux, self::Foo::t = t, super core::Object::•()
     ;
   method call() → asy::Future<self::Foo::T%>
-    return this.{self::Foo::quux}{() → asy::Future<dynamic>}(){() → asy::Future<dynamic>}.{asy::Future::then}<self::Foo::T%>((dynamic _#wc0#formal) → self::Foo::T% => this.{self::Foo::t}{self::Foo::T%}){((dynamic) → FutureOr<self::Foo::T%>, {onError: core::Function?}) → asy::Future<self::Foo::T%>};
+    return this.{self::Foo::quux}{() → asy::Future<dynamic>}(){() → asy::Future<dynamic>}.{asy::Future::then}<self::Foo::T%>((wildcard dynamic _#wc0#formal) → self::Foo::T% => this.{self::Foo::t}{self::Foo::T%}){((dynamic) → FutureOr<self::Foo::T%>, {onError: core::Function?}) → asy::Future<self::Foo::T%>};
 }
 class Bar extends core::Object {
   field self::Foo<self::Baz> qux = throw "";
diff --git a/pkg/front_end/testcases/general/issue37381.dart.strong.expect b/pkg/front_end/testcases/general/issue37381.dart.strong.expect
index 20451a5..ff98620 100644
--- a/pkg/front_end/testcases/general/issue37381.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue37381.dart.strong.expect
@@ -11,5 +11,5 @@
 }
 static method main() → dynamic {
   self::A<core::num> a = new self::A::•<core::int>();
-  a.{self::A::f}<core::int>(<X extends core::Object? = dynamic>(self::A<X%> _#wc0#formal) → core::int => 42){(<X extends core::Object? = dynamic>(self::A<X%>) → core::int) → core::int};
+  a.{self::A::f}<core::int>(<X extends core::Object? = dynamic>(wildcard self::A<X%> _#wc0#formal) → core::int => 42){(<X extends core::Object? = dynamic>(self::A<X%>) → core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/general/issue37381.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue37381.dart.strong.modular.expect
index 20451a5..ff98620 100644
--- a/pkg/front_end/testcases/general/issue37381.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue37381.dart.strong.modular.expect
@@ -11,5 +11,5 @@
 }
 static method main() → dynamic {
   self::A<core::num> a = new self::A::•<core::int>();
-  a.{self::A::f}<core::int>(<X extends core::Object? = dynamic>(self::A<X%> _#wc0#formal) → core::int => 42){(<X extends core::Object? = dynamic>(self::A<X%>) → core::int) → core::int};
+  a.{self::A::f}<core::int>(<X extends core::Object? = dynamic>(wildcard self::A<X%> _#wc0#formal) → core::int => 42){(<X extends core::Object? = dynamic>(self::A<X%>) → core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/general/issue37381.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue37381.dart.strong.transformed.expect
index 20451a5..ff98620 100644
--- a/pkg/front_end/testcases/general/issue37381.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue37381.dart.strong.transformed.expect
@@ -11,5 +11,5 @@
 }
 static method main() → dynamic {
   self::A<core::num> a = new self::A::•<core::int>();
-  a.{self::A::f}<core::int>(<X extends core::Object? = dynamic>(self::A<X%> _#wc0#formal) → core::int => 42){(<X extends core::Object? = dynamic>(self::A<X%>) → core::int) → core::int};
+  a.{self::A::f}<core::int>(<X extends core::Object? = dynamic>(wildcard self::A<X%> _#wc0#formal) → core::int => 42){(<X extends core::Object? = dynamic>(self::A<X%>) → core::int) → core::int};
 }
diff --git a/pkg/front_end/testcases/general/issue47072.dart.strong.expect b/pkg/front_end/testcases/general/issue47072.dart.strong.expect
index e67e670..ad75565 100644
--- a/pkg/front_end/testcases/general/issue47072.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue47072.dart.strong.expect
@@ -36,7 +36,7 @@
   try {
     i.{self::I::f}(new self::A::•()){(self::A) → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing type error";
diff --git a/pkg/front_end/testcases/general/issue47072.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue47072.dart.strong.modular.expect
index e67e670..ad75565 100644
--- a/pkg/front_end/testcases/general/issue47072.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue47072.dart.strong.modular.expect
@@ -36,7 +36,7 @@
   try {
     i.{self::I::f}(new self::A::•()){(self::A) → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing type error";
diff --git a/pkg/front_end/testcases/general/issue47072.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue47072.dart.strong.transformed.expect
index e67e670..ad75565 100644
--- a/pkg/front_end/testcases/general/issue47072.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47072.dart.strong.transformed.expect
@@ -36,7 +36,7 @@
   try {
     i.{self::I::f}(new self::A::•()){(self::A) → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing type error";
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.expect
index 259e0df..2df3caa 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.expect
@@ -69,7 +69,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.modular.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.modular.expect
index 259e0df..2df3caa 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.modular.expect
@@ -69,7 +69,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.transformed.expect
index a561e41..0220e15 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.strong.transformed.expect
@@ -69,7 +69,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect
index 9e59dc0..9412c9d 100644
--- a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.1.expect
@@ -135,7 +135,7 @@
     dart.core::print(b::StructB::#sizeOf);
   }
   static method main() → void {
-    dart.async::Timer::periodic(#C30, (dart.async::Timer _#wc0#formal) → void => b::periodic());
+    dart.async::Timer::periodic(#C30, (wildcard dart.async::Timer _#wc0#formal) → void => b::periodic());
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect
index 9e59dc0..9412c9d 100644
--- a/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/issue_46666.yaml.world.2.expect
@@ -135,7 +135,7 @@
     dart.core::print(b::StructB::#sizeOf);
   }
   static method main() → void {
-    dart.async::Timer::periodic(#C30, (dart.async::Timer _#wc0#formal) → void => b::periodic());
+    dart.async::Timer::periodic(#C30, (wildcard dart.async::Timer _#wc0#formal) → void => b::periodic());
   }
 }
 constants  {
diff --git a/pkg/front_end/testcases/inference/future_then.dart.strong.expect b/pkg/front_end/testcases/inference/future_then.dart.strong.expect
index 8234133..ec972b7 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.strong.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(self::MyFuture<dynamic> f) → void {
-  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _#wc5#formal) → asy::Future<core::int> {
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc5#formal) → asy::Future<core::int> {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_then.dart.strong.modular.expect
index 8234133..ec972b7 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.strong.modular.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(self::MyFuture<dynamic> f) → void {
-  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _#wc5#formal) → asy::Future<core::int> {
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc5#formal) → asy::Future<core::int> {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect
index d7b052d..7d00171 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.strong.transformed.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(self::MyFuture<dynamic> f) → void {
-  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _#wc5#formal) → asy::Future<core::int> {
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc5#formal) → asy::Future<core::int> {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect
index bc63226..2d149e2 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.strong.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(self::MyFuture<dynamic> f) → void {
-  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _#wc5#formal) → self::MyFuture<core::int> {
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc5#formal) → self::MyFuture<core::int> {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_then_2.dart.strong.modular.expect
index bc63226..2d149e2 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.strong.modular.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(self::MyFuture<dynamic> f) → void {
-  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _#wc5#formal) → self::MyFuture<core::int> {
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc5#formal) → self::MyFuture<core::int> {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect
index bc8b4ea..70c9955 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.strong.transformed.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(self::MyFuture<dynamic> f) → void {
-  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t1 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t2 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t3 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t4 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _#wc5#formal) → self::MyFuture<core::int> {
+  asy::Future<core::int> t5 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t6 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc5#formal) → self::MyFuture<core::int> {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t7 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  asy::Future<core::int> t8 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect
index fdb4ba4..16000da 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.strong.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(self::MyFuture<dynamic> f) → void {
-  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _#wc5#formal) → asy::Future<core::int> {
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc5#formal) → asy::Future<core::int> {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_then_3.dart.strong.modular.expect
index fdb4ba4..16000da 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.strong.modular.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(self::MyFuture<dynamic> f) → void {
-  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _#wc5#formal) → asy::Future<core::int> {
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc5#formal) → asy::Future<core::int> {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect
index ccb4502..a66ff1a 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.strong.transformed.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(self::MyFuture<dynamic> f) → void {
-  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _#wc5#formal) → asy::Future<core::int> {
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc5#formal) → asy::Future<core::int> {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect
index 0a52c83..36f6df8 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.strong.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(self::MyFuture<dynamic> f) → void {
-  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _#wc5#formal) → self::MyFuture<core::int> {
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc5#formal) → self::MyFuture<core::int> {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_then_4.dart.strong.modular.expect
index 0a52c83..36f6df8 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.strong.modular.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(self::MyFuture<dynamic> f) → void {
-  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _#wc5#formal) → self::MyFuture<core::int> {
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc5#formal) → self::MyFuture<core::int> {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect
index 3f6f404..0289c95 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.strong.transformed.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(self::MyFuture<dynamic> f) → void {
-  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t1 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t2 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t3 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t4 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((dynamic _#wc5#formal) → self::MyFuture<core::int> {
+  self::MyFuture<core::int> t5 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t6 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc5#formal) → self::MyFuture<core::int> {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  self::MyFuture<core::int> t7 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+  self::MyFuture<core::int> t8 = f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect
index 6e46bef..e73fe63 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.strong.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(asy::Future<dynamic> f) → void {
-  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((dynamic _#wc5#formal) → self::MyFuture<core::int> {
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc5#formal) → self::MyFuture<core::int> {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_then_5.dart.strong.modular.expect
index 6e46bef..e73fe63 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.strong.modular.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(asy::Future<dynamic> f) → void {
-  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((dynamic _#wc5#formal) → self::MyFuture<core::int> {
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc5#formal) → self::MyFuture<core::int> {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect
index 7e218c2..0d6c73b 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.strong.transformed.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(asy::Future<dynamic> f) → void {
-  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((dynamic _#wc5#formal) → self::MyFuture<core::int> {
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc4#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc5#formal) → self::MyFuture<core::int> {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => new self::MyFuture::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return new self::MyFuture::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect
index 2373e05..187c064 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.strong.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(asy::Future<dynamic> f) → void {
-  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((dynamic _#wc5#formal) → asy::Future<core::int> {
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc5#formal) → asy::Future<core::int> {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_then_6.dart.strong.modular.expect
index 2373e05..187c064 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.strong.modular.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(asy::Future<dynamic> f) → void {
-  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((dynamic _#wc5#formal) → asy::Future<core::int> {
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc5#formal) → asy::Future<core::int> {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect
index 2a9bc27..c1cf9af 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.strong.transformed.expect
@@ -24,20 +24,20 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test(asy::Future<dynamic> f) → void {
-  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t1 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => await asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t2 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc1#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return await asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t3 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc2#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => 3){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t4 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc3#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return 3;
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((dynamic _#wc5#formal) → asy::Future<core::int> {
+  asy::Future<core::int> t5 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc4#formal) → asy::Future<core::int> => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t6 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc5#formal) → asy::Future<core::int> {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
+  asy::Future<core::int> t7 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc6#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ => asy::Future::value<core::int>(3)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+  asy::Future<core::int> t8 = f.{asy::Future::then}<core::int>((wildcard dynamic _#wc7#formal) → asy::Future<core::int> async /* emittedValueType= core::int */ {
     return asy::Future::value<core::int>(3);
   }){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
 }
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
index 5ae96b5..efe123d 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
@@ -33,13 +33,13 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test() → void {
-  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
+  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((wildcard dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
   asy::Future<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards.dart'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in f as{TypeError} asy::Future<core::int>;
-  asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as asy::Future<core::double>;
+  asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((wildcard dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as asy::Future<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
   return new self::MyFuture::value<core::int>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.modular.expect
index 5ae96b5..efe123d 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.modular.expect
@@ -33,13 +33,13 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test() → void {
-  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
+  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((wildcard dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
   asy::Future<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards.dart'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in f as{TypeError} asy::Future<core::int>;
-  asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as asy::Future<core::double>;
+  asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((wildcard dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as asy::Future<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
   return new self::MyFuture::value<core::int>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
index b3c4057..3a28417 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.transformed.expect
@@ -33,13 +33,13 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test() → void {
-  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
+  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((wildcard dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
   asy::Future<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards.dart'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in f as{TypeError} asy::Future<core::int>;
-  asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as{Unchecked} asy::Future<core::double>;
+  asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((wildcard dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as{Unchecked} asy::Future<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
   return new self::MyFuture::value<core::int>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
index 8a9c818..a290382 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
@@ -32,12 +32,12 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test() → void {
-  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
+  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((wildcard dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
   self::MyFuture<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards_2.dart'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                   ^" in f as{TypeError} self::MyFuture<core::int>;
-  self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as self::MyFuture<core::double>;
+  self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((wildcard dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as self::MyFuture<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
   return new self::MyFuture::value<core::int>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.modular.expect
index 8a9c818..a290382 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.modular.expect
@@ -32,12 +32,12 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test() → void {
-  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
+  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((wildcard dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
   self::MyFuture<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards_2.dart'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                   ^" in f as{TypeError} self::MyFuture<core::int>;
-  self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as self::MyFuture<core::double>;
+  self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((wildcard dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as self::MyFuture<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
   return new self::MyFuture::value<core::int>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
index c11a6d4..7c70961 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.transformed.expect
@@ -32,12 +32,12 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test() → void {
-  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
+  self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((wildcard dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>};
   self::MyFuture<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'MyFuture<double>' can't be assigned to a variable of type 'MyFuture<int>'.
  - 'MyFuture' is from 'pkg/front_end/testcases/inference/future_then_upwards_2.dart'.
   MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                   ^" in f as{TypeError} self::MyFuture<core::int>;
-  self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as{Unchecked} self::MyFuture<core::double>;
+  self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((wildcard dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → self::MyFuture<core::double>} as{Unchecked} self::MyFuture<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
   return new self::MyFuture::value<core::int>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
index f76200b..1938e97 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
@@ -32,12 +32,12 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test() → void {
-  asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>};
+  asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((wildcard dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>};
   asy::Future<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in f as{TypeError} asy::Future<core::int>;
-  asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>} as asy::Future<core::double>;
+  asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((wildcard dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>} as asy::Future<core::double>;
 }
 static method foo() → asy::Future<dynamic>
   return asy::Future::value<core::int>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.modular.expect
index f76200b..1938e97 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.modular.expect
@@ -32,12 +32,12 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test() → void {
-  asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>};
+  asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((wildcard dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>};
   asy::Future<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in f as{TypeError} asy::Future<core::int>;
-  asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>} as asy::Future<core::double>;
+  asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((wildcard dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>} as asy::Future<core::double>;
 }
 static method foo() → asy::Future<dynamic>
   return asy::Future::value<core::int>(1);
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
index c0a4bd0..e9c6573 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.transformed.expect
@@ -32,12 +32,12 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static method test() → void {
-  asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>};
+  asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((wildcard dynamic _#wc0#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>};
   asy::Future<core::int> f2 = invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'Future<double>' can't be assigned to a variable of type 'Future<int>'.
  - 'Future' is from 'dart:async'.
   Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
                                                 ^" in f as{TypeError} asy::Future<core::int>;
-  asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>} as{Unchecked} asy::Future<core::double>;
+  asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((wildcard dynamic _#wc1#formal) → core::double => 2.3){((dynamic) → FutureOr<core::double>, {onError: core::Function?}) → asy::Future<core::double>} as{Unchecked} asy::Future<core::double>;
 }
 static method foo() → asy::Future<dynamic>
   return asy::Future::value<core::int>(1);
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
index acb1db2..4574342 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
@@ -31,10 +31,10 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static field self::MyFuture<dynamic> f = throw "";
-static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
         new /*@typeArgs=int*/ Future.value('hi'));
                                            ^" in "hi" as{TypeError} FutureOr<core::int>?)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((wildcard dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
 static method g2() → asy::Future<core::List<core::int>> async /* emittedValueType= core::List<core::int> */ {
   return <core::int>[3];
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.modular.expect
index acb1db2..4574342 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.modular.expect
@@ -31,10 +31,10 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static field self::MyFuture<dynamic> f = throw "";
-static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
         new /*@typeArgs=int*/ Future.value('hi'));
                                            ^" in "hi" as{TypeError} FutureOr<core::int>?)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((wildcard dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
 static method g2() → asy::Future<core::List<core::int>> async /* emittedValueType= core::List<core::int> */ {
   return <core::int>[3];
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
index 0d4f70e..44d565a 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.transformed.expect
@@ -31,10 +31,10 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static field self::MyFuture<dynamic> f = throw "";
-static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
         new /*@typeArgs=int*/ Future.value('hi'));
                                            ^" in "hi" as{TypeError} FutureOr<core::int>?)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _#wc0#formal) → core::List<core::int> => core::_GrowableList::_literal1<core::int>(3)){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((wildcard dynamic _#wc0#formal) → core::List<core::int> => core::_GrowableList::_literal1<core::int>(3)){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
 static method g2() → asy::Future<core::List<core::int>> async /* emittedValueType= core::List<core::int> */ {
   return core::_GrowableList::_literal1<core::int>(3);
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect
index 1fc5f14..09d9e5e 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.expect
@@ -24,8 +24,8 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static field self::MyFuture<dynamic> f = throw "";
-static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>("hi")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>("hi")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((wildcard dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
 static method g2() → asy::Future<core::List<core::int>> async /* emittedValueType= core::List<core::int> */ {
   return <core::int>[3];
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.modular.expect
index 1fc5f14..09d9e5e 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.modular.expect
@@ -24,8 +24,8 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static field self::MyFuture<dynamic> f = throw "";
-static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>("hi")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>("hi")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((wildcard dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
 static method g2() → asy::Future<core::List<core::int>> async /* emittedValueType= core::List<core::int> */ {
   return <core::int>[3];
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect
index 44b54e4..cae3972 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.strong.transformed.expect
@@ -24,8 +24,8 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static field self::MyFuture<dynamic> f = throw "";
-static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _#wc0#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>("hi")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
-static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _#wc0#formal) → core::List<core::int> => core::_GrowableList::_literal1<core::int>(3)){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((wildcard dynamic _#wc0#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>("hi")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → self::MyFuture<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((wildcard dynamic _#wc0#formal) → core::List<core::int> => core::_GrowableList::_literal1<core::int>(3)){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → self::MyFuture<core::List<core::int>>};
 static method g2() → asy::Future<core::List<core::int>> async /* emittedValueType= core::List<core::int> */ {
   return core::_GrowableList::_literal1<core::int>(3);
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
index 0b1d7e5..5bc9082 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
@@ -31,10 +31,10 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static field asy::Future<dynamic> f = throw "";
-static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
         new /*@typeArgs=int*/ Future.value('hi'));
                                            ^" in "hi" as{TypeError} FutureOr<core::int>?)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((wildcard dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
 static method g2() → asy::Future<core::List<core::int>> async /* emittedValueType= core::List<core::int> */ {
   return <core::int>[3];
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.modular.expect
index 0b1d7e5..5bc9082 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.modular.expect
@@ -31,10 +31,10 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static field asy::Future<dynamic> f = throw "";
-static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
         new /*@typeArgs=int*/ Future.value('hi'));
                                            ^" in "hi" as{TypeError} FutureOr<core::int>?)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((wildcard dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
 static method g2() → asy::Future<core::List<core::int>> async /* emittedValueType= core::List<core::int> */ {
   return <core::int>[3];
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
index 98f1ae4..ab26620 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.transformed.expect
@@ -31,10 +31,10 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static field asy::Future<dynamic> f = throw "";
-static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _#wc0#formal) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((wildcard dynamic _#wc0#formal) → asy::Future<core::int> => asy::Future::value<core::int>(invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<int>?'.
         new /*@typeArgs=int*/ Future.value('hi'));
                                            ^" in "hi" as{TypeError} FutureOr<core::int>?)){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _#wc0#formal) → core::List<core::int> => core::_GrowableList::_literal1<core::int>(3)){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((wildcard dynamic _#wc0#formal) → core::List<core::int> => core::_GrowableList::_literal1<core::int>(3)){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
 static method g2() → asy::Future<core::List<core::int>> async /* emittedValueType= core::List<core::int> */ {
   return core::_GrowableList::_literal1<core::int>(3);
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect
index 2440e09..28df91a 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.expect
@@ -24,8 +24,8 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static field asy::Future<dynamic> f = throw "";
-static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _#wc0#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>("hi")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((wildcard dynamic _#wc0#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>("hi")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((wildcard dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
 static method g2() → asy::Future<core::List<core::int>> async /* emittedValueType= core::List<core::int> */ {
   return <core::int>[3];
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.modular.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.modular.expect
index 2440e09..28df91a 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.modular.expect
@@ -24,8 +24,8 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static field asy::Future<dynamic> f = throw "";
-static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _#wc0#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>("hi")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((wildcard dynamic _#wc0#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>("hi")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((wildcard dynamic _#wc0#formal) → core::List<core::int> => <core::int>[3]){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
 static method g2() → asy::Future<core::List<core::int>> async /* emittedValueType= core::List<core::int> */ {
   return <core::int>[3];
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect
index 9c986d5..6608090 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.strong.transformed.expect
@@ -24,8 +24,8 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol, dynamic>(<core::Symbol, dynamic>{#C10: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T%>;
 }
 static field asy::Future<dynamic> f = throw "";
-static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _#wc0#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>("hi")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
-static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _#wc0#formal) → core::List<core::int> => core::_GrowableList::_literal1<core::int>(3)){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((wildcard dynamic _#wc0#formal) → self::MyFuture<core::int> => new self::MyFuture::value<core::int>("hi")){((dynamic) → FutureOr<core::int>, {onError: core::Function?}) → asy::Future<core::int>};
+static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((wildcard dynamic _#wc0#formal) → core::List<core::int> => core::_GrowableList::_literal1<core::int>(3)){((dynamic) → FutureOr<core::List<core::int>>, {onError: core::Function?}) → asy::Future<core::List<core::int>>};
 static method g2() → asy::Future<core::List<core::int>> async /* emittedValueType= core::List<core::int> */ {
   return core::_GrowableList::_literal1<core::int>(3);
 }
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart.strong.expect b/pkg/front_end/testcases/inference/infer_rethrow.dart.strong.expect
index 5e5e6090..e9c15d6 100644
--- a/pkg/front_end/testcases/inference/infer_rethrow.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart.strong.expect
@@ -6,7 +6,7 @@
   try {
     f(){() → dynamic};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     g(){() → dynamic};
     rethrow;
   }
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart.strong.modular.expect b/pkg/front_end/testcases/inference/infer_rethrow.dart.strong.modular.expect
index 5e5e6090..e9c15d6 100644
--- a/pkg/front_end/testcases/inference/infer_rethrow.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart.strong.modular.expect
@@ -6,7 +6,7 @@
   try {
     f(){() → dynamic};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     g(){() → dynamic};
     rethrow;
   }
diff --git a/pkg/front_end/testcases/inference/infer_rethrow.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_rethrow.dart.strong.transformed.expect
index 5e5e6090..e9c15d6 100644
--- a/pkg/front_end/testcases/inference/infer_rethrow.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_rethrow.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   try {
     f(){() → dynamic};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     g(){() → dynamic};
     rethrow;
   }
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.strong.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.strong.expect
index 8f13bcd..1f00c0d 100644
--- a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.strong.expect
@@ -13,7 +13,7 @@
   try {
     list = <core::String>[];
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   list{dynamic}.map((dynamic value) → core::String => "${value}");
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.strong.modular.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.strong.modular.expect
index 8f13bcd..1f00c0d 100644
--- a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.strong.modular.expect
@@ -13,7 +13,7 @@
   try {
     list = <core::String>[];
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   list{dynamic}.map((dynamic value) → core::String => "${value}");
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.strong.transformed.expect
index ebe6e7e..d9c576f 100644
--- a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.strong.transformed.expect
@@ -13,7 +13,7 @@
   try {
     list = core::_GrowableList::•<core::String>(0);
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   list{dynamic}.map((dynamic value) → core::String => "${value}");
diff --git a/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.expect
index 95a1925..63ec901 100644
--- a/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.expect
@@ -42,7 +42,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.modular.expect b/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.modular.expect
index 95a1925..63ec901 100644
--- a/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.modular.expect
@@ -42,7 +42,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.transformed.expect
index 95a1925..63ec901 100644
--- a/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue41922.dart.strong.transformed.expect
@@ -42,7 +42,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.expect
index c34ee8b..d8e1085 100644
--- a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.expect
@@ -43,7 +43,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.modular.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.modular.expect
index c34ee8b..d8e1085 100644
--- a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.modular.expect
@@ -43,7 +43,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.transformed.expect
index c34ee8b..d8e1085 100644
--- a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.transformed.expect
@@ -43,7 +43,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
index e466746..c8f21463 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
@@ -75,7 +75,7 @@
     try {
       throw v;
     }
-    on core::Object catch(final core::Object _#wc0#formal) {
+    on core::Object catch(final wildcard core::Object _#wc0#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
@@ -85,7 +85,7 @@
     try {
       return throw v;
     }
-    on core::Object catch(final core::Object _#wc1#formal) {
+    on core::Object catch(final wildcard core::Object _#wc1#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
@@ -95,7 +95,7 @@
     try {
       self::throwing();
     }
-    on core::Object catch(final core::Object _#wc2#formal) {
+    on core::Object catch(final wildcard core::Object _#wc2#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
@@ -105,7 +105,7 @@
     try {
       return self::throwing();
     }
-    on core::Object catch(final core::Object _#wc3#formal) {
+    on core::Object catch(final wildcard core::Object _#wc3#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
@@ -115,7 +115,7 @@
     try {
       throw v;
     }
-    on core::Object catch(final core::Object _#wc4#formal) {
+    on core::Object catch(final wildcard core::Object _#wc4#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
@@ -125,7 +125,7 @@
     try {
       return throw v;
     }
-    on core::Object catch(final core::Object _#wc5#formal) {
+    on core::Object catch(final wildcard core::Object _#wc5#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
@@ -135,7 +135,7 @@
     try {
       self::throwing();
     }
-    on core::Object catch(final core::Object _#wc6#formal) {
+    on core::Object catch(final wildcard core::Object _#wc6#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
@@ -145,7 +145,7 @@
     try {
       return self::throwing();
     }
-    on core::Object catch(final core::Object _#wc7#formal) {
+    on core::Object catch(final wildcard core::Object _#wc7#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.modular.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.modular.expect
index e466746..c8f21463 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.modular.expect
@@ -75,7 +75,7 @@
     try {
       throw v;
     }
-    on core::Object catch(final core::Object _#wc0#formal) {
+    on core::Object catch(final wildcard core::Object _#wc0#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
@@ -85,7 +85,7 @@
     try {
       return throw v;
     }
-    on core::Object catch(final core::Object _#wc1#formal) {
+    on core::Object catch(final wildcard core::Object _#wc1#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
@@ -95,7 +95,7 @@
     try {
       self::throwing();
     }
-    on core::Object catch(final core::Object _#wc2#formal) {
+    on core::Object catch(final wildcard core::Object _#wc2#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
@@ -105,7 +105,7 @@
     try {
       return self::throwing();
     }
-    on core::Object catch(final core::Object _#wc3#formal) {
+    on core::Object catch(final wildcard core::Object _#wc3#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
@@ -115,7 +115,7 @@
     try {
       throw v;
     }
-    on core::Object catch(final core::Object _#wc4#formal) {
+    on core::Object catch(final wildcard core::Object _#wc4#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
@@ -125,7 +125,7 @@
     try {
       return throw v;
     }
-    on core::Object catch(final core::Object _#wc5#formal) {
+    on core::Object catch(final wildcard core::Object _#wc5#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
@@ -135,7 +135,7 @@
     try {
       self::throwing();
     }
-    on core::Object catch(final core::Object _#wc6#formal) {
+    on core::Object catch(final wildcard core::Object _#wc6#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
@@ -145,7 +145,7 @@
     try {
       return self::throwing();
     }
-    on core::Object catch(final core::Object _#wc7#formal) {
+    on core::Object catch(final wildcard core::Object _#wc7#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
index e466746..c8f21463 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
@@ -75,7 +75,7 @@
     try {
       throw v;
     }
-    on core::Object catch(final core::Object _#wc0#formal) {
+    on core::Object catch(final wildcard core::Object _#wc0#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x2 = (int v) /* error */ {
@@ -85,7 +85,7 @@
     try {
       return throw v;
     }
-    on core::Object catch(final core::Object _#wc1#formal) {
+    on core::Object catch(final wildcard core::Object _#wc1#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x3 = (int v) /* error */ {
@@ -95,7 +95,7 @@
     try {
       self::throwing();
     }
-    on core::Object catch(final core::Object _#wc2#formal) {
+    on core::Object catch(final wildcard core::Object _#wc2#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x5 = (int v) /* error */ {
@@ -105,7 +105,7 @@
     try {
       return self::throwing();
     }
-    on core::Object catch(final core::Object _#wc3#formal) {
+    on core::Object catch(final wildcard core::Object _#wc3#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   String Function(int) x6 = (int v) /* error */ {
@@ -115,7 +115,7 @@
     try {
       throw v;
     }
-    on core::Object catch(final core::Object _#wc4#formal) {
+    on core::Object catch(final wildcard core::Object _#wc4#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y2 = (int v) async /* error */ {
@@ -125,7 +125,7 @@
     try {
       return throw v;
     }
-    on core::Object catch(final core::Object _#wc5#formal) {
+    on core::Object catch(final wildcard core::Object _#wc5#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y3 = (int v) async /* error */ {
@@ -135,7 +135,7 @@
     try {
       self::throwing();
     }
-    on core::Object catch(final core::Object _#wc6#formal) {
+    on core::Object catch(final wildcard core::Object _#wc6#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y5 = (int v) async /* error */ {
@@ -145,7 +145,7 @@
     try {
       return self::throwing();
     }
-    on core::Object catch(final core::Object _#wc7#formal) {
+    on core::Object catch(final wildcard core::Object _#wc7#formal) {
     }
     return invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
   Future<String> Function(int) y6 = (int v) async /* error */ {
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
index 3298198..25e7cf1 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
@@ -5,11 +5,11 @@
 
 static method main() → dynamic async /* emittedValueType= dynamic */ {
   core::bool b = (() → core::bool => true)(){() → core::bool};
-  (dynamic _#wc0#formal) → core::int? {
+  (wildcard dynamic _#wc0#formal) → core::int? {
     if(b)
       return 42;
   };
-  (dynamic _#wc1#formal) → asy::Future<core::int?> async /* emittedValueType= core::int? */ {
+  (wildcard dynamic _#wc1#formal) → asy::Future<core::int?> async /* emittedValueType= core::int? */ {
     if(b)
       return 42;
   };
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.modular.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.modular.expect
index 3298198..25e7cf1 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.modular.expect
@@ -5,11 +5,11 @@
 
 static method main() → dynamic async /* emittedValueType= dynamic */ {
   core::bool b = (() → core::bool => true)(){() → core::bool};
-  (dynamic _#wc0#formal) → core::int? {
+  (wildcard dynamic _#wc0#formal) → core::int? {
     if(b)
       return 42;
   };
-  (dynamic _#wc1#formal) → asy::Future<core::int?> async /* emittedValueType= core::int? */ {
+  (wildcard dynamic _#wc1#formal) → asy::Future<core::int?> async /* emittedValueType= core::int? */ {
     if(b)
       return 42;
   };
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
index 3298198..25e7cf1 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
@@ -5,11 +5,11 @@
 
 static method main() → dynamic async /* emittedValueType= dynamic */ {
   core::bool b = (() → core::bool => true)(){() → core::bool};
-  (dynamic _#wc0#formal) → core::int? {
+  (wildcard dynamic _#wc0#formal) → core::int? {
     if(b)
       return 42;
   };
-  (dynamic _#wc1#formal) → asy::Future<core::int?> async /* emittedValueType= core::int? */ {
+  (wildcard dynamic _#wc1#formal) → asy::Future<core::int?> async /* emittedValueType= core::int? */ {
     if(b)
       return 42;
   };
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.strong.expect b/pkg/front_end/testcases/nnbd/load_library.dart.strong.expect
index be26d0c..ad5ca4b 100644
--- a/pkg/front_end/testcases/nnbd/load_library.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.strong.expect
@@ -7,9 +7,9 @@
 
 static method main() → dynamic {
   asy::Future<dynamic> v1 = LoadLibrary(math);
-  v1.{asy::Future::then}<Null>((dynamic _#wc0#formal) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
+  v1.{asy::Future::then}<Null>((wildcard dynamic _#wc0#formal) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
   () → asy::Future<dynamic> v2 = #C1;
-  v2(){() → asy::Future<dynamic>}.{asy::Future::then}<Null>((dynamic _#wc1#formal) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
+  v2(){() → asy::Future<dynamic>}.{asy::Future::then}<Null>((wildcard dynamic _#wc1#formal) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
 }
 static method _#loadLibrary_math() → asy::Future<dynamic>
   return LoadLibrary(math);
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.strong.modular.expect b/pkg/front_end/testcases/nnbd/load_library.dart.strong.modular.expect
index be26d0c..ad5ca4b 100644
--- a/pkg/front_end/testcases/nnbd/load_library.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.strong.modular.expect
@@ -7,9 +7,9 @@
 
 static method main() → dynamic {
   asy::Future<dynamic> v1 = LoadLibrary(math);
-  v1.{asy::Future::then}<Null>((dynamic _#wc0#formal) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
+  v1.{asy::Future::then}<Null>((wildcard dynamic _#wc0#formal) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
   () → asy::Future<dynamic> v2 = #C1;
-  v2(){() → asy::Future<dynamic>}.{asy::Future::then}<Null>((dynamic _#wc1#formal) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
+  v2(){() → asy::Future<dynamic>}.{asy::Future::then}<Null>((wildcard dynamic _#wc1#formal) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
 }
 static method _#loadLibrary_math() → asy::Future<dynamic>
   return LoadLibrary(math);
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/load_library.dart.strong.transformed.expect
index be26d0c..ad5ca4b 100644
--- a/pkg/front_end/testcases/nnbd/load_library.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.strong.transformed.expect
@@ -7,9 +7,9 @@
 
 static method main() → dynamic {
   asy::Future<dynamic> v1 = LoadLibrary(math);
-  v1.{asy::Future::then}<Null>((dynamic _#wc0#formal) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
+  v1.{asy::Future::then}<Null>((wildcard dynamic _#wc0#formal) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
   () → asy::Future<dynamic> v2 = #C1;
-  v2(){() → asy::Future<dynamic>}.{asy::Future::then}<Null>((dynamic _#wc1#formal) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
+  v2(){() → asy::Future<dynamic>}.{asy::Future::then}<Null>((wildcard dynamic _#wc1#formal) → Null {}){((dynamic) → FutureOr<Null>, {onError: core::Function?}) → asy::Future<Null>};
 }
 static method _#loadLibrary_math() → asy::Future<dynamic>
   return LoadLibrary(math);
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.expect
index 32359cb..38aba5d 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.expect
@@ -262,7 +262,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception.";
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.modular.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.modular.expect
index 32359cb..38aba5d 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.modular.expect
@@ -262,7 +262,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception.";
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.transformed.expect
index 32359cb..38aba5d 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.strong.transformed.expect
@@ -262,7 +262,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception.";
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect
index a2224ed..459b377 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.expect
@@ -291,7 +291,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception.";
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.modular.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.modular.expect
index a2224ed..459b377 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.modular.expect
@@ -291,7 +291,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception.";
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect
index a2224ed..459b377 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.strong.transformed.expect
@@ -291,7 +291,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception.";
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect
index 1c38172..daec997 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.expect
@@ -291,7 +291,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception.";
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.modular.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.modular.expect
index 1c38172..daec997 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.modular.expect
@@ -291,7 +291,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception.";
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect
index 1c38172..daec997 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.strong.transformed.expect
@@ -291,7 +291,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception.";
diff --git a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.expect b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.expect
index ba9bc65..376bcb5 100644
--- a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.expect
@@ -85,7 +85,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing exception";
diff --git a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.modular.expect b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.modular.expect
index ba9bc65..376bcb5 100644
--- a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.modular.expect
@@ -85,7 +85,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing exception";
diff --git a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.transformed.expect
index ba9bc65..376bcb5 100644
--- a/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_null_check.dart.strong.transformed.expect
@@ -85,7 +85,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing exception";
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect
index 259e0df..2df3caa 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect
@@ -69,7 +69,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.modular.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.modular.expect
index 259e0df..2df3caa 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.modular.expect
@@ -69,7 +69,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect
index 259e0df..2df3caa 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect
@@ -69,7 +69,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Expected exception";
diff --git a/pkg/front_end/testcases/patterns/coercion_in_if_case_element.dart.strong.expect b/pkg/front_end/testcases/patterns/coercion_in_if_case_element.dart.strong.expect
index 046ba14..b5e5e6a 100644
--- a/pkg/front_end/testcases/patterns/coercion_in_if_case_element.dart.strong.expect
+++ b/pkg/front_end/testcases/patterns/coercion_in_if_case_element.dart.strong.expect
@@ -44,7 +44,7 @@
     f(){() → void};
     message = "Expected the function to throw an exception, but it didn't.";
   }
-  on self::expectThrows::Exception% catch(final self::expectThrows::Exception% _#wc0#formal) {
+  on self::expectThrows::Exception% catch(final wildcard self::expectThrows::Exception% _#wc0#formal) {
   }
   on dynamic catch(final dynamic e) {
     message = "Expected the function to throw an exception of type '${self::expectThrows::Exception%}', but got '${e.{core::Object::runtimeType}{<object>}.{core::Type}}'.";
diff --git a/pkg/front_end/testcases/patterns/coercion_in_if_case_element.dart.strong.modular.expect b/pkg/front_end/testcases/patterns/coercion_in_if_case_element.dart.strong.modular.expect
index 046ba14..b5e5e6a 100644
--- a/pkg/front_end/testcases/patterns/coercion_in_if_case_element.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/patterns/coercion_in_if_case_element.dart.strong.modular.expect
@@ -44,7 +44,7 @@
     f(){() → void};
     message = "Expected the function to throw an exception, but it didn't.";
   }
-  on self::expectThrows::Exception% catch(final self::expectThrows::Exception% _#wc0#formal) {
+  on self::expectThrows::Exception% catch(final wildcard self::expectThrows::Exception% _#wc0#formal) {
   }
   on dynamic catch(final dynamic e) {
     message = "Expected the function to throw an exception of type '${self::expectThrows::Exception%}', but got '${e.{core::Object::runtimeType}{<object>}.{core::Type}}'.";
diff --git a/pkg/front_end/testcases/patterns/coercion_in_if_case_element.dart.strong.transformed.expect b/pkg/front_end/testcases/patterns/coercion_in_if_case_element.dart.strong.transformed.expect
index ebe11c0..eb220e7 100644
--- a/pkg/front_end/testcases/patterns/coercion_in_if_case_element.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/patterns/coercion_in_if_case_element.dart.strong.transformed.expect
@@ -44,7 +44,7 @@
     f(){() → void};
     message = "Expected the function to throw an exception, but it didn't.";
   }
-  on self::expectThrows::Exception% catch(final self::expectThrows::Exception% _#wc0#formal) {
+  on self::expectThrows::Exception% catch(final wildcard self::expectThrows::Exception% _#wc0#formal) {
   }
   on dynamic catch(final dynamic e) {
     message = "Expected the function to throw an exception of type '${self::expectThrows::Exception%}', but got '${e.{core::Object::runtimeType}{<object>}.{core::Type}}'.";
diff --git a/pkg/front_end/testcases/patterns/coersion_in_if_case.dart.strong.expect b/pkg/front_end/testcases/patterns/coersion_in_if_case.dart.strong.expect
index f5ebb0e..3481e67 100644
--- a/pkg/front_end/testcases/patterns/coersion_in_if_case.dart.strong.expect
+++ b/pkg/front_end/testcases/patterns/coersion_in_if_case.dart.strong.expect
@@ -27,7 +27,7 @@
     f(){() → void};
     message = "Expected the function to throw an exception, but it didn't.";
   }
-  on self::expectThrows::Exception% catch(final self::expectThrows::Exception% _#wc0#formal) {
+  on self::expectThrows::Exception% catch(final wildcard self::expectThrows::Exception% _#wc0#formal) {
   }
   on dynamic catch(final dynamic e) {
     message = "Expected the function to throw an exception of type '${self::expectThrows::Exception%}', but got '${e.{core::Object::runtimeType}{<object>}.{core::Type}}'.";
diff --git a/pkg/front_end/testcases/patterns/coersion_in_if_case.dart.strong.modular.expect b/pkg/front_end/testcases/patterns/coersion_in_if_case.dart.strong.modular.expect
index f5ebb0e..3481e67 100644
--- a/pkg/front_end/testcases/patterns/coersion_in_if_case.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/patterns/coersion_in_if_case.dart.strong.modular.expect
@@ -27,7 +27,7 @@
     f(){() → void};
     message = "Expected the function to throw an exception, but it didn't.";
   }
-  on self::expectThrows::Exception% catch(final self::expectThrows::Exception% _#wc0#formal) {
+  on self::expectThrows::Exception% catch(final wildcard self::expectThrows::Exception% _#wc0#formal) {
   }
   on dynamic catch(final dynamic e) {
     message = "Expected the function to throw an exception of type '${self::expectThrows::Exception%}', but got '${e.{core::Object::runtimeType}{<object>}.{core::Type}}'.";
diff --git a/pkg/front_end/testcases/patterns/coersion_in_if_case.dart.strong.transformed.expect b/pkg/front_end/testcases/patterns/coersion_in_if_case.dart.strong.transformed.expect
index 5799ecb..f263c97 100644
--- a/pkg/front_end/testcases/patterns/coersion_in_if_case.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/patterns/coersion_in_if_case.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
     f(){() → void};
     message = "Expected the function to throw an exception, but it didn't.";
   }
-  on self::expectThrows::Exception% catch(final self::expectThrows::Exception% _#wc0#formal) {
+  on self::expectThrows::Exception% catch(final wildcard self::expectThrows::Exception% _#wc0#formal) {
   }
   on dynamic catch(final dynamic e) {
     message = "Expected the function to throw an exception of type '${self::expectThrows::Exception%}', but got '${e.{core::Object::runtimeType}{<object>}.{core::Type}}'.";
diff --git a/pkg/front_end/testcases/patterns/effect_only.dart.strong.expect b/pkg/front_end/testcases/patterns/effect_only.dart.strong.expect
index e69c2ab..61a23e3 100644
--- a/pkg/front_end/testcases/patterns/effect_only.dart.strong.expect
+++ b/pkg/front_end/testcases/patterns/effect_only.dart.strong.expect
@@ -35,7 +35,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing exception";
diff --git a/pkg/front_end/testcases/patterns/effect_only.dart.strong.modular.expect b/pkg/front_end/testcases/patterns/effect_only.dart.strong.modular.expect
index e69c2ab..61a23e3 100644
--- a/pkg/front_end/testcases/patterns/effect_only.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/patterns/effect_only.dart.strong.modular.expect
@@ -35,7 +35,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing exception";
diff --git a/pkg/front_end/testcases/patterns/effect_only.dart.strong.transformed.expect b/pkg/front_end/testcases/patterns/effect_only.dart.strong.transformed.expect
index 5a1e00c69..4e95fab 100644
--- a/pkg/front_end/testcases/patterns/effect_only.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/patterns/effect_only.dart.strong.transformed.expect
@@ -35,7 +35,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing exception";
diff --git a/pkg/front_end/testcases/patterns/issue51138.dart.strong.expect b/pkg/front_end/testcases/patterns/issue51138.dart.strong.expect
index d939a5f..619f893 100644
--- a/pkg/front_end/testcases/patterns/issue51138.dart.strong.expect
+++ b/pkg/front_end/testcases/patterns/issue51138.dart.strong.expect
@@ -45,7 +45,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing exception";
diff --git a/pkg/front_end/testcases/patterns/issue51138.dart.strong.modular.expect b/pkg/front_end/testcases/patterns/issue51138.dart.strong.modular.expect
index d939a5f..619f893 100644
--- a/pkg/front_end/testcases/patterns/issue51138.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/patterns/issue51138.dart.strong.modular.expect
@@ -45,7 +45,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing exception";
diff --git a/pkg/front_end/testcases/patterns/issue51138.dart.strong.transformed.expect b/pkg/front_end/testcases/patterns/issue51138.dart.strong.transformed.expect
index 42ee6f2..dc5353f 100644
--- a/pkg/front_end/testcases/patterns/issue51138.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/patterns/issue51138.dart.strong.transformed.expect
@@ -45,7 +45,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing exception";
diff --git a/pkg/front_end/testcases/patterns/issue51861.dart.strong.expect b/pkg/front_end/testcases/patterns/issue51861.dart.strong.expect
index 2677e06..2f59e6f 100644
--- a/pkg/front_end/testcases/patterns/issue51861.dart.strong.expect
+++ b/pkg/front_end/testcases/patterns/issue51861.dart.strong.expect
@@ -25,7 +25,7 @@
       b = #t2;
     }
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
   }
   self::expect(1.{core::int::unary-}(){() → core::int}, f);
 }
diff --git a/pkg/front_end/testcases/patterns/issue51861.dart.strong.modular.expect b/pkg/front_end/testcases/patterns/issue51861.dart.strong.modular.expect
index 2677e06..2f59e6f 100644
--- a/pkg/front_end/testcases/patterns/issue51861.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/patterns/issue51861.dart.strong.modular.expect
@@ -25,7 +25,7 @@
       b = #t2;
     }
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
   }
   self::expect(1.{core::int::unary-}(){() → core::int}, f);
 }
diff --git a/pkg/front_end/testcases/patterns/issue51861.dart.strong.transformed.expect b/pkg/front_end/testcases/patterns/issue51861.dart.strong.transformed.expect
index cf39d2f..91cb8ff 100644
--- a/pkg/front_end/testcases/patterns/issue51861.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/patterns/issue51861.dart.strong.transformed.expect
@@ -25,7 +25,7 @@
       b = #t2;
     }
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
   }
   self::expect(1.{core::int::unary-}(){() → core::int}, f);
 }
diff --git a/pkg/front_end/testcases/patterns/observable_assign.dart.strong.expect b/pkg/front_end/testcases/patterns/observable_assign.dart.strong.expect
index d480592..c35a8db 100644
--- a/pkg/front_end/testcases/patterns/observable_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/patterns/observable_assign.dart.strong.expect
@@ -40,7 +40,7 @@
       b2 = #t2;
     }
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
   }
   return b1;
 }
@@ -95,7 +95,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing throw";
@@ -104,6 +104,6 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
   }
 }
diff --git a/pkg/front_end/testcases/patterns/observable_assign.dart.strong.modular.expect b/pkg/front_end/testcases/patterns/observable_assign.dart.strong.modular.expect
index d480592..c35a8db 100644
--- a/pkg/front_end/testcases/patterns/observable_assign.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/patterns/observable_assign.dart.strong.modular.expect
@@ -40,7 +40,7 @@
       b2 = #t2;
     }
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
   }
   return b1;
 }
@@ -95,7 +95,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing throw";
@@ -104,6 +104,6 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
   }
 }
diff --git a/pkg/front_end/testcases/patterns/observable_assign.dart.strong.transformed.expect b/pkg/front_end/testcases/patterns/observable_assign.dart.strong.transformed.expect
index d480592..c35a8db 100644
--- a/pkg/front_end/testcases/patterns/observable_assign.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/patterns/observable_assign.dart.strong.transformed.expect
@@ -40,7 +40,7 @@
       b2 = #t2;
     }
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
   }
   return b1;
 }
@@ -95,7 +95,7 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
     return;
   }
   throw "Missing throw";
@@ -104,6 +104,6 @@
   try {
     f(){() → void};
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart.strong.expect b/pkg/front_end/testcases/regress/issue_35151.dart.strong.expect
index 74d854d..49521ad 100644
--- a/pkg/front_end/testcases/regress/issue_35151.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_35151.dart.strong.expect
@@ -44,11 +44,11 @@
   try {
     self::B b = new self::B::•();
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
   }
   try {
     self::C c = new self::C::•();
   }
-  on core::Object catch(final core::Object _#wc1#formal) {
+  on core::Object catch(final wildcard core::Object _#wc1#formal) {
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart.strong.modular.expect b/pkg/front_end/testcases/regress/issue_35151.dart.strong.modular.expect
index 74d854d..49521ad 100644
--- a/pkg/front_end/testcases/regress/issue_35151.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_35151.dart.strong.modular.expect
@@ -44,11 +44,11 @@
   try {
     self::B b = new self::B::•();
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
   }
   try {
     self::C c = new self::C::•();
   }
-  on core::Object catch(final core::Object _#wc1#formal) {
+  on core::Object catch(final wildcard core::Object _#wc1#formal) {
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_35151.dart.strong.transformed.expect
index 74d854d..49521ad 100644
--- a/pkg/front_end/testcases/regress/issue_35151.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35151.dart.strong.transformed.expect
@@ -44,11 +44,11 @@
   try {
     self::B b = new self::B::•();
   }
-  on core::Object catch(final core::Object _#wc0#formal) {
+  on core::Object catch(final wildcard core::Object _#wc0#formal) {
   }
   try {
     self::C c = new self::C::•();
   }
-  on core::Object catch(final core::Object _#wc1#formal) {
+  on core::Object catch(final wildcard core::Object _#wc1#formal) {
   }
 }
diff --git a/pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart.strong.expect b/pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart.strong.expect
index 62059fd..b8c6196 100644
--- a/pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart.strong.expect
+++ b/pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart.strong.expect
@@ -18,7 +18,7 @@
 import "dart:core" as core;
 
 static method test() → dynamic {
-  function fn(dynamic _#wc0#formal, dynamic _#wc1#formal) → void {
+  function fn(wildcard dynamic _#wc0#formal, wildcard dynamic _#wc1#formal) → void {
     core::print(invalid-expression "pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart:7:11: Error: Undefined name '_'.
     print(_);
           ^");
@@ -27,12 +27,12 @@
   try {
     throw "!";
   }
-  on core::Exception catch(final core::Exception _#wc2#formal, final core::StackTrace _#wc3#formal) {
+  on core::Exception catch(final wildcard core::Exception _#wc2#formal, final wildcard core::StackTrace _#wc3#formal) {
     core::print(invalid-expression "pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart:15:11: Error: Undefined name '_'.
     print(_);
           ^");
   }
-  on core::Object catch(final core::Object _#wc4#formal, final core::StackTrace _#wc5#formal) {
+  on core::Object catch(final wildcard core::Object _#wc4#formal, final wildcard core::StackTrace _#wc5#formal) {
     core::print(invalid-expression "pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart:17:11: Error: Undefined name '_'.
     print(_);
           ^");
diff --git a/pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart.strong.modular.expect b/pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart.strong.modular.expect
index 62059fd..b8c6196 100644
--- a/pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart.strong.modular.expect
@@ -18,7 +18,7 @@
 import "dart:core" as core;
 
 static method test() → dynamic {
-  function fn(dynamic _#wc0#formal, dynamic _#wc1#formal) → void {
+  function fn(wildcard dynamic _#wc0#formal, wildcard dynamic _#wc1#formal) → void {
     core::print(invalid-expression "pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart:7:11: Error: Undefined name '_'.
     print(_);
           ^");
@@ -27,12 +27,12 @@
   try {
     throw "!";
   }
-  on core::Exception catch(final core::Exception _#wc2#formal, final core::StackTrace _#wc3#formal) {
+  on core::Exception catch(final wildcard core::Exception _#wc2#formal, final wildcard core::StackTrace _#wc3#formal) {
     core::print(invalid-expression "pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart:15:11: Error: Undefined name '_'.
     print(_);
           ^");
   }
-  on core::Object catch(final core::Object _#wc4#formal, final core::StackTrace _#wc5#formal) {
+  on core::Object catch(final wildcard core::Object _#wc4#formal, final wildcard core::StackTrace _#wc5#formal) {
     core::print(invalid-expression "pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart:17:11: Error: Undefined name '_'.
     print(_);
           ^");
diff --git a/pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart.strong.transformed.expect b/pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart.strong.transformed.expect
index 62059fd..b8c6196 100644
--- a/pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart.strong.transformed.expect
@@ -18,7 +18,7 @@
 import "dart:core" as core;
 
 static method test() → dynamic {
-  function fn(dynamic _#wc0#formal, dynamic _#wc1#formal) → void {
+  function fn(wildcard dynamic _#wc0#formal, wildcard dynamic _#wc1#formal) → void {
     core::print(invalid-expression "pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart:7:11: Error: Undefined name '_'.
     print(_);
           ^");
@@ -27,12 +27,12 @@
   try {
     throw "!";
   }
-  on core::Exception catch(final core::Exception _#wc2#formal, final core::StackTrace _#wc3#formal) {
+  on core::Exception catch(final wildcard core::Exception _#wc2#formal, final wildcard core::StackTrace _#wc3#formal) {
     core::print(invalid-expression "pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart:15:11: Error: Undefined name '_'.
     print(_);
           ^");
   }
-  on core::Object catch(final core::Object _#wc4#formal, final core::StackTrace _#wc5#formal) {
+  on core::Object catch(final wildcard core::Object _#wc4#formal, final wildcard core::StackTrace _#wc5#formal) {
     core::print(invalid-expression "pkg/front_end/testcases/wildcard_variables/local_function_declaration.dart:17:11: Error: Undefined name '_'.
     print(_);
           ^");
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/lists.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/lists.dart.expect
index 34cf4fa..ab2f124 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/lists.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/lists.dart.expect
@@ -91,7 +91,7 @@
 
   [@vm.closure-id=7]
   synthetic constructor •() → self::A
-    : self::A::literal1 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::•<core::int>(0), self::A::literal2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::_literal3<core::int>(1, 2, 3), self::A::filledFactory1 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::filled<core::int>(2, 0), self::A::filledFactory2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::filled<core::int>(2, 0), self::A::filledFactory3 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::filled<core::int>(2, 0), self::A::filledFactory4 = let final core::bool #t1 = _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::nonConstant()) in [@vm.inferred-type.metadata=!] core::List::filled<core::int>(2, 0, #t1), self::A::filledFactory5 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(2), self::A::filledFactory6 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int?>] core::_GrowableList::•<core::int?>(2), self::A::filledFactory7 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(2), self::A::filledFactory8 = let final core::bool #t2 = _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::nonConstant()) in [@vm.inferred-type.metadata=!] core::List::filled<core::int?>(2, null, #t2), self::A::filledFactory9 = let final core::int #t3 = 2 in let final core::bool #t4 = true in [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int?>] core::_GrowableList::•<core::int?>(#t3), self::A::filledFactory10 = let final core::int #t5 = 2 in let final core::bool #t6 = false in [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(#t5), self::A::generateFactory1 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<core::int>(2, [@vm.closure-id=1](core::int i) → core::int => i), self::A::generateFactory2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<core::int>(2, [@vm.closure-id=2](core::int i) → core::int => i), self::A::generateFactory3 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::generate<core::int>([@vm.closure-id=3](core::int i) → core::int => i), self::A::generateFactory4 = let final (core::int) → core::int #t7 = [@vm.closure-id=4](core::int i) → core::int => i in let final core::bool #t8 = _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::nonConstant()) in [@vm.inferred-type.metadata=!] core::List::generate<core::int>(#t7, #t8), self::A::generateFactory5 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::List<dart.core::int>>] core::_GrowableList::generate<core::List<core::int>>(2, [@vm.closure-id=5](core::int _#wc0#formal) → core::List<core::int> => [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::•<core::int>(0)), self::A::generateFactory6 = let final core::int #t9 = 2 in let final core::bool #t10 = true in [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<core::int>(#t9, [@vm.closure-id=6](core::int i) → core::int => i), self::A::generateFactory7 = let final core::int #t11 = 2 in let final core::bool #t12 = false in [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::generate<core::int>([@vm.closure-id=7](core::int i) → core::int => i), super core::Object::•()
+    : self::A::literal1 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::•<core::int>(0), self::A::literal2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::_literal3<core::int>(1, 2, 3), self::A::filledFactory1 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::filled<core::int>(2, 0), self::A::filledFactory2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::filled<core::int>(2, 0), self::A::filledFactory3 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::filled<core::int>(2, 0), self::A::filledFactory4 = let final core::bool #t1 = _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::nonConstant()) in [@vm.inferred-type.metadata=!] core::List::filled<core::int>(2, 0, #t1), self::A::filledFactory5 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(2), self::A::filledFactory6 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int?>] core::_GrowableList::•<core::int?>(2), self::A::filledFactory7 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(2), self::A::filledFactory8 = let final core::bool #t2 = _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::nonConstant()) in [@vm.inferred-type.metadata=!] core::List::filled<core::int?>(2, null, #t2), self::A::filledFactory9 = let final core::int #t3 = 2 in let final core::bool #t4 = true in [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int?>] core::_GrowableList::•<core::int?>(#t3), self::A::filledFactory10 = let final core::int #t5 = 2 in let final core::bool #t6 = false in [@vm.inferred-type.metadata=dart.core::_List<dart.core::int?>] core::_List::•<core::int?>(#t5), self::A::generateFactory1 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<core::int>(2, [@vm.closure-id=1](core::int i) → core::int => i), self::A::generateFactory2 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<core::int>(2, [@vm.closure-id=2](core::int i) → core::int => i), self::A::generateFactory3 = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::generate<core::int>([@vm.closure-id=3](core::int i) → core::int => i), self::A::generateFactory4 = let final (core::int) → core::int #t7 = [@vm.closure-id=4](core::int i) → core::int => i in let final core::bool #t8 = _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::nonConstant()) in [@vm.inferred-type.metadata=!] core::List::generate<core::int>(#t7, #t8), self::A::generateFactory5 = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::List<dart.core::int>>] core::_GrowableList::generate<core::List<core::int>>(2, [@vm.closure-id=5](wildcard core::int _#wc0#formal) → core::List<core::int> => [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::•<core::int>(0)), self::A::generateFactory6 = let final core::int #t9 = 2 in let final core::bool #t10 = true in [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::generate<core::int>(#t9, [@vm.closure-id=6](core::int i) → core::int => i), self::A::generateFactory7 = let final core::int #t11 = 2 in let final core::bool #t12 = false in [@vm.inferred-type.metadata=dart.core::_List<dart.core::int>] core::_List::generate<core::int>([@vm.closure-id=7](core::int i) → core::int => i), super core::Object::•()
     ;
 }
 
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination2.dart.expect
index 41d3259..65fd388 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination2.dart.expect
@@ -18,7 +18,7 @@
 [@vm.inferred-return-type.metadata=dart.core::Null? (value: null)]
 [@vm.closure-id=1]
 static method main() → void {
-  self::testStaticTypeOfConditional<core::String>([@vm.closure-id=1](core::String _#wc0#formal) → core::bool => true);
+  self::testStaticTypeOfConditional<core::String>([@vm.closure-id=1](wildcard core::String _#wc0#formal) → core::bool => true);
 }
 constants  {
   #C1 = null