diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a508ebd..bf9f47d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -12,7 +12,7 @@
     * To report an API doc bug,
       [create an SDK issue](https://github.com/dart-lang/sdk/issues/new?title=API%20doc%20issue:).
   * Contribute to the Dart developer websites such as [dart.dev](https://dart.dev) (repo: [dart-lang/site-www](https://github.com/dart-lang/site-www)) and [dart.dev/web](https://dart.dev/web) (repo: [dart-lang/site-www/src/web](https://github.com/dart-lang/site-www/tree/master/src/web)). For more information, see [Writing for Dart and Flutter websites](https://github.com/dart-lang/site-shared/wiki/Writing-for-Dart-and-Flutter-websites).
-  * Improve the API reference docs at [api.dart.dev](https://api.dart.dev) by editing doc comments in the [Dart SDK repo](https://github.com/dart-lang/sdk/tree/master/sdk/lib). For more information on how to write API docs, see [Effective Dart: Documentation](https://dart.dev/guides/language/effective-dart/documentation).
+  * Improve the API reference docs at [api.dart.dev](https://api.dart.dev) by editing doc comments in the [Dart SDK repo](https://github.com/dart-lang/sdk/tree/main/sdk/lib). For more information on how to write API docs, see [Effective Dart: Documentation](https://dart.dev/guides/language/effective-dart/documentation).
 
 ## Before you contribute
 
@@ -41,10 +41,10 @@
 ...
 ```
 
-## Keeping your branch updated with origin/master
+## Keeping your branch updated with origin/main
 
 As you work, and before you send a patch for review, you should
-ensure your branch is merging cleanly to `origin/master`.
+ensure your branch is merging cleanly to `origin/main`.
 
 There are multiple ways to do this, but we generally recommend
 running:
@@ -56,7 +56,7 @@
 Note: you can run this command from any branch.
 
 This command will fetch
-origin/master, rebase all your open branches, and delete
+origin/main, rebase all your open branches, and delete
 cleanly merged branches.
 
 Your local workflow may vary.
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 99ccd1b..48a5828 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -81,6 +81,8 @@
     for git_file in input_api.AffectedTextFiles():
         if git_file.LocalPath().startswith("pkg/front_end/testcases/"):
             continue
+        if git_file.LocalPath().startswith("pkg/front_end/parser_testcases/"):
+            continue
         if should_skip(git_file.LocalPath()):
             continue
         filename = git_file.AbsoluteLocalPath()
diff --git a/README.md b/README.md
index 79cec90..a82e962 100644
--- a/README.md
+++ b/README.md
@@ -60,12 +60,12 @@
 You can also contribute patches, as described in [Contributing][contrib].
 
 [website]: https://dart.dev
-[license]: https://github.com/dart-lang/sdk/blob/master/LICENSE
+[license]: https://github.com/dart-lang/sdk/blob/main/LICENSE
 [repo]: https://github.com/dart-lang/sdk
 [lang]: https://dart.dev/guides/language/language-tour
 [tools]: https://dart.dev/tools
 [codelabs]: https://dart.dev/codelabs
 [dartbug]: http://dartbug.com
-[contrib]: https://github.com/dart-lang/sdk/blob/master/CONTRIBUTING.md
+[contrib]: https://github.com/dart-lang/sdk/blob/main/CONTRIBUTING.md
 [pubsite]: https://pub.dev
-[patent_grant]: https://github.com/dart-lang/sdk/blob/master/PATENT_GRANT
+[patent_grant]: https://github.com/dart-lang/sdk/blob/main/PATENT_GRANT
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart b/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
index 84f65f6..d599819 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
@@ -39,6 +39,8 @@
   /// Returns true if the type has type arguments.
   bool get hasTypeArguments;
 
+  bool get recovered => false;
+
   /// Call this function when the token after [token] must be a type (not void).
   /// This function will call the appropriate event methods on the [Parser]'s
   /// listener to handle the type, inserting a synthetic type reference if
@@ -150,6 +152,7 @@
     [bool inDeclaration = false, bool acceptKeywordForSimpleType = false]) {
   Token next = token.next!;
   if (!isValidTypeReference(next)) {
+    // As next is not a valid type reference, this is all recovery.
     if (next.type.isBuiltIn) {
       TypeParamOrArgInfo typeParamOrArg =
           computeTypeParamOrArg(next, inDeclaration);
@@ -157,7 +160,8 @@
         // Recovery: built-in `<` ... `>`
         if (required || looksLikeName(typeParamOrArg.skip(next).next!)) {
           return new ComplexTypeInfo(token, typeParamOrArg)
-              .computeBuiltinOrVarAsType(required);
+              .computeBuiltinOrVarAsType(required)
+            ..recovered = true;
         }
       } else if (required || isGeneralizedFunctionType(next.next!)) {
         String? value = next.stringValue;
@@ -167,21 +171,25 @@
             !identical('operator', value) &&
             !(identical('typedef', value) && next.next!.isIdentifier))) {
           return new ComplexTypeInfo(token, typeParamOrArg)
-              .computeBuiltinOrVarAsType(required);
+              .computeBuiltinOrVarAsType(required)
+            ..recovered = true;
         }
       }
     } else if (required) {
       // Recovery
       if (optional('.', next)) {
         // Looks like prefixed type missing the prefix
-        return new ComplexTypeInfo(
+        TypeInfo result = new ComplexTypeInfo(
                 token, computeTypeParamOrArg(next, inDeclaration))
             .computePrefixedType(required);
+        if (result is ComplexTypeInfo) result.recovered = true;
+        return result;
       } else if (optional('var', next) &&
           isOneOf(next.next!, const ['<', ',', '>'])) {
         return new ComplexTypeInfo(
                 token, computeTypeParamOrArg(next, inDeclaration))
-            .computeBuiltinOrVarAsType(required);
+            .computeBuiltinOrVarAsType(required)
+          ..recovered = true;
       }
     }
     return noType;
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
index 939bcc0..099319f 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
@@ -108,6 +108,9 @@
   bool get isFunctionType => false;
 
   @override
+  bool get recovered => false;
+
+  @override
   Token ensureTypeNotVoid(Token token, Parser parser) {
     parser.reportRecoverableErrorWithToken(
         token.next!, codes.templateExpectedType);
@@ -155,6 +158,9 @@
   bool get isFunctionType => false;
 
   @override
+  bool get recovered => false;
+
+  @override
   Token ensureTypeNotVoid(Token token, Parser parser) =>
       parseType(token, parser);
 
@@ -207,6 +213,9 @@
   bool get isFunctionType => false;
 
   @override
+  bool get recovered => false;
+
+  @override
   Token parseTypeRest(Token start, Token token, Parser parser) {
     token = token.next!;
     assert(optional('?', token));
@@ -244,6 +253,9 @@
   bool get isFunctionType => false;
 
   @override
+  bool get recovered => false;
+
+  @override
   Token ensureTypeNotVoid(Token token, Parser parser) =>
       parseType(token, parser);
 
@@ -291,6 +303,9 @@
   bool get isFunctionType => false;
 
   @override
+  bool get recovered => false;
+
+  @override
   Token parseTypeRest(Token start, Parser parser) {
     Token token = start.next!;
     assert(optional('?', token));
@@ -324,6 +339,9 @@
   bool get isFunctionType => false;
 
   @override
+  bool get recovered => false;
+
+  @override
   Token ensureTypeNotVoid(Token token, Parser parser) =>
       parseType(token, parser);
 
@@ -375,6 +393,9 @@
   bool get isFunctionType => false;
 
   @override
+  bool get recovered => false;
+
+  @override
   Token ensureTypeNotVoid(Token token, Parser parser) {
     // Report an error, then parse `void` as if it were a type name.
     parser.reportRecoverableError(token.next!, codes.messageInvalidVoid);
@@ -486,21 +507,30 @@
   /// whether it has a return type, otherwise this is `null`.
   bool? gftHasReturnType;
 
+  @override
+  bool recovered;
+
   ComplexTypeInfo(Token beforeStart, this.typeArguments)
-      : this.start = beforeStart.next! {
+      : this.start = beforeStart.next!,
+        recovered = typeArguments.recovered {
     // ignore: unnecessary_null_comparison
     assert(typeArguments != null);
   }
 
   ComplexTypeInfo._nonNullable(this.start, this.typeArguments, this.end,
-      this.typeVariableStarters, this.gftHasReturnType);
+      this.typeVariableStarters, this.gftHasReturnType, this.recovered);
 
   @override
   TypeInfo get asNonNullable {
     return beforeQuestionMark == null
         ? this
-        : new ComplexTypeInfo._nonNullable(start, typeArguments,
-            beforeQuestionMark, typeVariableStarters, gftHasReturnType);
+        : new ComplexTypeInfo._nonNullable(
+            start,
+            typeArguments,
+            beforeQuestionMark,
+            typeVariableStarters,
+            gftHasReturnType,
+            recovered);
   }
 
   @override
@@ -689,7 +719,7 @@
 
   /// Given a builtin, return the receiver so that parseType will report
   /// an error for the builtin used as a type.
-  TypeInfo computeBuiltinOrVarAsType(bool required) {
+  ComplexTypeInfo computeBuiltinOrVarAsType(bool required) {
     assert(start.type.isBuiltIn || optional('var', start));
 
     end = typeArguments.skip(start);
@@ -963,6 +993,7 @@
     while (true) {
       TypeInfo typeInfo =
           computeType(next, /* required = */ true, inDeclaration);
+      recovered = recovered | typeInfo.recovered;
       if (typeInfo == noType) {
         while (typeInfo == noType && optional('@', next.next!)) {
           next = skipMetadata(next);
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index 22d4a61..364ce65 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -882,7 +882,8 @@
 
     DartType getParameterType(ir.VariableDeclaration variable) {
       // isCovariant implies this FunctionNode is a class Procedure.
-      var isCovariant = variable.isCovariant || variable.isGenericCovariantImpl;
+      var isCovariant =
+          variable.isCovariantByDeclaration || variable.isCovariantByClass;
       var isFromNonNullableByDefaultLibrary = isCovariant &&
           (node.parent as ir.Procedure).enclosingLibrary.isNonNullableByDefault;
       return types.getTearOffParameterType(getDartType(variable.type),
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 7bf5db7..08eea71 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -518,7 +518,8 @@
 
     DartType getParameterType(ir.VariableDeclaration variable) {
       // isCovariant implies this FunctionNode is a class Procedure.
-      var isCovariant = variable.isCovariant || variable.isGenericCovariantImpl;
+      var isCovariant =
+          variable.isCovariantByDeclaration || variable.isCovariantByClass;
       var isFromNonNullableByDefaultLibrary = isCovariant &&
           (node.parent as ir.Procedure).enclosingLibrary.isNonNullableByDefault;
       return types.getTearOffParameterType(getDartType(variable.type),
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index e74ad8a..d1755aa 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -1409,7 +1409,7 @@
 
       if (targetChecks.checkAllParameters ||
           (targetChecks.checkCovariantParameters &&
-              (variable.isGenericCovariantImpl || variable.isCovariant))) {
+              (variable.isCovariantByClass || variable.isCovariantByDeclaration))) {
         newParameter = _typeBuilder.potentiallyCheckOrTrustTypeOfParameter(
             targetElement, newParameter, type);
       } else {
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 102b0e8..dbea6f0 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -3719,7 +3719,7 @@
   void _emitCovarianceBoundsCheck(
       List<TypeParameter> typeFormals, List<js_ast.Statement> body) {
     for (var t in typeFormals) {
-      if (t.isGenericCovariantImpl && !_types.isTop(t.bound)) {
+      if (t.isCovariantByClass && !_types.isTop(t.bound)) {
         body.add(runtimeStatement('checkTypeBound(#, #, #)', [
           _emitTypeParameterType(TypeParameterType(t, Nullability.undetermined),
               emitNullability: false),
diff --git a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
index 166080a..958e4af 100644
--- a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
+++ b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
@@ -211,13 +211,13 @@
 /// Whether the parameter [p] is covariant (either explicitly `covariant` or
 /// implicitly due to generics) and needs a check for soundness.
 bool isCovariantParameter(VariableDeclaration p) {
-  return p.isCovariant || p.isGenericCovariantImpl;
+  return p.isCovariantByDeclaration || p.isCovariantByClass;
 }
 
 /// Whether the field [p] is covariant (either explicitly `covariant` or
 /// implicitly due to generics) and needs a check for soundness.
 bool isCovariantField(Field f) {
-  return f.isCovariant || f.isGenericCovariantImpl;
+  return f.isCovariantByDeclaration || f.isCovariantByClass;
 }
 
 /// Returns true iff this factory constructor just throws [UnsupportedError]/
diff --git a/pkg/dev_compiler/lib/src/kernel/property_model.dart b/pkg/dev_compiler/lib/src/kernel/property_model.dart
index fc403b3..294b9a3 100644
--- a/pkg/dev_compiler/lib/src/kernel/property_model.dart
+++ b/pkg/dev_compiler/lib/src/kernel/property_model.dart
@@ -273,8 +273,8 @@
       var name = field.name.text;
       if (virtualAccessorNames.contains(name) ||
           fieldModel.isVirtual(field) ||
-          field.isCovariant ||
-          field.isGenericCovariantImpl) {
+          field.isCovariantByDeclaration ||
+          field.isCovariantByClass) {
         virtualFields[field] = js_ast.TemporaryId(js_ast.toJSIdentifier(name));
       }
     }
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index 2bab515..2f8ae5c 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -276,14 +276,15 @@
 
   _CovarianceTransformer(this._library);
 
-  /// Transforms [_library], eliminating unncessary checks for private members.
+  /// Transforms [_library], eliminating unnecessary checks for private members.
   ///
   /// Kernel will mark covariance checks on members, for example:
-  /// - a field with [Field.isGenericCovariantImpl] or [Field.isCovariant].
+  /// - a field with [Field.isCovariantByClass] or
+  ///   [Field.isCovariantByDeclaration].
   /// - a method/setter with parameter(s) or type parameter(s) that have
-  ///   `isGenericCovariantImpl` or `isCovariant` set.
+  ///   `isCovariantByClass` or `isCovariantByDeclaration` set.
   ///
-  /// If the check can be safely eliminanted, those properties will be set to
+  /// If the check can be safely eliminated, those properties will be set to
   /// false so the JS compiler does not emit checks.
   ///
   /// Public members always need covariance checks (we cannot see all potential
@@ -319,13 +320,13 @@
     // Update the tree based on the methods that need checks.
     for (var field in _privateFields) {
       if (!_checkedMembers.contains(field)) {
-        field.isCovariant = false;
-        field.isGenericCovariantImpl = false;
+        field.isCovariantByDeclaration = false;
+        field.isCovariantByClass = false;
       }
     }
     void clearCovariant(VariableDeclaration parameter) {
-      parameter.isCovariant = false;
-      parameter.isGenericCovariantImpl = false;
+      parameter.isCovariantByDeclaration = false;
+      parameter.isCovariantByClass = false;
     }
 
     for (var member in _privateProcedures) {
@@ -334,7 +335,7 @@
         function.positionalParameters.forEach(clearCovariant);
         function.namedParameters.forEach(clearCovariant);
         for (var t in function.typeParameters) {
-          t.isGenericCovariantImpl = false;
+          t.isCovariantByClass = false;
         }
       }
     }
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index e3b28d2..2c6ea0c 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -50,7 +50,7 @@
 
   TypeBuilder? get type;
 
-  bool get isCovariant;
+  bool get isCovariantByDeclaration;
 
   bool get isLate;
 
@@ -154,7 +154,7 @@
           isAbstract: isAbstract,
           isExternal: isExternal,
           isFinal: isFinal,
-          isCovariant: isCovariant,
+          isCovariantByDeclaration: isCovariantByDeclaration,
           isNonNullableByDefault: library.isNonNullableByDefault);
     } else if (isLate &&
         libraryBuilder.loader.target.backendTarget.isLateFieldLoweringEnabled(
@@ -175,7 +175,7 @@
               lateIsSetSetterReference,
               lateGetterReference,
               lateSetterReference,
-              isCovariant,
+              isCovariantByDeclaration,
               isSetStrategy);
         } else {
           _fieldEncoding = new LateFieldWithInitializerEncoding(
@@ -190,7 +190,7 @@
               lateIsSetSetterReference,
               lateGetterReference,
               lateSetterReference,
-              isCovariant,
+              isCovariantByDeclaration,
               isSetStrategy);
         }
       } else {
@@ -207,7 +207,7 @@
               lateIsSetSetterReference,
               lateGetterReference,
               lateSetterReference,
-              isCovariant,
+              isCovariantByDeclaration,
               isSetStrategy);
         } else {
           _fieldEncoding = new LateFieldWithoutInitializerEncoding(
@@ -222,7 +222,7 @@
               lateIsSetSetterReference,
               lateGetterReference,
               lateSetterReference,
-              isCovariant,
+              isCovariantByDeclaration,
               isSetStrategy);
         }
       }
@@ -244,7 +244,7 @@
             lateIsSetSetterReference,
             lateGetterReference,
             lateSetterReference,
-            isCovariant,
+            isCovariantByDeclaration,
             isSetStrategy);
       } else {
         _fieldEncoding = new LateFieldWithInitializerEncoding(
@@ -259,7 +259,7 @@
             lateIsSetSetterReference,
             lateGetterReference,
             lateSetterReference,
-            isCovariant,
+            isCovariantByDeclaration,
             isSetStrategy);
       }
     } else {
@@ -320,7 +320,7 @@
   bool get isLate => (modifiers & lateMask) != 0;
 
   @override
-  bool get isCovariant => (modifiers & covariantMask) != 0;
+  bool get isCovariantByDeclaration => (modifiers & covariantMask) != 0;
 
   @override
   bool get hasInitializer => (modifiers & hasInitializerMask) != 0;
@@ -665,7 +665,7 @@
   @override
   void build(
       SourceLibraryBuilder libraryBuilder, SourceFieldBuilder fieldBuilder) {
-    _field..isCovariant = fieldBuilder.isCovariant;
+    _field..isCovariantByDeclaration = fieldBuilder.isCovariantByDeclaration;
     if (fieldBuilder.isExtensionMember) {
       _field
         ..isStatic = true
@@ -695,7 +695,7 @@
 
   @override
   void setGenericCovariantImpl() {
-    _field.isGenericCovariantImpl = true;
+    _field.isCovariantByClass = true;
   }
 
   @override
@@ -814,7 +814,7 @@
       Reference? lateIsSetSetterReference,
       Reference? lateGetterReference,
       Reference? lateSetterReference,
-      bool isCovariant,
+      bool isCovariantByDeclaration,
       late_lowering.IsSetStrategy isSetStrategy)
       : fileOffset = charOffset,
         fileEndOffset = charEndOffset,
@@ -867,7 +867,7 @@
         fileUri,
         charOffset,
         lateSetterReference,
-        isCovariant: isCovariant);
+        isCovariantByDeclaration: isCovariantByDeclaration);
   }
 
   late_lowering.IsSetEncoding get isSetEncoding {
@@ -975,11 +975,11 @@
 
   Procedure? _createSetter(
       Name name, Uri fileUri, int charOffset, Reference? reference,
-      {required bool isCovariant}) {
+      {required bool isCovariantByDeclaration}) {
     // ignore: unnecessary_null_comparison
-    assert(isCovariant != null);
+    assert(isCovariantByDeclaration != null);
     VariableDeclaration parameter = new VariableDeclaration(null)
-      ..isCovariant = isCovariant
+      ..isCovariantByDeclaration = isCovariantByDeclaration
       ..fileOffset = fileOffset;
     return new Procedure(
         name,
@@ -1025,9 +1025,8 @@
 
   @override
   void setGenericCovariantImpl() {
-    _field.isGenericCovariantImpl = true;
-    _lateSetter?.function.positionalParameters.single.isGenericCovariantImpl =
-        true;
+    _field.isCovariantByClass = true;
+    _lateSetter?.function.positionalParameters.single.isCovariantByClass = true;
   }
 
   @override
@@ -1198,7 +1197,7 @@
       Reference? lateIsSetSetterReference,
       Reference? lateGetterReference,
       Reference? lateSetterReference,
-      bool isCovariant,
+      bool isCovariantByDeclaration,
       late_lowering.IsSetStrategy isSetStrategy)
       : super(
             name,
@@ -1212,7 +1211,7 @@
             lateIsSetSetterReference,
             lateGetterReference,
             lateSetterReference,
-            isCovariant,
+            isCovariantByDeclaration,
             isSetStrategy);
 }
 
@@ -1230,7 +1229,7 @@
       Reference? lateIsSetSetterReference,
       Reference? lateGetterReference,
       Reference? lateSetterReference,
-      bool isCovariant,
+      bool isCovariantByDeclaration,
       late_lowering.IsSetStrategy isSetStrategy)
       : super(
             name,
@@ -1244,7 +1243,7 @@
             lateIsSetSetterReference,
             lateGetterReference,
             lateSetterReference,
-            isCovariant,
+            isCovariantByDeclaration,
             isSetStrategy);
 
   @override
@@ -1277,7 +1276,7 @@
       Reference? lateIsSetSetterReference,
       Reference? lateGetterReference,
       Reference? lateSetterReference,
-      bool isCovariant,
+      bool isCovariantByDeclaration,
       late_lowering.IsSetStrategy isSetStrategy)
       : super(
             name,
@@ -1291,7 +1290,7 @@
             lateIsSetSetterReference,
             lateGetterReference,
             lateSetterReference,
-            isCovariant,
+            isCovariantByDeclaration,
             isSetStrategy);
 
   @override
@@ -1325,7 +1324,7 @@
       Reference? lateIsSetSetterReference,
       Reference? lateGetterReference,
       Reference? lateSetterReference,
-      bool isCovariant,
+      bool isCovariantByDeclaration,
       late_lowering.IsSetStrategy isSetStrategy)
       : super(
             name,
@@ -1339,7 +1338,7 @@
             lateIsSetSetterReference,
             lateGetterReference,
             lateSetterReference,
-            isCovariant,
+            isCovariantByDeclaration,
             isSetStrategy);
   @override
   Statement _createGetterBody(
@@ -1360,7 +1359,7 @@
   @override
   Procedure? _createSetter(
           Name name, Uri fileUri, int charOffset, Reference? reference,
-          {required bool isCovariant}) =>
+          {required bool isCovariantByDeclaration}) =>
       null;
 
   @override
@@ -1537,7 +1536,7 @@
       {required this.isAbstract,
       required this.isExternal,
       required bool isFinal,
-      required bool isCovariant,
+      required bool isCovariantByDeclaration,
       required bool isNonNullableByDefault})
       // ignore: unnecessary_null_comparison
       : assert(isAbstract != null),
@@ -1546,7 +1545,7 @@
         // ignore: unnecessary_null_comparison
         assert(isFinal != null),
         // ignore: unnecessary_null_comparison
-        assert(isCovariant != null),
+        assert(isCovariantByDeclaration != null),
         // ignore: unnecessary_null_comparison
         assert(isNonNullableByDefault != null),
         _isExtensionInstanceMember = isExternal &&
@@ -1567,7 +1566,7 @@
       if (!isFinal) {
         VariableDeclaration parameter =
             new VariableDeclaration("#externalFieldValue")
-              ..isCovariant = isCovariant
+              ..isCovariantByDeclaration = isCovariantByDeclaration
               ..fileOffset = charOffset;
         _setter = new Procedure(
             nameScheme.getProcedureName(ProcedureKind.Setter, name),
@@ -1600,7 +1599,7 @@
       if (!isFinal) {
         VariableDeclaration parameter =
             new VariableDeclaration("#externalFieldValue")
-              ..isCovariant = isCovariant
+              ..isCovariantByDeclaration = isCovariantByDeclaration
               ..fileOffset = charOffset;
         _setter = new Procedure(
             nameScheme.getFieldName(FieldNameType.Setter, name,
@@ -1742,7 +1741,7 @@
 
   @override
   void setGenericCovariantImpl() {
-    _setter!.function.positionalParameters.first.isGenericCovariantImpl = true;
+    _setter!.function.positionalParameters.first.isCovariantByClass = true;
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
index 216d044..bd77903 100644
--- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart
@@ -116,7 +116,7 @@
 
   bool get isInitializingFormal => (modifiers & initializingFormalMask) != 0;
 
-  bool get isCovariant => (modifiers & covariantMask) != 0;
+  bool get isCovariantByDeclaration => (modifiers & covariantMask) != 0;
 
   // An initializing formal parameter might be final without its
   // VariableDeclaration being final. See
@@ -142,7 +142,7 @@
           isFinal: isFinal,
           isConst: isConst,
           isFieldFormal: isInitializingFormal,
-          isCovariant: isCovariant,
+          isCovariantByDeclaration: isCovariantByDeclaration,
           isRequired: isNamedRequired,
           hasDeclaredInitializer: hasDeclaredInitializer,
           isLowered: isExtensionThis)
diff --git a/pkg/front_end/lib/src/fasta/builder/function_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
index c462800..0f1cb27 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
@@ -346,7 +346,7 @@
         function.typeParameters.add(parameter);
         if (needsCheckVisitor != null) {
           if (parameter.bound.accept(needsCheckVisitor)) {
-            parameter.isGenericCovariantImpl = true;
+            parameter.isCovariantByClass = true;
           }
         }
       }
@@ -358,7 +358,7 @@
             nonInstanceContext: !isConstructor && !isDeclarationInstanceMember);
         if (needsCheckVisitor != null) {
           if (parameter.type.accept(needsCheckVisitor)) {
-            parameter.isGenericCovariantImpl = true;
+            parameter.isCovariantByClass = true;
           }
         }
         if (formal.isNamed) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index 99eba28..b11496e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -422,7 +422,9 @@
   List<TypeParameter> aTypeParameters = a.typeParameters;
   List<TypeParameter> bTypeParameters = b.typeParameters;
   int typeParameterCount = aTypeParameters.length;
-  if (typeParameterCount != bTypeParameters.length) return false;
+  if (typeParameterCount != bTypeParameters.length) {
+    return false;
+  }
   Substitution? substitution;
   if (typeParameterCount != 0) {
     List<DartType> types = new List<DartType>.generate(
@@ -434,11 +436,15 @@
     for (int i = 0; i < typeParameterCount; i++) {
       DartType aBound = aTypeParameters[i].bound;
       DartType bBound = substitution.substituteType(bTypeParameters[i].bound);
-      if (aBound != bBound) return false;
+      if (aBound != bBound) {
+        return false;
+      }
     }
   }
 
-  if (a.requiredParameterCount != b.requiredParameterCount) return false;
+  if (a.requiredParameterCount != b.requiredParameterCount) {
+    return false;
+  }
   List<VariableDeclaration> aPositionalParameters = a.positionalParameters;
   List<VariableDeclaration> bPositionalParameters = b.positionalParameters;
   if (aPositionalParameters.length != bPositionalParameters.length) {
@@ -447,7 +453,10 @@
   for (int i = 0; i < aPositionalParameters.length; i++) {
     VariableDeclaration aParameter = aPositionalParameters[i];
     VariableDeclaration bParameter = bPositionalParameters[i];
-    if (aParameter.isCovariant != bParameter.isCovariant) return false;
+    if (aParameter.isCovariantByDeclaration !=
+        bParameter.isCovariantByDeclaration) {
+      return false;
+    }
     DartType aType = aParameter.type;
     DartType bType = bParameter.type;
     if (substitution != null) {
@@ -458,18 +467,27 @@
 
   List<VariableDeclaration> aNamedParameters = a.namedParameters;
   List<VariableDeclaration> bNamedParameters = b.namedParameters;
-  if (aNamedParameters.length != bNamedParameters.length) return false;
+  if (aNamedParameters.length != bNamedParameters.length) {
+    return false;
+  }
   for (int i = 0; i < aNamedParameters.length; i++) {
     VariableDeclaration aParameter = aNamedParameters[i];
     VariableDeclaration bParameter = bNamedParameters[i];
-    if (aParameter.isCovariant != bParameter.isCovariant) return false;
-    if (aParameter.name != bParameter.name) return false;
+    if (aParameter.isCovariantByDeclaration !=
+        bParameter.isCovariantByDeclaration) {
+      return false;
+    }
+    if (aParameter.name != bParameter.name) {
+      return false;
+    }
     DartType aType = aParameter.type;
     DartType bType = bParameter.type;
     if (substitution != null) {
       bType = substitution.substituteType(bType);
     }
-    if (aType != bType) return false;
+    if (aType != bType) {
+      return false;
+    }
   }
 
   DartType aReturnType = a.returnType;
diff --git a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
index 59f914c..414c8c2 100644
--- a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
@@ -483,8 +483,8 @@
               member.function.positionalParameters.first;
           combinedMemberSignature = _createSetterMemberSignature(
               member, combinedMemberSignatureType!,
-              isGenericCovariantImpl: parameter.isGenericCovariantImpl,
-              isCovariant: parameter.isCovariant,
+              isCovariantByClass: parameter.isCovariantByClass,
+              isCovariantByDeclaration: parameter.isCovariantByDeclaration,
               parameter: parameter,
               copyLocation: copyLocation);
           break;
@@ -503,8 +503,8 @@
       if (forSetter) {
         combinedMemberSignature = _createSetterMemberSignature(
             member, combinedMemberSignatureType!,
-            isGenericCovariantImpl: member.isGenericCovariantImpl,
-            isCovariant: member.isCovariant,
+            isCovariantByClass: member.isCovariantByClass,
+            isCovariantByDeclaration: member.isCovariantByDeclaration,
             copyLocation: copyLocation);
       } else {
         combinedMemberSignature = _createGetterMemberSignature(
@@ -559,17 +559,18 @@
   }
 
   /// Creates a setter member signature for [member] with the given
-  /// [type]. The flags of parameter is set according to [isCovariant] and
-  /// [isGenericCovariantImpl] and the [parameterName] is used, if provided.
+  /// [type]. The flags of parameter is set according to
+  /// [isCovariantByDeclaration] and [isCovariantByClass] and the name of the
+  /// [parameter] is used, if provided.
   Procedure _createSetterMemberSignature(Member member, DartType type,
-      {required bool isCovariant,
-      required bool isGenericCovariantImpl,
+      {required bool isCovariantByDeclaration,
+      required bool isCovariantByClass,
       VariableDeclaration? parameter,
       required bool copyLocation}) {
     // ignore: unnecessary_null_comparison
-    assert(isCovariant != null);
+    assert(isCovariantByDeclaration != null);
     // ignore: unnecessary_null_comparison
-    assert(isGenericCovariantImpl != null);
+    assert(isCovariantByClass != null);
     // ignore: unnecessary_null_comparison
     assert(copyLocation != null);
     Class enclosingClass = classBuilder.cls;
@@ -594,8 +595,8 @@
           returnType: const VoidType(),
           positionalParameters: [
             new VariableDeclaration(parameter?.name ?? 'value',
-                type: type, isCovariant: isCovariant)
-              ..isGenericCovariantImpl = isGenericCovariantImpl
+                type: type, isCovariantByDeclaration: isCovariantByDeclaration)
+              ..isCovariantByClass = isCovariantByClass
               ..fileOffset = copyLocation
                   ? parameter?.fileOffset ?? fileOffset
                   : fileOffset
@@ -638,8 +639,9 @@
       VariableDeclaration parameter = function.positionalParameters[i];
       DartType parameterType = functionType.positionalParameters[i];
       positionalParameters.add(new VariableDeclaration(parameter.name,
-          type: parameterType, isCovariant: parameter.isCovariant)
-        ..isGenericCovariantImpl = parameter.isGenericCovariantImpl
+          type: parameterType,
+          isCovariantByDeclaration: parameter.isCovariantByDeclaration)
+        ..isCovariantByClass = parameter.isCovariantByClass
         ..fileOffset = copyLocation ? parameter.fileOffset : fileOffset);
     }
     List<VariableDeclaration> namedParameters = [];
@@ -650,8 +652,8 @@
       namedParameters.add(new VariableDeclaration(parameter.name,
           type: namedType.type,
           isRequired: namedType.isRequired,
-          isCovariant: parameter.isCovariant)
-        ..isGenericCovariantImpl = parameter.isGenericCovariantImpl
+          isCovariantByDeclaration: parameter.isCovariantByDeclaration)
+        ..isCovariantByClass = parameter.isCovariantByClass
         ..fileOffset = copyLocation ? parameter.fileOffset : fileOffset);
     } else if (namedParameterCount > 1) {
       Map<String, NamedType> namedTypes = {};
@@ -664,8 +666,8 @@
         namedParameters.add(new VariableDeclaration(parameter.name,
             type: namedParameterType.type,
             isRequired: namedParameterType.isRequired,
-            isCovariant: parameter.isCovariant)
-          ..isGenericCovariantImpl = parameter.isGenericCovariantImpl
+            isCovariantByDeclaration: parameter.isCovariantByDeclaration)
+          ..isCovariantByClass = parameter.isCovariantByClass
           ..fileOffset = copyLocation ? parameter.fileOffset : fileOffset);
       }
     }
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index 12ba226..2d5435a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -645,7 +645,7 @@
       bool isFinal: false,
       bool isConst: false,
       bool isFieldFormal: false,
-      bool isCovariant: false,
+      bool isCovariantByDeclaration: false,
       bool isLocalFunction: false}) {
     // ignore: unnecessary_null_comparison
     assert(fileOffset != null);
@@ -655,7 +655,7 @@
         isFinal: isFinal,
         isConst: isConst,
         isFieldFormal: isFieldFormal,
-        isCovariant: isCovariant,
+        isCovariantByDeclaration: isCovariantByDeclaration,
         isLocalFunction: isLocalFunction,
         hasDeclaredInitializer: initializer != null);
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
index 3a1de7d..92a9dca 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -1592,7 +1592,7 @@
       bool isFinal: false,
       bool isConst: false,
       bool isFieldFormal: false,
-      bool isCovariant: false,
+      bool isCovariantByDeclaration: false,
       bool isLocalFunction: false,
       bool isLate: false,
       bool isRequired: false,
@@ -1606,7 +1606,7 @@
             isFinal: isFinal,
             isConst: isConst,
             isFieldFormal: isFieldFormal,
-            isCovariant: isCovariant,
+            isCovariantByDeclaration: isCovariantByDeclaration,
             isLate: isLate,
             isRequired: isRequired,
             isLowered: isLowered);
diff --git a/pkg/front_end/lib/src/fasta/kernel/member_covariance.dart b/pkg/front_end/lib/src/fasta/kernel/member_covariance.dart
index 03c89ce..1e7600c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/member_covariance.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/member_covariance.dart
@@ -17,32 +17,32 @@
 
   /// Returns the covariance mask for [parameter].
   static int covarianceFromParameter(VariableDeclaration parameter) =>
-      (parameter.isCovariant ? Covariant : 0) |
-      (parameter.isGenericCovariantImpl ? GenericCovariantImpl : 0);
+      (parameter.isCovariantByDeclaration ? Covariant : 0) |
+      (parameter.isCovariantByClass ? GenericCovariantImpl : 0);
 
   /// Returns the covariance mask for [field].
   static int covarianceFromField(Field field) =>
-      (field.isCovariant ? Covariant : 0) |
-      (field.isGenericCovariantImpl ? GenericCovariantImpl : 0);
+      (field.isCovariantByDeclaration ? Covariant : 0) |
+      (field.isCovariantByClass ? GenericCovariantImpl : 0);
 
   /// Applies the [covariance] mask to [parameter].
   static void covarianceToParameter(
       int covariance, VariableDeclaration parameter) {
     if ((covariance & Covariant) != 0) {
-      parameter.isCovariant = true;
+      parameter.isCovariantByDeclaration = true;
     }
     if ((covariance & GenericCovariantImpl) != 0) {
-      parameter.isGenericCovariantImpl = true;
+      parameter.isCovariantByClass = true;
     }
   }
 
   /// Applies the [covariance] mask to parameter.
   static void covarianceToField(int covariance, Field field) {
     if ((covariance & Covariant) != 0) {
-      field.isCovariant = true;
+      field.isCovariantByDeclaration = true;
     }
     if ((covariance & GenericCovariantImpl) != 0) {
-      field.isGenericCovariantImpl = true;
+      field.isCovariantByClass = true;
     }
   }
 
@@ -133,7 +133,7 @@
     List<bool>? typeParameters;
     if (function.typeParameters.isNotEmpty) {
       for (int index = 0; index < function.typeParameters.length; index++) {
-        if (function.typeParameters[index].isGenericCovariantImpl) {
+        if (function.typeParameters[index].isCovariantByClass) {
           typeParameters ??=
               new List<bool>.filled(function.typeParameters.length, false);
           typeParameters[index] = true;
@@ -289,7 +289,7 @@
         for (int index = 0; index < typeParameters.length; index++) {
           if (index < function.typeParameters.length) {
             if (typeParameters[index]) {
-              function.typeParameters[index].isGenericCovariantImpl = true;
+              function.typeParameters[index].isCovariantByClass = true;
             }
           }
         }
diff --git a/pkg/front_end/lib/src/fasta/scope.dart b/pkg/front_end/lib/src/fasta/scope.dart
index f6e9a39..db65cb2 100644
--- a/pkg/front_end/lib/src/fasta/scope.dart
+++ b/pkg/front_end/lib/src/fasta/scope.dart
@@ -519,6 +519,9 @@
     scope._local.forEach(mergeMember);
     map = _setters;
     scope._setters.forEach(mergeMember);
+    if (scope._extensions != null) {
+      (_extensions ??= {}).addAll(scope._extensions!);
+    }
   }
 
   void forEach(f(String name, Builder member)) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 0809082..cfd33e0 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -353,7 +353,7 @@
       }
       if (fieldBuilder.isClassInstanceMember &&
           fieldBuilder.isAssignable &&
-          !fieldBuilder.isCovariant) {
+          !fieldBuilder.isCovariantByDeclaration) {
         fieldVariance = Variance.combine(Variance.contravariant, fieldVariance);
         reportVariancePositionIfInvalid(fieldVariance, typeParameter,
             fieldBuilder.fileUri, fieldBuilder.charOffset);
@@ -385,7 +385,7 @@
     // ignore: unnecessary_null_comparison
     if (positionalParameters != null) {
       for (VariableDeclaration formal in positionalParameters) {
-        if (!formal.isCovariant) {
+        if (!formal.isCovariantByDeclaration) {
           for (TypeParameter typeParameter in typeParameters) {
             int formalVariance = Variance.combine(Variance.contravariant,
                 computeVariance(typeParameter, formal.type));
@@ -1285,7 +1285,7 @@
       for (int i = 0; i < declaredFunction.typeParameters.length; ++i) {
         TypeParameter declaredParameter = declaredFunction.typeParameters[i];
         TypeParameter interfaceParameter = interfaceFunction!.typeParameters[i];
-        if (!interfaceParameter.isGenericCovariantImpl) {
+        if (!interfaceParameter.isCovariantByClass) {
           DartType declaredBound = declaredParameter.bound;
           DartType interfaceBound = interfaceParameter.bound;
           if (interfaceSubstitution != null) {
@@ -1359,7 +1359,7 @@
       Member interfaceMemberOrigin,
       DartType declaredType,
       DartType interfaceType,
-      bool isCovariant,
+      bool isCovariantByDeclaration,
       VariableDeclaration? declaredParameter,
       bool isInterfaceCheck,
       bool declaredNeedsLegacyErasure,
@@ -1386,7 +1386,7 @@
     if (types.isSubtypeOf(
         subtype, supertype, SubtypeCheckMode.withNullabilities)) {
       // No problem--the proper subtyping relation is satisfied.
-    } else if (isCovariant &&
+    } else if (isCovariantByDeclaration &&
         types.isSubtypeOf(
             supertype, subtype, SubtypeCheckMode.withNullabilities)) {
       // No problem--the overriding parameter is marked "covariant" and has
@@ -1398,7 +1398,7 @@
       // Report an error.
       bool isErrorInNnbdOptedOutMode = !types.isSubtypeOf(
               subtype, supertype, SubtypeCheckMode.ignoringNullabilities) &&
-          (!isCovariant ||
+          (!isCovariantByDeclaration ||
               !types.isSubtypeOf(
                   supertype, subtype, SubtypeCheckMode.ignoringNullabilities));
       if (isErrorInNnbdOptedOutMode || library.isNonNullableByDefault) {
@@ -1493,8 +1493,8 @@
         interfaceMemberOrigin,
         declaredFunction.returnType,
         interfaceFunction.returnType,
-        false,
-        null,
+        /* isCovariantByDeclaration = */ false,
+        /* declaredParameter = */ null,
         isInterfaceCheck,
         declaredNeedsLegacyErasure);
     if (declaredFunction.positionalParameters.length <
@@ -1563,11 +1563,12 @@
           interfaceMemberOrigin,
           declaredParameter.type,
           interfaceParameter.type,
-          declaredParameter.isCovariant || interfaceParameter.isCovariant,
+          declaredParameter.isCovariantByDeclaration ||
+              interfaceParameter.isCovariantByDeclaration,
           declaredParameter,
           isInterfaceCheck,
           declaredNeedsLegacyErasure);
-      if (declaredParameter.isCovariant) seenCovariant = true;
+      if (declaredParameter.isCovariantByDeclaration) seenCovariant = true;
     }
     if (declaredFunction.namedParameters.isEmpty &&
         interfaceFunction.namedParameters.isEmpty) {
@@ -1643,7 +1644,7 @@
           interfaceMemberOrigin,
           declaredParameter.type,
           interfaceNamedParameters.current.type,
-          declaredParameter.isCovariant,
+          declaredParameter.isCovariantByDeclaration,
           declaredParameter,
           isInterfaceCheck,
           declaredNeedsLegacyErasure);
@@ -1670,7 +1671,7 @@
                       interfaceMemberOrigin.fileOffset, noLength)
             ]);
       }
-      if (declaredParameter.isCovariant) seenCovariant = true;
+      if (declaredParameter.isCovariantByDeclaration) seenCovariant = true;
     }
     return seenCovariant;
   }
@@ -1709,7 +1710,7 @@
         interfaceMemberOrigin,
         declaredType,
         interfaceType,
-        /* isCovariant = */ false,
+        /* isCovariantByDeclaration = */ false,
         /* declaredParameter = */ null,
         isInterfaceCheck,
         declaredNeedsLegacyErasure);
@@ -1745,12 +1746,13 @@
     DartType interfaceType = interfaceMember.setterType;
     VariableDeclaration? declaredParameter =
         declaredMember.function?.positionalParameters.elementAt(0);
-    bool isCovariant = declaredParameter?.isCovariant ?? false;
-    if (!isCovariant && declaredMember is Field) {
-      isCovariant = declaredMember.isCovariant;
+    bool isCovariantByDeclaration =
+        declaredParameter?.isCovariantByDeclaration ?? false;
+    if (!isCovariantByDeclaration && declaredMember is Field) {
+      isCovariantByDeclaration = declaredMember.isCovariantByDeclaration;
     }
-    if (!isCovariant && interfaceMember is Field) {
-      isCovariant = interfaceMember.isCovariant;
+    if (!isCovariantByDeclaration && interfaceMember is Field) {
+      isCovariantByDeclaration = interfaceMember.isCovariantByDeclaration;
     }
     _checkTypes(
         types,
@@ -1761,12 +1763,12 @@
         interfaceMemberOrigin,
         declaredType,
         interfaceType,
-        isCovariant,
+        isCovariantByDeclaration,
         declaredParameter,
         isInterfaceCheck,
         declaredNeedsLegacyErasure,
         asIfDeclaredParameter: true);
-    return isCovariant;
+    return isCovariantByDeclaration;
   }
 
   // When the overriding member is inherited, report the class containing
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_01.dart b/pkg/front_end/parser_testcases/general/issue_47008_01.dart
new file mode 100644
index 0000000..388e5d8
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47008_01.dart
@@ -0,0 +1,3 @@
+main() {
+  a(b < c, d < e, 1 >> (2));
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_01.dart.expect b/pkg/front_end/parser_testcases/general/issue_47008_01.dart.expect
new file mode 100644
index 0000000..c74a161
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47008_01.dart.expect
@@ -0,0 +1,47 @@
+beginCompilationUnit(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(, null)
+      handleNoType()
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(a, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(b, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(b, <)
+          beginBinaryExpression(<)
+            handleIdentifier(c, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(c, ,)
+          endBinaryExpression(<)
+          handleIdentifier(d, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(d, <)
+          beginBinaryExpression(<)
+            handleIdentifier(e, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(e, ,)
+          endBinaryExpression(<)
+          handleLiteralInt(1)
+          beginBinaryExpression(>>)
+            handleLiteralInt(2)
+            handleParenthesizedExpression(()
+          endBinaryExpression(>>)
+        endArguments(3, (, ))
+        handleSend(a, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_47008_01.dart.intertwined.expect
new file mode 100644
index 0000000..406fe2c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47008_01.dart.intertwined.expect
@@ -0,0 +1,137 @@
+parseUnit(main)
+  skipErrorTokens(main)
+  listener: beginCompilationUnit(main)
+  syntheticPreviousToken(main)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, a)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(a)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              isNextIdentifier({)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(a, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(a)
+                                parseArguments(a)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              looksLikeFunctionBody())
+                                              parseSend((, expression)
+                                                isNextIdentifier(()
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(b, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(b)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(b, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  isNextIdentifier(<)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(c, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(c)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(c, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseSendOrFunctionLiteral(,, expression)
+                                              parseSend(,, expression)
+                                                isNextIdentifier(,)
+                                                ensureIdentifier(,, expression)
+                                                  listener: handleIdentifier(d, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(d)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(d, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  isNextIdentifier(<)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(e, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(e)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(e, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(1)
+                                        listener: beginBinaryExpression(>>)
+                                        parsePrecedenceExpression(>>, 13, true)
+                                          parseUnaryExpression(>>, true)
+                                            parsePrimary(>>, expression)
+                                              parseParenthesizedExpressionOrFunctionLiteral(>>)
+                                                parseParenthesizedExpression(>>)
+                                                  parseExpressionInParenthesis(>>)
+                                                    parseExpressionInParenthesisRest(()
+                                                      parseExpression(()
+                                                        parsePrecedenceExpression((, 1, true)
+                                                          parseUnaryExpression((, true)
+                                                            parsePrimary((, expression)
+                                                              parseLiteralInt(()
+                                                                listener: handleLiteralInt(2)
+                                                      ensureCloseParen(2, ()
+                                                  listener: handleParenthesizedExpression(()
+                                        listener: endBinaryExpression(>>)
+                                    listener: endArguments(3, (, ))
+                              listener: handleSend(a, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(main)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_01.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_47008_01.dart.parser.expect
new file mode 100644
index 0000000..f090739
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47008_01.dart.parser.expect
@@ -0,0 +1,9 @@
+main() {
+a(b < c, d < e, 1 >> (2));
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+a[StringToken]([BeginToken]b[StringToken] <[BeginToken] c[StringToken],[SimpleToken] d[StringToken] <[BeginToken] e[StringToken],[SimpleToken] 1[StringToken] >>[SimpleToken] ([BeginToken]2[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_01.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_47008_01.dart.scanner.expect
new file mode 100644
index 0000000..f090739
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47008_01.dart.scanner.expect
@@ -0,0 +1,9 @@
+main() {
+a(b < c, d < e, 1 >> (2));
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+a[StringToken]([BeginToken]b[StringToken] <[BeginToken] c[StringToken],[SimpleToken] d[StringToken] <[BeginToken] e[StringToken],[SimpleToken] 1[StringToken] >>[SimpleToken] ([BeginToken]2[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_02.dart b/pkg/front_end/parser_testcases/general/issue_47008_02.dart
new file mode 100644
index 0000000..33c62b6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47008_02.dart
@@ -0,0 +1,3 @@
+main() {
+  a(b < c, d < e, f < g, 1 >>> (2));
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_02.dart.expect b/pkg/front_end/parser_testcases/general/issue_47008_02.dart.expect
new file mode 100644
index 0000000..f0770d5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47008_02.dart.expect
@@ -0,0 +1,57 @@
+beginCompilationUnit(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(, null)
+      handleNoType()
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(a, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(b, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(b, <)
+          beginBinaryExpression(<)
+            handleIdentifier(c, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(c, ,)
+          endBinaryExpression(<)
+          handleIdentifier(d, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(d, <)
+          beginBinaryExpression(<)
+            handleIdentifier(e, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(e, ,)
+          endBinaryExpression(<)
+          handleIdentifier(f, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(f, <)
+          beginBinaryExpression(<)
+            handleIdentifier(g, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(g, ,)
+          endBinaryExpression(<)
+          handleLiteralInt(1)
+          beginBinaryExpression(>>>)
+            handleLiteralInt(2)
+            handleParenthesizedExpression(()
+          endBinaryExpression(>>>)
+        endArguments(4, (, ))
+        handleSend(a, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_47008_02.dart.intertwined.expect
new file mode 100644
index 0000000..4f3fe74
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47008_02.dart.intertwined.expect
@@ -0,0 +1,164 @@
+parseUnit(main)
+  skipErrorTokens(main)
+  listener: beginCompilationUnit(main)
+  syntheticPreviousToken(main)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, a)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(a)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              isNextIdentifier({)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(a, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(a)
+                                parseArguments(a)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              looksLikeFunctionBody())
+                                              parseSend((, expression)
+                                                isNextIdentifier(()
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(b, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(b)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(b, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  isNextIdentifier(<)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(c, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(c)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(c, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseSendOrFunctionLiteral(,, expression)
+                                              parseSend(,, expression)
+                                                isNextIdentifier(,)
+                                                ensureIdentifier(,, expression)
+                                                  listener: handleIdentifier(d, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(d)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(d, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  isNextIdentifier(<)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(e, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(e)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(e, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseSendOrFunctionLiteral(,, expression)
+                                              parseSend(,, expression)
+                                                isNextIdentifier(,)
+                                                ensureIdentifier(,, expression)
+                                                  listener: handleIdentifier(f, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(f)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(f, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  isNextIdentifier(<)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(g, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(g)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(g, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(1)
+                                        listener: beginBinaryExpression(>>>)
+                                        parsePrecedenceExpression(>>>, 13, true)
+                                          parseUnaryExpression(>>>, true)
+                                            parsePrimary(>>>, expression)
+                                              parseParenthesizedExpressionOrFunctionLiteral(>>>)
+                                                parseParenthesizedExpression(>>>)
+                                                  parseExpressionInParenthesis(>>>)
+                                                    parseExpressionInParenthesisRest(()
+                                                      parseExpression(()
+                                                        parsePrecedenceExpression((, 1, true)
+                                                          parseUnaryExpression((, true)
+                                                            parsePrimary((, expression)
+                                                              parseLiteralInt(()
+                                                                listener: handleLiteralInt(2)
+                                                      ensureCloseParen(2, ()
+                                                  listener: handleParenthesizedExpression(()
+                                        listener: endBinaryExpression(>>>)
+                                    listener: endArguments(4, (, ))
+                              listener: handleSend(a, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(main)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_02.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_47008_02.dart.parser.expect
new file mode 100644
index 0000000..0e53edf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47008_02.dart.parser.expect
@@ -0,0 +1,9 @@
+main() {
+a(b < c, d < e, f < g, 1 >>> (2));
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+a[StringToken]([BeginToken]b[StringToken] <[BeginToken] c[StringToken],[SimpleToken] d[StringToken] <[BeginToken] e[StringToken],[SimpleToken] f[StringToken] <[BeginToken] g[StringToken],[SimpleToken] 1[StringToken] >>>[SimpleToken] ([BeginToken]2[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_47008_02.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_47008_02.dart.scanner.expect
new file mode 100644
index 0000000..0e53edf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47008_02.dart.scanner.expect
@@ -0,0 +1,9 @@
+main() {
+a(b < c, d < e, f < g, 1 >>> (2));
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+a[StringToken]([BeginToken]b[StringToken] <[BeginToken] c[StringToken],[SimpleToken] d[StringToken] <[BeginToken] e[StringToken],[SimpleToken] f[StringToken] <[BeginToken] g[StringToken],[SimpleToken] 1[StringToken] >>>[SimpleToken] ([BeginToken]2[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_01.dart b/pkg/front_end/parser_testcases/general/issue_47009_01.dart
new file mode 100644
index 0000000..87237b9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_01.dart
@@ -0,0 +1,3 @@
+main() {
+  a(b < c, as > (1));
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_01.dart.expect b/pkg/front_end/parser_testcases/general/issue_47009_01.dart.expect
new file mode 100644
index 0000000..5e09e8f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_01.dart.expect
@@ -0,0 +1,40 @@
+beginCompilationUnit(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(, null)
+      handleNoType()
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(a, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(b, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(b, <)
+          beginBinaryExpression(<)
+            handleIdentifier(c, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(c, ,)
+          endBinaryExpression(<)
+          handleIdentifier(as, expression)
+          handleNoTypeArguments(>)
+          handleNoArguments(>)
+          handleSend(as, >)
+          beginBinaryExpression(>)
+            handleLiteralInt(1)
+            handleParenthesizedExpression(()
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(a, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_47009_01.dart.intertwined.expect
new file mode 100644
index 0000000..1876a12
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_01.dart.intertwined.expect
@@ -0,0 +1,119 @@
+parseUnit(main)
+  skipErrorTokens(main)
+  listener: beginCompilationUnit(main)
+  syntheticPreviousToken(main)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, a)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(a)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              isNextIdentifier({)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(a, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(a)
+                                parseArguments(a)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              looksLikeFunctionBody())
+                                              parseSend((, expression)
+                                                isNextIdentifier(()
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(b, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(b)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(b, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  isNextIdentifier(<)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(c, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(c)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(c, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            inPlainSync()
+                                            parseSendOrFunctionLiteral(,, expression)
+                                              parseSend(,, expression)
+                                                isNextIdentifier(,)
+                                                ensureIdentifier(,, expression)
+                                                  inPlainSync()
+                                                  listener: handleIdentifier(as, expression)
+                                                listener: handleNoTypeArguments(>)
+                                                parseArgumentsOpt(as)
+                                                  listener: handleNoArguments(>)
+                                                listener: handleSend(as, >)
+                                        listener: beginBinaryExpression(>)
+                                        parsePrecedenceExpression(>, 9, true)
+                                          parseUnaryExpression(>, true)
+                                            parsePrimary(>, expression)
+                                              parseParenthesizedExpressionOrFunctionLiteral(>)
+                                                parseParenthesizedExpression(>)
+                                                  parseExpressionInParenthesis(>)
+                                                    parseExpressionInParenthesisRest(()
+                                                      parseExpression(()
+                                                        parsePrecedenceExpression((, 1, true)
+                                                          parseUnaryExpression((, true)
+                                                            parsePrimary((, expression)
+                                                              parseLiteralInt(()
+                                                                listener: handleLiteralInt(1)
+                                                      ensureCloseParen(1, ()
+                                                  listener: handleParenthesizedExpression(()
+                                        listener: endBinaryExpression(>)
+                                    listener: endArguments(2, (, ))
+                              listener: handleSend(a, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(main)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_01.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_47009_01.dart.parser.expect
new file mode 100644
index 0000000..712e62b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_01.dart.parser.expect
@@ -0,0 +1,9 @@
+main() {
+a(b < c, as > (1));
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+a[StringToken]([BeginToken]b[StringToken] <[BeginToken] c[StringToken],[SimpleToken] as[KeywordToken] >[SimpleToken] ([BeginToken]1[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_01.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_47009_01.dart.scanner.expect
new file mode 100644
index 0000000..712e62b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_01.dart.scanner.expect
@@ -0,0 +1,9 @@
+main() {
+a(b < c, as > (1));
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+a[StringToken]([BeginToken]b[StringToken] <[BeginToken] c[StringToken],[SimpleToken] as[KeywordToken] >[SimpleToken] ([BeginToken]1[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_02.dart b/pkg/front_end/parser_testcases/general/issue_47009_02.dart
new file mode 100644
index 0000000..3d20a33
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_02.dart
@@ -0,0 +1,3 @@
+main() {
+  a(b < c, d < e, as >> (1));
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_02.dart.expect b/pkg/front_end/parser_testcases/general/issue_47009_02.dart.expect
new file mode 100644
index 0000000..a4e0369
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_02.dart.expect
@@ -0,0 +1,50 @@
+beginCompilationUnit(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(, null)
+      handleNoType()
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(a, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(b, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(b, <)
+          beginBinaryExpression(<)
+            handleIdentifier(c, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(c, ,)
+          endBinaryExpression(<)
+          handleIdentifier(d, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(d, <)
+          beginBinaryExpression(<)
+            handleIdentifier(e, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(e, ,)
+          endBinaryExpression(<)
+          handleIdentifier(as, expression)
+          handleNoTypeArguments(>>)
+          handleNoArguments(>>)
+          handleSend(as, >>)
+          beginBinaryExpression(>>)
+            handleLiteralInt(1)
+            handleParenthesizedExpression(()
+          endBinaryExpression(>>)
+        endArguments(3, (, ))
+        handleSend(a, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_47009_02.dart.intertwined.expect
new file mode 100644
index 0000000..91cb220
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_02.dart.intertwined.expect
@@ -0,0 +1,146 @@
+parseUnit(main)
+  skipErrorTokens(main)
+  listener: beginCompilationUnit(main)
+  syntheticPreviousToken(main)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, a)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(a)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              isNextIdentifier({)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(a, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(a)
+                                parseArguments(a)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              looksLikeFunctionBody())
+                                              parseSend((, expression)
+                                                isNextIdentifier(()
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(b, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(b)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(b, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  isNextIdentifier(<)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(c, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(c)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(c, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseSendOrFunctionLiteral(,, expression)
+                                              parseSend(,, expression)
+                                                isNextIdentifier(,)
+                                                ensureIdentifier(,, expression)
+                                                  listener: handleIdentifier(d, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(d)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(d, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  isNextIdentifier(<)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(e, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(e)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(e, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            inPlainSync()
+                                            parseSendOrFunctionLiteral(,, expression)
+                                              parseSend(,, expression)
+                                                isNextIdentifier(,)
+                                                ensureIdentifier(,, expression)
+                                                  inPlainSync()
+                                                  listener: handleIdentifier(as, expression)
+                                                listener: handleNoTypeArguments(>>)
+                                                parseArgumentsOpt(as)
+                                                  listener: handleNoArguments(>>)
+                                                listener: handleSend(as, >>)
+                                        listener: beginBinaryExpression(>>)
+                                        parsePrecedenceExpression(>>, 13, true)
+                                          parseUnaryExpression(>>, true)
+                                            parsePrimary(>>, expression)
+                                              parseParenthesizedExpressionOrFunctionLiteral(>>)
+                                                parseParenthesizedExpression(>>)
+                                                  parseExpressionInParenthesis(>>)
+                                                    parseExpressionInParenthesisRest(()
+                                                      parseExpression(()
+                                                        parsePrecedenceExpression((, 1, true)
+                                                          parseUnaryExpression((, true)
+                                                            parsePrimary((, expression)
+                                                              parseLiteralInt(()
+                                                                listener: handleLiteralInt(1)
+                                                      ensureCloseParen(1, ()
+                                                  listener: handleParenthesizedExpression(()
+                                        listener: endBinaryExpression(>>)
+                                    listener: endArguments(3, (, ))
+                              listener: handleSend(a, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(main)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_02.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_47009_02.dart.parser.expect
new file mode 100644
index 0000000..1e4544c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_02.dart.parser.expect
@@ -0,0 +1,9 @@
+main() {
+a(b < c, d < e, as >> (1));
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+a[StringToken]([BeginToken]b[StringToken] <[BeginToken] c[StringToken],[SimpleToken] d[StringToken] <[BeginToken] e[StringToken],[SimpleToken] as[KeywordToken] >>[SimpleToken] ([BeginToken]1[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_02.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_47009_02.dart.scanner.expect
new file mode 100644
index 0000000..1e4544c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_02.dart.scanner.expect
@@ -0,0 +1,9 @@
+main() {
+a(b < c, d < e, as >> (1));
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+a[StringToken]([BeginToken]b[StringToken] <[BeginToken] c[StringToken],[SimpleToken] d[StringToken] <[BeginToken] e[StringToken],[SimpleToken] as[KeywordToken] >>[SimpleToken] ([BeginToken]1[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_03.dart b/pkg/front_end/parser_testcases/general/issue_47009_03.dart
new file mode 100644
index 0000000..8479533
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_03.dart
@@ -0,0 +1,3 @@
+main() {
+  a(b < c, d < e, f < g, as >>> (1));
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_03.dart.expect b/pkg/front_end/parser_testcases/general/issue_47009_03.dart.expect
new file mode 100644
index 0000000..1170055
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_03.dart.expect
@@ -0,0 +1,60 @@
+beginCompilationUnit(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(, null)
+      handleNoType()
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(a, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(b, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(b, <)
+          beginBinaryExpression(<)
+            handleIdentifier(c, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(c, ,)
+          endBinaryExpression(<)
+          handleIdentifier(d, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(d, <)
+          beginBinaryExpression(<)
+            handleIdentifier(e, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(e, ,)
+          endBinaryExpression(<)
+          handleIdentifier(f, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(f, <)
+          beginBinaryExpression(<)
+            handleIdentifier(g, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(g, ,)
+          endBinaryExpression(<)
+          handleIdentifier(as, expression)
+          handleNoTypeArguments(>>>)
+          handleNoArguments(>>>)
+          handleSend(as, >>>)
+          beginBinaryExpression(>>>)
+            handleLiteralInt(1)
+            handleParenthesizedExpression(()
+          endBinaryExpression(>>>)
+        endArguments(4, (, ))
+        handleSend(a, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_47009_03.dart.intertwined.expect
new file mode 100644
index 0000000..d685108
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_03.dart.intertwined.expect
@@ -0,0 +1,173 @@
+parseUnit(main)
+  skipErrorTokens(main)
+  listener: beginCompilationUnit(main)
+  syntheticPreviousToken(main)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, a)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(a)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              isNextIdentifier({)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(a, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(a)
+                                parseArguments(a)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              looksLikeFunctionBody())
+                                              parseSend((, expression)
+                                                isNextIdentifier(()
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(b, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(b)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(b, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  isNextIdentifier(<)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(c, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(c)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(c, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseSendOrFunctionLiteral(,, expression)
+                                              parseSend(,, expression)
+                                                isNextIdentifier(,)
+                                                ensureIdentifier(,, expression)
+                                                  listener: handleIdentifier(d, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(d)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(d, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  isNextIdentifier(<)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(e, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(e)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(e, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseSendOrFunctionLiteral(,, expression)
+                                              parseSend(,, expression)
+                                                isNextIdentifier(,)
+                                                ensureIdentifier(,, expression)
+                                                  listener: handleIdentifier(f, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(f)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(f, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  isNextIdentifier(<)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(g, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(g)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(g, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            inPlainSync()
+                                            parseSendOrFunctionLiteral(,, expression)
+                                              parseSend(,, expression)
+                                                isNextIdentifier(,)
+                                                ensureIdentifier(,, expression)
+                                                  inPlainSync()
+                                                  listener: handleIdentifier(as, expression)
+                                                listener: handleNoTypeArguments(>>>)
+                                                parseArgumentsOpt(as)
+                                                  listener: handleNoArguments(>>>)
+                                                listener: handleSend(as, >>>)
+                                        listener: beginBinaryExpression(>>>)
+                                        parsePrecedenceExpression(>>>, 13, true)
+                                          parseUnaryExpression(>>>, true)
+                                            parsePrimary(>>>, expression)
+                                              parseParenthesizedExpressionOrFunctionLiteral(>>>)
+                                                parseParenthesizedExpression(>>>)
+                                                  parseExpressionInParenthesis(>>>)
+                                                    parseExpressionInParenthesisRest(()
+                                                      parseExpression(()
+                                                        parsePrecedenceExpression((, 1, true)
+                                                          parseUnaryExpression((, true)
+                                                            parsePrimary((, expression)
+                                                              parseLiteralInt(()
+                                                                listener: handleLiteralInt(1)
+                                                      ensureCloseParen(1, ()
+                                                  listener: handleParenthesizedExpression(()
+                                        listener: endBinaryExpression(>>>)
+                                    listener: endArguments(4, (, ))
+                              listener: handleSend(a, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(main)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_03.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_47009_03.dart.parser.expect
new file mode 100644
index 0000000..1fbc7ff
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_03.dart.parser.expect
@@ -0,0 +1,9 @@
+main() {
+a(b < c, d < e, f < g, as >>> (1));
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+a[StringToken]([BeginToken]b[StringToken] <[BeginToken] c[StringToken],[SimpleToken] d[StringToken] <[BeginToken] e[StringToken],[SimpleToken] f[StringToken] <[BeginToken] g[StringToken],[SimpleToken] as[KeywordToken] >>>[SimpleToken] ([BeginToken]1[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_47009_03.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_47009_03.dart.scanner.expect
new file mode 100644
index 0000000..1fbc7ff
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_47009_03.dart.scanner.expect
@@ -0,0 +1,9 @@
+main() {
+a(b < c, d < e, f < g, as >>> (1));
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+a[StringToken]([BeginToken]b[StringToken] <[BeginToken] c[StringToken],[SimpleToken] d[StringToken] <[BeginToken] e[StringToken],[SimpleToken] f[StringToken] <[BeginToken] g[StringToken],[SimpleToken] as[KeywordToken] >>>[SimpleToken] ([BeginToken]1[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/testcases/extensions/multi_export.dart b/pkg/front_end/testcases/extensions/multi_export.dart
new file mode 100644
index 0000000..ac46d9e
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/multi_export.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'multi_export_lib1.dart' as lib;
+import 'multi_export_lib2.dart' as lib;
+import 'multi_export_lib3.dart' as lib;
+import 'multi_export_lib4.dart' as lib;
+
+main() {
+  lib.SubClass1()..method();
+  lib.SubClass2()..method();
+  lib.SubClass3()..method();
+  lib.SubClass4()..method();
+}
diff --git a/pkg/front_end/testcases/extensions/multi_export.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/multi_export.dart.textual_outline.expect
new file mode 100644
index 0000000..fe7f24f
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/multi_export.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+import 'multi_export_lib1.dart' as lib;
+import 'multi_export_lib2.dart' as lib;
+import 'multi_export_lib3.dart' as lib;
+import 'multi_export_lib4.dart' as lib;
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/multi_export.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/multi_export.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..fe7f24f
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/multi_export.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+import 'multi_export_lib1.dart' as lib;
+import 'multi_export_lib2.dart' as lib;
+import 'multi_export_lib3.dart' as lib;
+import 'multi_export_lib4.dart' as lib;
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/multi_export.dart.weak.expect b/pkg/front_end/testcases/extensions/multi_export.dart.weak.expect
new file mode 100644
index 0000000..b369c9b
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/multi_export.dart.weak.expect
@@ -0,0 +1,98 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "multi_export_lib1.dart" as mul;
+import "multi_export_lib.dart" as mul2;
+import "multi_export_lib2.dart" as mul3;
+import "multi_export_lib3.dart" as mul4;
+import "multi_export_lib4.dart" as mul5;
+
+import "org-dartlang-testcase:///multi_export_lib1.dart" as lib;
+import "org-dartlang-testcase:///multi_export_lib2.dart" as lib;
+import "org-dartlang-testcase:///multi_export_lib3.dart" as lib;
+import "org-dartlang-testcase:///multi_export_lib4.dart" as lib;
+
+static method main() → dynamic {
+  let final mul::SubClass1 #t1 = new mul::SubClass1::•() in block {
+    mul2::Extension|method<mul::SubClass1>(#t1);
+  } =>#t1;
+  let final mul3::SubClass2 #t2 = new mul3::SubClass2::•() in block {
+    mul2::Extension|method<mul3::SubClass2>(#t2);
+  } =>#t2;
+  let final mul4::SubClass3 #t3 = new mul4::SubClass3::•() in block {
+    mul2::Extension|method<mul4::SubClass3>(#t3);
+  } =>#t3;
+  let final mul5::SubClass4 #t4 = new mul5::SubClass4::•() in block {
+    mul2::Extension|method<mul5::SubClass4>(#t4);
+  } =>#t4;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul;
+import "multi_export_lib.dart" as mul2;
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+
+class SubClass1 extends mul2::Class {
+  synthetic constructor •() → mul::SubClass1
+    : super mul2::Class::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul3;
+import "multi_export_lib.dart" as mul2;
+additionalExports = (mul2::Extension)
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;
+
+class SubClass2 extends mul2::Class {
+  synthetic constructor •() → mul3::SubClass2
+    : super mul2::Class::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul4;
+import "multi_export_lib.dart" as mul2;
+additionalExports = (mul2::Extension)
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;
+
+class SubClass3 extends mul2::Class {
+  synthetic constructor •() → mul4::SubClass3
+    : super mul2::Class::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul5;
+import "multi_export_lib.dart" as mul2;
+additionalExports = (mul2::Extension)
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;
+
+class SubClass4 extends mul2::Class {
+  synthetic constructor •() → mul5::SubClass4
+    : super mul2::Class::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → mul2::Class
+    : super core::Object::•()
+    ;
+}
+extension Extension<T extends mul2::Class> on T {
+  method method = mul2::Extension|method;
+  tearoff method = mul2::Extension|get#method;
+}
+static method Extension|method<T extends mul2::Class>(lowered final mul2::Extension|method::T #this) → dynamic {}
+static method Extension|get#method<T extends mul2::Class>(lowered final mul2::Extension|get#method::T #this) → () → dynamic
+  return () → dynamic => mul2::Extension|method<mul2::Extension|get#method::T>(#this);
diff --git a/pkg/front_end/testcases/extensions/multi_export.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/multi_export.dart.weak.outline.expect
new file mode 100644
index 0000000..73fb1e0
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/multi_export.dart.weak.outline.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "org-dartlang-testcase:///multi_export_lib1.dart" as lib;
+import "org-dartlang-testcase:///multi_export_lib2.dart" as lib;
+import "org-dartlang-testcase:///multi_export_lib3.dart" as lib;
+import "org-dartlang-testcase:///multi_export_lib4.dart" as lib;
+
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "multi_export_lib.dart" as mul;
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+
+class SubClass1 extends mul::Class {
+  synthetic constructor •() → self2::SubClass1
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as self3;
+import "multi_export_lib.dart" as mul;
+additionalExports = (mul::Extension)
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;
+
+class SubClass2 extends mul::Class {
+  synthetic constructor •() → self3::SubClass2
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as self4;
+import "multi_export_lib.dart" as mul;
+additionalExports = (mul::Extension)
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;
+
+class SubClass3 extends mul::Class {
+  synthetic constructor •() → self4::SubClass3
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as self5;
+import "multi_export_lib.dart" as mul;
+additionalExports = (mul::Extension)
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;
+
+class SubClass4 extends mul::Class {
+  synthetic constructor •() → self5::SubClass4
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → mul::Class
+    ;
+}
+extension Extension<T extends mul::Class> on T {
+  method method = mul::Extension|method;
+  tearoff method = mul::Extension|get#method;
+}
+static method Extension|method<T extends mul::Class>(lowered final mul::Extension|method::T #this) → dynamic
+  ;
+static method Extension|get#method<T extends mul::Class>(lowered final mul::Extension|get#method::T #this) → () → dynamic
+  return () → dynamic => mul::Extension|method<mul::Extension|get#method::T>(#this);
diff --git a/pkg/front_end/testcases/extensions/multi_export.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/multi_export.dart.weak.transformed.expect
new file mode 100644
index 0000000..b369c9b
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/multi_export.dart.weak.transformed.expect
@@ -0,0 +1,98 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "multi_export_lib1.dart" as mul;
+import "multi_export_lib.dart" as mul2;
+import "multi_export_lib2.dart" as mul3;
+import "multi_export_lib3.dart" as mul4;
+import "multi_export_lib4.dart" as mul5;
+
+import "org-dartlang-testcase:///multi_export_lib1.dart" as lib;
+import "org-dartlang-testcase:///multi_export_lib2.dart" as lib;
+import "org-dartlang-testcase:///multi_export_lib3.dart" as lib;
+import "org-dartlang-testcase:///multi_export_lib4.dart" as lib;
+
+static method main() → dynamic {
+  let final mul::SubClass1 #t1 = new mul::SubClass1::•() in block {
+    mul2::Extension|method<mul::SubClass1>(#t1);
+  } =>#t1;
+  let final mul3::SubClass2 #t2 = new mul3::SubClass2::•() in block {
+    mul2::Extension|method<mul3::SubClass2>(#t2);
+  } =>#t2;
+  let final mul4::SubClass3 #t3 = new mul4::SubClass3::•() in block {
+    mul2::Extension|method<mul4::SubClass3>(#t3);
+  } =>#t3;
+  let final mul5::SubClass4 #t4 = new mul5::SubClass4::•() in block {
+    mul2::Extension|method<mul5::SubClass4>(#t4);
+  } =>#t4;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul;
+import "multi_export_lib.dart" as mul2;
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+
+class SubClass1 extends mul2::Class {
+  synthetic constructor •() → mul::SubClass1
+    : super mul2::Class::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul3;
+import "multi_export_lib.dart" as mul2;
+additionalExports = (mul2::Extension)
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;
+
+class SubClass2 extends mul2::Class {
+  synthetic constructor •() → mul3::SubClass2
+    : super mul2::Class::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul4;
+import "multi_export_lib.dart" as mul2;
+additionalExports = (mul2::Extension)
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;
+
+class SubClass3 extends mul2::Class {
+  synthetic constructor •() → mul4::SubClass3
+    : super mul2::Class::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul5;
+import "multi_export_lib.dart" as mul2;
+additionalExports = (mul2::Extension)
+
+import "org-dartlang-testcase:///multi_export_lib.dart";
+export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;
+
+class SubClass4 extends mul2::Class {
+  synthetic constructor •() → mul5::SubClass4
+    : super mul2::Class::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mul2;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → mul2::Class
+    : super core::Object::•()
+    ;
+}
+extension Extension<T extends mul2::Class> on T {
+  method method = mul2::Extension|method;
+  tearoff method = mul2::Extension|get#method;
+}
+static method Extension|method<T extends mul2::Class>(lowered final mul2::Extension|method::T #this) → dynamic {}
+static method Extension|get#method<T extends mul2::Class>(lowered final mul2::Extension|get#method::T #this) → () → dynamic
+  return () → dynamic => mul2::Extension|method<mul2::Extension|get#method::T>(#this);
diff --git a/pkg/front_end/testcases/extensions/multi_export_lib.dart b/pkg/front_end/testcases/extensions/multi_export_lib.dart
new file mode 100644
index 0000000..3c35b93
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/multi_export_lib.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Class {}
+
+extension Extension<T extends Class> on T {
+  method() {}
+}
diff --git a/pkg/front_end/testcases/extensions/multi_export_lib1.dart b/pkg/front_end/testcases/extensions/multi_export_lib1.dart
new file mode 100644
index 0000000..a9afcf3
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/multi_export_lib1.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'multi_export_lib.dart';
+//export 'multi_export_lib.dart' show Extension;
+
+class SubClass1 extends Class {}
diff --git a/pkg/front_end/testcases/extensions/multi_export_lib2.dart b/pkg/front_end/testcases/extensions/multi_export_lib2.dart
new file mode 100644
index 0000000..16f208a
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/multi_export_lib2.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'multi_export_lib.dart';
+export 'multi_export_lib.dart' show Extension;
+
+class SubClass2 extends Class {}
diff --git a/pkg/front_end/testcases/extensions/multi_export_lib3.dart b/pkg/front_end/testcases/extensions/multi_export_lib3.dart
new file mode 100644
index 0000000..fd2c3a9
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/multi_export_lib3.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'multi_export_lib.dart';
+export 'multi_export_lib.dart' show Extension;
+
+class SubClass3 extends Class {}
diff --git a/pkg/front_end/testcases/extensions/multi_export_lib4.dart b/pkg/front_end/testcases/extensions/multi_export_lib4.dart
new file mode 100644
index 0000000..6267625
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/multi_export_lib4.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'multi_export_lib.dart';
+export 'multi_export_lib.dart' show Extension;
+
+class SubClass4 extends Class {}
diff --git a/pkg/front_end/testcases/extensions/nested_on_types.dart b/pkg/front_end/testcases/extensions/nested_on_types.dart
index e1fc07d..da3d2d7 100644
--- a/pkg/front_end/testcases/extensions/nested_on_types.dart
+++ b/pkg/front_end/testcases/extensions/nested_on_types.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 class A<T> {}
 
 extension Extension<T> on A<A<T>> {
diff --git a/pkg/front_end/testcases/general/issue_47008_01.dart b/pkg/front_end/testcases/general/issue_47008_01.dart
new file mode 100644
index 0000000..7980b2e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_01.dart
@@ -0,0 +1,11 @@
+main() {
+  int b = 1;
+  int c = 2;
+  int d = 3;
+  int e = 4;
+  a(b < c, d < e, 1 >> (2));
+}
+
+void a(bool x, bool y, int z) {
+  print("$x $y $z");
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/issue_47008_01.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue_47008_01.dart.textual_outline.expect
new file mode 100644
index 0000000..c8a6141
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_01.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+main() {}
+void a(bool x, bool y, int z) {}
diff --git a/pkg/front_end/testcases/general/issue_47008_01.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue_47008_01.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c8a6141
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_01.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+void a(bool x, bool y, int z) {}
diff --git a/pkg/front_end/testcases/general/issue_47008_01.dart.weak.expect b/pkg/front_end/testcases/general/issue_47008_01.dart.weak.expect
new file mode 100644
index 0000000..383dfab
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_01.dart.weak.expect
@@ -0,0 +1,14 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int d = 3;
+  core::int e = 4;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, d.{core::num::<}(e){(core::num) → core::bool}, 1.{core::int::>>}(2){(core::int) → core::int});
+}
+static method a(core::bool x, core::bool y, core::int z) → void {
+  core::print("${x} ${y} ${z}");
+}
diff --git a/pkg/front_end/testcases/general/issue_47008_01.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue_47008_01.dart.weak.outline.expect
new file mode 100644
index 0000000..35353cd
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_01.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+  ;
+static method a(core::bool x, core::bool y, core::int z) → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue_47008_01.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue_47008_01.dart.weak.transformed.expect
new file mode 100644
index 0000000..54bfd70
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_01.dart.weak.transformed.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int d = 3;
+  core::int e = 4;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, d.{core::num::<}(e){(core::num) → core::bool}, 1.{core::int::>>}(2){(core::int) → core::int});
+}
+static method a(core::bool x, core::bool y, core::int z) → void {
+  core::print("${x} ${y} ${z}");
+}
+
+
+Extra constant evaluation status:
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue_47008_01.dart:6:21 -> IntConstant(0)
+Extra constant evaluation: evaluated: 13, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue_47008_02.dart b/pkg/front_end/testcases/general/issue_47008_02.dart
new file mode 100644
index 0000000..996590a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_02.dart
@@ -0,0 +1,13 @@
+main() {
+  int b = 1;
+  int c = 2;
+  int d = 3;
+  int e = 4;
+  int f = 5;
+  int g = 6;
+  a(b < c, d < e, f < g, 1 >>> (2));
+}
+
+void a(bool x, bool y, bool z1, int z2) {
+  print("$x $y $z1 $z2");
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/issue_47008_02.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue_47008_02.dart.textual_outline.expect
new file mode 100644
index 0000000..3f2b123
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_02.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+main() {}
+void a(bool x, bool y, bool z1, int z2) {}
diff --git a/pkg/front_end/testcases/general/issue_47008_02.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue_47008_02.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3f2b123
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_02.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+void a(bool x, bool y, bool z1, int z2) {}
diff --git a/pkg/front_end/testcases/general/issue_47008_02.dart.weak.expect b/pkg/front_end/testcases/general/issue_47008_02.dart.weak.expect
new file mode 100644
index 0000000..d448313
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_02.dart.weak.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int d = 3;
+  core::int e = 4;
+  core::int f = 5;
+  core::int g = 6;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, d.{core::num::<}(e){(core::num) → core::bool}, f.{core::num::<}(g){(core::num) → core::bool}, 1.{core::int::>>>}(2){(core::int) → core::int});
+}
+static method a(core::bool x, core::bool y, core::bool z1, core::int z2) → void {
+  core::print("${x} ${y} ${z1} ${z2}");
+}
diff --git a/pkg/front_end/testcases/general/issue_47008_02.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue_47008_02.dart.weak.outline.expect
new file mode 100644
index 0000000..b349da9
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_02.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+  ;
+static method a(core::bool x, core::bool y, core::bool z1, core::int z2) → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue_47008_02.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue_47008_02.dart.weak.transformed.expect
new file mode 100644
index 0000000..bc7f96a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47008_02.dart.weak.transformed.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int d = 3;
+  core::int e = 4;
+  core::int f = 5;
+  core::int g = 6;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, d.{core::num::<}(e){(core::num) → core::bool}, f.{core::num::<}(g){(core::num) → core::bool}, 1.{core::int::>>>}(2){(core::int) → core::int});
+}
+static method a(core::bool x, core::bool y, core::bool z1, core::int z2) → void {
+  core::print("${x} ${y} ${z1} ${z2}");
+}
+
+
+Extra constant evaluation status:
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///issue_47008_02.dart:8:28 -> IntConstant(0)
+Extra constant evaluation: evaluated: 17, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/issue_47009_01.dart b/pkg/front_end/testcases/general/issue_47009_01.dart
new file mode 100644
index 0000000..127b5fb
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_01.dart
@@ -0,0 +1,10 @@
+main() {
+  int b = 1;
+  int c = 2;
+  int as = 3;
+  a(b < c, as > (1));
+}
+
+void a(bool x, bool y) {
+  print("$x $y");
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/issue_47009_01.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue_47009_01.dart.textual_outline.expect
new file mode 100644
index 0000000..8c1c1ad
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_01.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+main() {}
+void a(bool x, bool y) {}
diff --git a/pkg/front_end/testcases/general/issue_47009_01.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue_47009_01.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8c1c1ad
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_01.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+void a(bool x, bool y) {}
diff --git a/pkg/front_end/testcases/general/issue_47009_01.dart.weak.expect b/pkg/front_end/testcases/general/issue_47009_01.dart.weak.expect
new file mode 100644
index 0000000..a9de674
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_01.dart.weak.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int as = 3;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, as.{core::num::>}(1){(core::num) → core::bool});
+}
+static method a(core::bool x, core::bool y) → void {
+  core::print("${x} ${y}");
+}
diff --git a/pkg/front_end/testcases/general/issue_47009_01.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue_47009_01.dart.weak.outline.expect
new file mode 100644
index 0000000..1e4d67b
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_01.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+  ;
+static method a(core::bool x, core::bool y) → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue_47009_01.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue_47009_01.dart.weak.transformed.expect
new file mode 100644
index 0000000..a9de674
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_01.dart.weak.transformed.expect
@@ -0,0 +1,13 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int as = 3;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, as.{core::num::>}(1){(core::num) → core::bool});
+}
+static method a(core::bool x, core::bool y) → void {
+  core::print("${x} ${y}");
+}
diff --git a/pkg/front_end/testcases/general/issue_47009_02.dart b/pkg/front_end/testcases/general/issue_47009_02.dart
new file mode 100644
index 0000000..fc8dd12
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_02.dart
@@ -0,0 +1,12 @@
+main() {
+  int b = 1;
+  int c = 2;
+  int d = 3;
+  int e = 4;
+  int as = 5;
+  a(b < c, d < e, as >> (1));
+}
+
+void a(bool x, bool y, int z) {
+  print("$x $y $z");
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/issue_47009_02.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue_47009_02.dart.textual_outline.expect
new file mode 100644
index 0000000..c8a6141
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_02.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+main() {}
+void a(bool x, bool y, int z) {}
diff --git a/pkg/front_end/testcases/general/issue_47009_02.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue_47009_02.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c8a6141
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_02.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+void a(bool x, bool y, int z) {}
diff --git a/pkg/front_end/testcases/general/issue_47009_02.dart.weak.expect b/pkg/front_end/testcases/general/issue_47009_02.dart.weak.expect
new file mode 100644
index 0000000..c5218bb
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_02.dart.weak.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int d = 3;
+  core::int e = 4;
+  core::int as = 5;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, d.{core::num::<}(e){(core::num) → core::bool}, as.{core::int::>>}(1){(core::int) → core::int});
+}
+static method a(core::bool x, core::bool y, core::int z) → void {
+  core::print("${x} ${y} ${z}");
+}
diff --git a/pkg/front_end/testcases/general/issue_47009_02.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue_47009_02.dart.weak.outline.expect
new file mode 100644
index 0000000..35353cd
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_02.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+  ;
+static method a(core::bool x, core::bool y, core::int z) → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue_47009_02.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue_47009_02.dart.weak.transformed.expect
new file mode 100644
index 0000000..c5218bb
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_02.dart.weak.transformed.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int d = 3;
+  core::int e = 4;
+  core::int as = 5;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, d.{core::num::<}(e){(core::num) → core::bool}, as.{core::int::>>}(1){(core::int) → core::int});
+}
+static method a(core::bool x, core::bool y, core::int z) → void {
+  core::print("${x} ${y} ${z}");
+}
diff --git a/pkg/front_end/testcases/general/issue_47009_03.dart b/pkg/front_end/testcases/general/issue_47009_03.dart
new file mode 100644
index 0000000..50afad9
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_03.dart
@@ -0,0 +1,14 @@
+main() {
+  int b = 1;
+  int c = 2;
+  int d = 3;
+  int e = 4;
+  int f = 5;
+  int g = 6;
+  int as = 7;
+  a(b < c, d < e, f < g, as >>> (1));
+}
+
+void a(bool x, bool y, bool z1, int z2) {
+  print("$x $y $z1 $z2");
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/issue_47009_03.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue_47009_03.dart.textual_outline.expect
new file mode 100644
index 0000000..3f2b123
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_03.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+main() {}
+void a(bool x, bool y, bool z1, int z2) {}
diff --git a/pkg/front_end/testcases/general/issue_47009_03.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue_47009_03.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3f2b123
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_03.dart.textual_outline_modelled.expect
@@ -0,0 +1,2 @@
+main() {}
+void a(bool x, bool y, bool z1, int z2) {}
diff --git a/pkg/front_end/testcases/general/issue_47009_03.dart.weak.expect b/pkg/front_end/testcases/general/issue_47009_03.dart.weak.expect
new file mode 100644
index 0000000..1d366c4
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_03.dart.weak.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int d = 3;
+  core::int e = 4;
+  core::int f = 5;
+  core::int g = 6;
+  core::int as = 7;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, d.{core::num::<}(e){(core::num) → core::bool}, f.{core::num::<}(g){(core::num) → core::bool}, as.{core::int::>>>}(1){(core::int) → core::int});
+}
+static method a(core::bool x, core::bool y, core::bool z1, core::int z2) → void {
+  core::print("${x} ${y} ${z1} ${z2}");
+}
diff --git a/pkg/front_end/testcases/general/issue_47009_03.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue_47009_03.dart.weak.outline.expect
new file mode 100644
index 0000000..b349da9
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_03.dart.weak.outline.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+  ;
+static method a(core::bool x, core::bool y, core::bool z1, core::int z2) → void
+  ;
diff --git a/pkg/front_end/testcases/general/issue_47009_03.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue_47009_03.dart.weak.transformed.expect
new file mode 100644
index 0000000..1d366c4
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_47009_03.dart.weak.transformed.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic {
+  core::int b = 1;
+  core::int c = 2;
+  core::int d = 3;
+  core::int e = 4;
+  core::int f = 5;
+  core::int g = 6;
+  core::int as = 7;
+  self::a(b.{core::num::<}(c){(core::num) → core::bool}, d.{core::num::<}(e){(core::num) → core::bool}, f.{core::num::<}(g){(core::num) → core::bool}, as.{core::int::>>>}(1){(core::int) → core::int});
+}
+static method a(core::bool x, core::bool y, core::bool z1, core::int z2) → void {
+  core::print("${x} ${y} ${z1} ${z2}");
+}
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 9093936..3cd7ca1 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -69,7 +69,6 @@
 general/error_recovery/issue_39958_04: RuntimeError
 general/error_recovery/yield_not_in_generator: RuntimeError
 general/expressions: RuntimeError
-general/external_import: RuntimeError
 general/getter_vs_setter_type: TypeCheckError
 general/incomplete_field_formal_parameter: RuntimeError
 general/infer_field_from_multiple: TypeCheckError
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index bf0cb40..06ba968 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -368,8 +368,8 @@
   UriReference fileUri;
   FileOffset fileOffset;
   FileOffset fileEndOffset;
-  UInt flags (isFinal, isConst, isStatic, isCovariant,
-                isGenericCovariantImpl, isLate, isExtensionMember,
+  UInt flags (isFinal, isConst, isStatic, isCovariantByDeclaration,
+                isCovariantByClass, isLate, isExtensionMember,
                 isNonNullableByDefault, isInternalImplementation);
   Name name;
   List<Expression> annotations;
@@ -1377,8 +1377,8 @@
 
   List<Expression> annotations;
 
-  Byte flags (isFinal, isConst, isFieldFormal, isCovariant,
-              isGenericCovariantImpl, isLate, isRequired, isLowered);
+  Byte flags (isFinal, isConst, isFieldFormal, isCovariantByDeclaration,
+              isCovariantByClass, isLate, isRequired, isLowered);
   // For named parameters, this is the parameter name.
   // For other variables, the name is cosmetic, may be empty,
   // and is not necessarily unique.
@@ -1501,7 +1501,7 @@
 
 type TypeParameter {
   // Note: there is no tag on TypeParameter
-  Byte flags (isGenericCovariantImpl);
+  Byte flags (isCovariantByClass);
   List<Expression> annotations;
   Byte variance; // Index into the Variance enum above
   StringReference name; // Cosmetic, may be empty, not unique.
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index a95b5d3..9a4165c 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -1865,7 +1865,7 @@
   Field.mutable(Name name,
       {this.type: const DynamicType(),
       this.initializer,
-      bool isCovariant: false,
+      bool isCovariantByDeclaration: false,
       bool isFinal: false,
       bool isStatic: false,
       bool isLate: false,
@@ -1879,7 +1879,7 @@
     // ignore: unnecessary_null_comparison
     assert(type != null);
     initializer?.parent = this;
-    this.isCovariant = isCovariant;
+    this.isCovariantByDeclaration = isCovariantByDeclaration;
     this.isFinal = isFinal;
     this.isStatic = isStatic;
     this.isLate = isLate;
@@ -1889,7 +1889,7 @@
   Field.immutable(Name name,
       {this.type: const DynamicType(),
       this.initializer,
-      bool isCovariant: false,
+      bool isCovariantByDeclaration: false,
       bool isFinal: false,
       bool isConst: false,
       bool isStatic: false,
@@ -1902,7 +1902,7 @@
     // ignore: unnecessary_null_comparison
     assert(type != null);
     initializer?.parent = this;
-    this.isCovariant = isCovariant;
+    this.isCovariantByDeclaration = isCovariantByDeclaration;
     this.isFinal = isFinal;
     this.isConst = isConst;
     this.isStatic = isStatic;
@@ -1922,14 +1922,14 @@
   static const int FlagConst = 1 << 1;
   static const int FlagStatic = 1 << 2;
   static const int FlagCovariant = 1 << 3;
-  static const int FlagGenericCovariantImpl = 1 << 4;
+  static const int FlagCovariantByClass = 1 << 4;
   static const int FlagLate = 1 << 5;
   static const int FlagExtensionMember = 1 << 6;
   static const int FlagNonNullableByDefault = 1 << 7;
   static const int FlagInternalImplementation = 1 << 8;
 
   /// Whether the field is declared with the `covariant` keyword.
-  bool get isCovariant => flags & FlagCovariant != 0;
+  bool get isCovariantByDeclaration => flags & FlagCovariant != 0;
 
   bool get isFinal => flags & FlagFinal != 0;
 
@@ -1946,7 +1946,7 @@
   ///
   /// When `true`, runtime checks may need to be performed; see
   /// [DispatchCategory] for details.
-  bool get isGenericCovariantImpl => flags & FlagGenericCovariantImpl != 0;
+  bool get isCovariantByClass => flags & FlagCovariantByClass != 0;
 
   /// Whether the field is declared with the `late` keyword.
   bool get isLate => flags & FlagLate != 0;
@@ -1958,7 +1958,7 @@
   // lowering.
   bool get isInternalImplementation => flags & FlagInternalImplementation != 0;
 
-  void set isCovariant(bool value) {
+  void set isCovariantByDeclaration(bool value) {
     flags = value ? (flags | FlagCovariant) : (flags & ~FlagCovariant);
   }
 
@@ -1979,10 +1979,10 @@
         value ? (flags | FlagExtensionMember) : (flags & ~FlagExtensionMember);
   }
 
-  void set isGenericCovariantImpl(bool value) {
+  void set isCovariantByClass(bool value) {
     flags = value
-        ? (flags | FlagGenericCovariantImpl)
-        : (flags & ~FlagGenericCovariantImpl);
+        ? (flags | FlagCovariantByClass)
+        : (flags & ~FlagCovariantByClass);
   }
 
   void set isLate(bool value) {
@@ -2396,8 +2396,8 @@
   /// The stub target is `null`.
   Regular,
 
-  /// An abstract procedure inserted to add `isCovariant` and
-  /// `isGenericCovariantImpl` to parameters for a set of overridden members.
+  /// An abstract procedure inserted to add `isCovariantByDeclaration` and
+  /// `isCovariantByClass` to parameters for a set of overridden members.
   ///
   /// The stub is inserted when not all of the overridden members agree on
   /// the covariance flags. For instance:
@@ -2422,8 +2422,8 @@
   /// The stub target is one of the overridden members.
   AbstractForwardingStub,
 
-  /// A concrete procedure inserted to add `isCovariant` and
-  /// `isGenericCovariantImpl` checks to parameters before calling the
+  /// A concrete procedure inserted to add `isCovariantByDeclaration` and
+  /// `isCovariantByClass` checks to parameters before calling the
   /// overridden member in the superclass.
   ///
   /// The stub is inserted when not all of the overridden members agree on
@@ -9927,7 +9927,7 @@
       bool isFinal: false,
       bool isConst: false,
       bool isFieldFormal: false,
-      bool isCovariant: false,
+      bool isCovariantByDeclaration: false,
       bool isLate: false,
       bool isRequired: false,
       bool isLowered: false}) {
@@ -9940,7 +9940,7 @@
       this.isFinal = isFinal;
       this.isConst = isConst;
       this.isFieldFormal = isFieldFormal;
-      this.isCovariant = isCovariant;
+      this.isCovariantByDeclaration = isCovariantByDeclaration;
       this.isLate = isLate;
       this.isRequired = isRequired;
       this.isLowered = isLowered;
@@ -9981,7 +9981,7 @@
 
   /// Whether the parameter is declared with the `covariant` keyword.
   // TODO(johnniwinther): Rename to isCovariantByDeclaration
-  bool get isCovariant => flags & FlagCovariant != 0;
+  bool get isCovariantByDeclaration => flags & FlagCovariant != 0;
 
   /// Whether the variable is declared as a field formal parameter of
   /// a constructor.
@@ -9995,7 +9995,7 @@
   /// When `true`, runtime checks may need to be performed; see
   /// [DispatchCategory] for details.
   // TODO(johnniwinther): Rename to isCovariantByClass
-  bool get isGenericCovariantImpl => flags & FlagGenericCovariantImpl != 0;
+  bool get isCovariantByClass => flags & FlagGenericCovariantImpl != 0;
 
   /// Whether the variable is declared with the `late` keyword.
   ///
@@ -10040,7 +10040,7 @@
     flags = value ? (flags | FlagConst) : (flags & ~FlagConst);
   }
 
-  void set isCovariant(bool value) {
+  void set isCovariantByDeclaration(bool value) {
     flags = value ? (flags | FlagCovariant) : (flags & ~FlagCovariant);
   }
 
@@ -10049,7 +10049,7 @@
     flags = value ? (flags | FlagFieldFormal) : (flags & ~FlagFieldFormal);
   }
 
-  void set isGenericCovariantImpl(bool value) {
+  void set isCovariantByClass(bool value) {
     flags = value
         ? (flags | FlagGenericCovariantImpl)
         : (flags & ~FlagGenericCovariantImpl);
@@ -12032,7 +12032,7 @@
         defaultType = defaultType ?? unsetDefaultTypeSentinel;
 
   // Must match serialized bit positions.
-  static const int FlagGenericCovariantImpl = 1 << 0;
+  static const int FlagCovariantByClass = 1 << 0;
 
   /// If this [TypeParameter] is a type parameter of a generic method, indicates
   /// whether the method implementation needs to contain a runtime type check to
@@ -12040,12 +12040,12 @@
   ///
   /// When `true`, runtime checks may need to be performed; see
   /// [DispatchCategory] for details.
-  bool get isGenericCovariantImpl => flags & FlagGenericCovariantImpl != 0;
+  bool get isCovariantByClass => flags & FlagCovariantByClass != 0;
 
-  void set isGenericCovariantImpl(bool value) {
+  void set isCovariantByClass(bool value) {
     flags = value
-        ? (flags | FlagGenericCovariantImpl)
-        : (flags & ~FlagGenericCovariantImpl);
+        ? (flags | FlagCovariantByClass)
+        : (flags & ~FlagCovariantByClass);
   }
 
   @override
diff --git a/pkg/kernel/lib/naive_type_checker.dart b/pkg/kernel/lib/naive_type_checker.dart
index 7470718..0f86d1c 100644
--- a/pkg/kernel/lib/naive_type_checker.dart
+++ b/pkg/kernel/lib/naive_type_checker.dart
@@ -75,11 +75,13 @@
       if (isSetter) {
         final DartType ownType = setterType(host, ownMember);
         final DartType superType = setterType(host, superMember);
-        final bool isCovariant = ownMember is Field
-            ? ownMember.isCovariant
-            : ownMember.function!.positionalParameters[0].isCovariant;
-        if (!_isValidParameterOverride(isCovariant, ownType, superType)) {
-          if (isCovariant) {
+        final bool isCovariantByDeclaration = ownMember is Field
+            ? ownMember.isCovariantByDeclaration
+            : ownMember
+                .function!.positionalParameters[0].isCovariantByDeclaration;
+        if (!_isValidParameterOverride(
+            isCovariantByDeclaration, ownType, superType)) {
+          if (isCovariantByDeclaration) {
             return failures.reportInvalidOverride(ownMember, superMember, '''
 ${ownType} is neither a subtype nor supertype of ${superType}
 ''');
@@ -198,7 +200,7 @@
       final VariableDeclaration superParameter =
           superFunction.positionalParameters[i];
       if (!_isValidParameterOverride(
-          ownParameter.isCovariant,
+          ownParameter.isCovariantByDeclaration,
           ownSubstitution.substituteType(ownParameter.type),
           superSubstitution.substituteType(superParameter.type))) {
         return '''
@@ -227,7 +229,7 @@
       }
 
       if (!_isValidParameterOverride(
-          ownParameter.isCovariant,
+          ownParameter.isCovariantByDeclaration,
           ownSubstitution.substituteType(ownParameter.type),
           superSubstitution.substituteType(superParameter.type))) {
         return '''
@@ -244,11 +246,11 @@
   /// Checks whether parameter with [ownParameterType] type is a valid override
   /// for parameter with [superParameterType] type taking into account its
   /// covariance and applying type parameter [substitution] if necessary.
-  bool _isValidParameterOverride(bool isCovariant, DartType ownParameterType,
-      DartType superParameterType) {
+  bool _isValidParameterOverride(bool isCovariantByDeclaration,
+      DartType ownParameterType, DartType superParameterType) {
     if (_isSubtypeOf(superParameterType, ownParameterType)) {
       return true;
-    } else if (isCovariant &&
+    } else if (isCovariantByDeclaration &&
         _isSubtypeOf(ownParameterType, superParameterType)) {
       return true;
     } else {
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 5485bdc..c7db100 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -1123,8 +1123,8 @@
     writeIndentation();
     writeModifier(node.isLate, 'late');
     writeModifier(node.isStatic, 'static');
-    writeModifier(node.isCovariant, 'covariant');
-    writeModifier(node.isGenericCovariantImpl, 'generic-covariant-impl');
+    writeModifier(node.isCovariantByDeclaration, 'covariant');
+    writeModifier(node.isCovariantByClass, 'generic-covariant-impl');
     writeModifier(node.isFinal, 'final');
     writeModifier(node.isConst, 'const');
     // Only show implicit getter/setter modifiers in cases where they are
@@ -2404,8 +2404,8 @@
     writeModifier(node.isLowered, 'lowered');
     writeModifier(node.isLate, 'late');
     writeModifier(node.isRequired, 'required');
-    writeModifier(node.isCovariant, 'covariant');
-    writeModifier(node.isGenericCovariantImpl, 'generic-covariant-impl');
+    writeModifier(node.isCovariantByDeclaration, 'covariant');
+    writeModifier(node.isCovariantByClass, 'generic-covariant-impl');
     writeModifier(node.isFinal, 'final');
     writeModifier(node.isConst, 'const');
     // ignore: unnecessary_null_comparison
@@ -2623,7 +2623,7 @@
 
   @override
   void visitTypeParameter(TypeParameter node) {
-    writeModifier(node.isGenericCovariantImpl, 'generic-covariant-impl');
+    writeModifier(node.isCovariantByClass, 'generic-covariant-impl');
     writeAnnotationList(node.annotations, separateLines: false);
     if (node.variance != Variance.covariant) {
       writeWord(const <String>[
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index 0f6e9f5..aec6e35 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -1980,7 +1980,7 @@
   Field.FlagConst: "const",
   Field.FlagStatic: "static",
   Field.FlagCovariant: "covariant",
-  Field.FlagGenericCovariantImpl: "generic-covariant-impl",
+  Field.FlagCovariantByClass: "generic-covariant-impl",
   Field.FlagLate: "late",
   Field.FlagExtensionMember: "extension-member",
   Field.FlagNonNullableByDefault: "non-nullable-by-default",
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
index 6c80c5a..d05be90 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
@@ -139,8 +139,8 @@
           setters.remove(field.name);
           VariableDeclaration parameter =
               setter.function.positionalParameters.first;
-          clone.isCovariant = parameter.isCovariant;
-          clone.isGenericCovariantImpl = parameter.isGenericCovariantImpl;
+          clone.isCovariantByDeclaration = parameter.isCovariantByDeclaration;
+          clone.isCovariantByClass = parameter.isCovariantByClass;
         }
         nonSetters.remove(field.name);
         class_.addField(clone);
@@ -225,10 +225,10 @@
         // TODO(kernel team): The named parameters are not sorted,
         // this might not be correct.
         for (int j = 0; j < src.namedParameters.length; ++j) {
-          dst.namedParameters[j].isCovariant =
-              src.namedParameters[j].isCovariant;
-          dst.namedParameters[j].isGenericCovariantImpl =
-              src.namedParameters[j].isGenericCovariantImpl;
+          dst.namedParameters[j].isCovariantByDeclaration =
+              src.namedParameters[j].isCovariantByDeclaration;
+          dst.namedParameters[j].isCovariantByClass =
+              src.namedParameters[j].isCovariantByClass;
         }
 
         class_.procedures[originalIndex] = clone;
diff --git a/pkg/vm/lib/transformations/call_site_annotator.dart b/pkg/vm/lib/transformations/call_site_annotator.dart
index 691ba84..e0267ca 100644
--- a/pkg/vm/lib/transformations/call_site_annotator.dart
+++ b/pkg/vm/lib/transformations/call_site_annotator.dart
@@ -110,7 +110,7 @@
   /// Return [true] if the given list of [VariableDeclaration] contains
   /// any annotated with generic-covariant-impl.
   static bool containsGenericCovariantImpl(List<VariableDeclaration> decls) =>
-      decls.any((p) => p.isGenericCovariantImpl);
+      decls.any((p) => p.isCovariantByClass);
 
   /// Returns [true] if the given [member] has any parameters annotated with
   /// generic-covariant-impl attribute.
@@ -120,7 +120,7 @@
               member.function.positionalParameters) ||
           containsGenericCovariantImpl(member.function.namedParameters);
     } else if (member is Field) {
-      return member.isGenericCovariantImpl;
+      return member.isCovariantByClass;
     }
 
     return false;
diff --git a/pkg/vm/lib/transformations/type_flow/analysis.dart b/pkg/vm/lib/transformations/type_flow/analysis.dart
index 75eff47..989ad83 100644
--- a/pkg/vm/lib/transformations/type_flow/analysis.dart
+++ b/pkg/vm/lib/transformations/type_flow/analysis.dart
@@ -195,12 +195,12 @@
     final function = selector.member.function;
     if (function != null) {
       typeChecksNeeded =
-          function.typeParameters.any((t) => t.isGenericCovariantImpl);
+          function.typeParameters.any((t) => t.isCovariantByClass);
     } else {
       Field field = selector.member as Field;
       if (selector.callKind == CallKind.PropertySet) {
         // TODO(dartbug.com/40615): Use TFA results to improve this criterion.
-        typeChecksNeeded = field.isGenericCovariantImpl;
+        typeChecksNeeded = field.isCovariantByClass;
       }
     }
   }
@@ -1499,7 +1499,7 @@
     _FieldValue? fieldValue = _fieldValues[field];
     if (fieldValue == null) {
       Summary? typeGuardSummary = null;
-      if (field.isGenericCovariantImpl) {
+      if (field.isCovariantByClass) {
         typeGuardSummary = summaryCollector.createSummary(field,
             fieldSummaryType: FieldSummaryType.kFieldGuard);
       }
diff --git a/pkg/vm/lib/transformations/type_flow/signature_shaking.dart b/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
index f09fc1a..7ec6ff9 100644
--- a/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
+++ b/pkg/vm/lib/transformations/type_flow/signature_shaking.dart
@@ -190,7 +190,7 @@
     // Covariant parameters have implicit type checks, which count as reads.
     // When run in weak mode with null assertions enabled, parameters with
     // non-nullable types have implicit null checks, which count as reads.
-    if ((param.isCovariant || param.isGenericCovariantImpl) ||
+    if ((param.isCovariantByDeclaration || param.isCovariantByClass) ||
         (!shaker.typeFlowAnalysis.target.flags.enableNullSafety &&
             param.type.nullability == Nullability.nonNullable &&
             (type == null || type is NullableType))) {
diff --git a/pkg/vm/lib/transformations/type_flow/summary.dart b/pkg/vm/lib/transformations/type_flow/summary.dart
index fb18cec..72b0b68 100644
--- a/pkg/vm/lib/transformations/type_flow/summary.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary.dart
@@ -546,7 +546,7 @@
 
   TypeCheck(this.arg, this.type, this.node, this.staticType, this.kind)
       : isTestedOnlyOnCheckedEntryPoint =
-            node is VariableDeclaration && !node.isCovariant;
+            node is VariableDeclaration && !node.isCovariantByDeclaration;
 
   @override
   void accept(StatementVisitor visitor) => visitor.visitTypeCheck(this);
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index 49ce917..952eefe 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -801,7 +801,7 @@
   }
 
   bool _useTypeCheckForParameter(VariableDeclaration decl) {
-    return decl.isCovariant || decl.isGenericCovariantImpl;
+    return decl.isCovariantByDeclaration || decl.isCovariantByClass;
   }
 
   Args<Type> rawArguments(Selector selector) {
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index 2ed3a8e..13e7440 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -880,8 +880,8 @@
     if (isSetter) {
       final isAbstract = !shaker.isFieldSetterReachable(field);
       final parameter = new VariableDeclaration('value', type: field.type)
-        ..isCovariant = field.isCovariant
-        ..isGenericCovariantImpl = field.isGenericCovariantImpl
+        ..isCovariantByDeclaration = field.isCovariantByDeclaration
+        ..isCovariantByClass = field.isCovariantByClass
         ..fileOffset = field.fileOffset;
       accessor = new Procedure(
           field.name,
diff --git a/tools/VERSION b/tools/VERSION
index b356ec5..fd0afe8 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 96
+PRERELEASE 97
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/find_base_commit.dart b/tools/bots/find_base_commit.dart
index 5e3c9e2..4a68e261 100755
--- a/tools/bots/find_base_commit.dart
+++ b/tools/bots/find_base_commit.dart
@@ -22,7 +22,7 @@
   parser.addOption("branch",
       abbr: "B",
       help: "Select the builders building this branch",
-      defaultsTo: "master");
+      defaultsTo: "main");
   parser.addOption("count",
       abbr: "c", help: "List this many commits", defaultsTo: "1");
   parser.addFlag("help", help: "Show the program usage.", negatable: false);
