Version 2.15.0-139.0.dev

Merge commit '31922b8c57518810db978caf602868b72aae1554' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 199c8f7..c2f101f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -31,7 +31,7 @@
     if (!iIsNull) {
       print(i + 1); // OK, because `i` is known to be non-null
     }
-  }
+  }<>
   ```
 
   Previously, the above program had a compile-time error because type promotion
@@ -82,7 +82,11 @@
 
 ### `dart:core`
 
+- Add extension `name` getter on enum values.
 - Add `Enum.compareByIndex` helper function for comparing enum values by index.
+- Add `Enum.compareByName` helper function for comparing enum values by name.
+- Add extension methods on `Iterable<T extends Enum>`, intended for
+  `SomeEnumType.values` lists, to look up values by name.
 
 ### Tools
 
@@ -130,9 +134,9 @@
 - update `avoid_print` to allow `kDebugMode`-wrapped print calls.
 - fix handling of initializing formals in `prefer_final_parameters`.
 - fix `unnecessary_parenthesis` false positive with function expressions.
-- adds support for constructor tear-offs to `avoid_redundant_argument_values`, 
+- adds support for constructor tear-offs to `avoid_redundant_argument_values`,
   `unnecessary_lambdas`, and `unnecessary_parenthesis`.
-- adds a new lint: `unnecessary_constructor_name` to flag unnecessary uses of 
+- adds a new lint: `unnecessary_constructor_name` to flag unnecessary uses of
   `.new`.
 - improves regular expression parsing performance for common checks
   (`camel_case_types`, `file_names`, etc.).
@@ -180,9 +184,9 @@
   [`false_secrets`](https://dart.dev/go/false-secrets) section of your
   `pubspec.yaml`.
 - Fixes unicode terminal detection windows.
-- New flag `--example` to the commands 
+- New flag `--example` to the commands
   `dart pub get/upgrade/downgrade/add/remove` that will result in the `example/`
-  folder dependencies to be updated after operating in the current directory. 
+  folder dependencies to be updated after operating in the current directory.
 
 ## 2.14.2 - 2021-09-16
 
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
index f3e4b67..1f66fe6 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
@@ -147,13 +147,15 @@
   // local variables and functions
   {
     var localsRange = _getLocalsConflictingRange(node);
-    var enclosingExecutable = getEnclosingExecutableNode(node)!;
-    var visibleRangeMap = VisibleRangesComputer.forNode(enclosingExecutable);
-    visibleRangeMap.forEach((element, elementRange) {
-      if (elementRange.intersects(localsRange)) {
-        result.add(element.displayName);
-      }
-    });
+    var enclosingExecutable = getEnclosingExecutableNode(node);
+    if (enclosingExecutable != null) {
+      var visibleRangeMap = VisibleRangesComputer.forNode(enclosingExecutable);
+      visibleRangeMap.forEach((element, elementRange) {
+        if (elementRange.intersects(localsRange)) {
+          result.add(element.displayName);
+        }
+      });
+    }
   }
   // fields
   {
diff --git a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
index 4a0f551..35d678c 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
@@ -1739,6 +1739,17 @@
 ''');
   }
 
+  Future<void> test_target_topLevelVariable() async {
+    await indexTestUnit(r'''
+int get test => 42;
+var a = test;
+''');
+    _createRefactoring('test =>');
+    return _assertSuccessfulRefactoring(r'''
+var a = 42;
+''');
+  }
+
   Future _assertConditionsError(String message) async {
     var status = await refactoring.checkAllConditions();
     assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
diff --git a/pkg/analysis_server/tool/code_completion/code_metrics.dart b/pkg/analysis_server/tool/code_completion/code_metrics.dart
index 565a9fd..6a37dfd 100644
--- a/pkg/analysis_server/tool/code_completion/code_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/code_metrics.dart
@@ -775,7 +775,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     _visitChildren(node, {
-      'interfaces': node.interfaces,
+      'interfaces': node.interfaces2,
     });
     super.visitImplementsClause(node);
   }
@@ -976,7 +976,7 @@
   @override
   void visitOnClause(OnClause node) {
     _visitChildren(node, {
-      'superclassConstraints': node.superclassConstraints,
+      'superclassConstraints': node.superclassConstraints2,
     });
     super.visitOnClause(node);
   }
@@ -1286,7 +1286,7 @@
   @override
   void visitWithClause(WithClause node) {
     _visitChildren(node, {
-      'mixinTypes': node.mixinTypes,
+      'mixinTypes': node.mixinTypes2,
     });
     super.visitWithClause(node);
   }
diff --git a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
index aa88b80..dbf9cec 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
@@ -845,7 +845,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     // At the start of each type name.
-    for (var namedType in node.interfaces) {
+    for (var namedType in node.interfaces2) {
       _recordDataForNode('ImplementsClause (type)', namedType);
     }
     super.visitImplementsClause(node);
@@ -1062,7 +1062,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    for (var constraint in node.superclassConstraints) {
+    for (var constraint in node.superclassConstraints2) {
       _recordDataForNode('OnClause (type)', constraint);
     }
     super.visitOnClause(node);
@@ -1351,7 +1351,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    for (var namedType in node.mixinTypes) {
+    for (var namedType in node.mixinTypes2) {
       _recordDataForNode('WithClause (type)', namedType);
     }
     super.visitWithClause(node);
diff --git a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
index 9e8f224..9df1db8 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
@@ -819,7 +819,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     // At the start of each type name.
-    for (var namedType in node.interfaces) {
+    for (var namedType in node.interfaces2) {
       _recordDataForNode('ImplementsClause_interface', namedType);
     }
     super.visitImplementsClause(node);
@@ -992,7 +992,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    for (var constraint in node.superclassConstraints) {
+    for (var constraint in node.superclassConstraints2) {
       _recordDataForNode('OnClause_superclassConstraint', constraint);
     }
     super.visitOnClause(node);
@@ -1251,7 +1251,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    for (var namedType in node.mixinTypes) {
+    for (var namedType in node.mixinTypes2) {
       _recordDataForNode('WithClause_mixinType', namedType);
     }
     super.visitWithClause(node);
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index bfbb493..27e1aeb 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -2577,7 +2577,11 @@
   Token get implementsKeyword;
 
   /// Return the list of the interfaces that are being implemented.
+  @Deprecated('Use interfaces2 instead')
   NodeList<TypeName> get interfaces;
+
+  /// Return the list of the interfaces that are being implemented.
+  NodeList<NamedType> get interfaces2;
 }
 
 /// An import directive.
@@ -3402,7 +3406,11 @@
   Token get onKeyword;
 
   /// Return the list of the classes are superclass constraints for the mixin.
+  @Deprecated('Use superclassConstraints2 instead')
   NodeList<TypeName> get superclassConstraints;
+
+  /// Return the list of the classes are superclass constraints for the mixin.
+  NodeList<NamedType> get superclassConstraints2;
 }
 
 /// A parenthesized expression.
@@ -4450,8 +4458,12 @@
 /// Clients may not extend, implement or mix-in this class.
 abstract class WithClause implements AstNode {
   /// Return the names of the mixins that were specified.
+  @Deprecated('Use mixinTypes2 instead')
   NodeList<TypeName> get mixinTypes;
 
+  /// Return the names of the mixins that were specified.
+  NodeList<NamedType> get mixinTypes2;
+
   /// Return the token representing the 'with' keyword.
   Token get withKeyword;
 }
diff --git a/pkg/analyzer/lib/file_system/memory_file_system.dart b/pkg/analyzer/lib/file_system/memory_file_system.dart
index c023d3b..76b90a1 100644
--- a/pkg/analyzer/lib/file_system/memory_file_system.dart
+++ b/pkg/analyzer/lib/file_system/memory_file_system.dart
@@ -480,9 +480,7 @@
     var canonicalPath = provider._resolveLinks(path);
     var data = provider._pathToData[canonicalPath];
     if (data is! _FileData) {
-      // TODO(scheglov) Remove the path from the message.
-      // When https://github.com/dart-lang/dartdoc/pull/2796 is in google3.
-      throw FileSystemException(path, 'File "$path" does not exist.');
+      throw FileSystemException(path, 'File does not exist.');
     }
     return data.bytes;
   }
diff --git a/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart b/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
index 88b61ee..c5243d5 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
@@ -88,9 +88,9 @@
     // Parts of classes.
     _visitTypeAnnotation(extendsClause?.superclass);
     _visitTypeAnnotation(superClass);
-    _visitTypeAnnotations(withClause?.mixinTypes);
-    _visitTypeAnnotations(onClause?.superclassConstraints);
-    _visitTypeAnnotations(implementsClause?.interfaces);
+    _visitTypeAnnotations(withClause?.mixinTypes2);
+    _visitTypeAnnotations(onClause?.superclassConstraints2);
+    _visitTypeAnnotations(implementsClause?.interfaces2);
 
     // Parts of executables.
     _visitFormalParameterList(formalParameters);
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 90b8d68..7ae5e72 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -660,7 +660,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    for (NamedType namedType in node.interfaces) {
+    for (NamedType namedType in node.interfaces2) {
       recordSuperType(namedType, IndexRelationKind.IS_IMPLEMENTED_BY);
     }
   }
@@ -713,7 +713,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    for (NamedType namedType in node.superclassConstraints) {
+    for (NamedType namedType in node.superclassConstraints2) {
       recordSuperType(namedType, IndexRelationKind.IS_IMPLEMENTED_BY);
     }
   }
@@ -830,7 +830,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    for (NamedType namedType in node.mixinTypes) {
+    for (NamedType namedType in node.mixinTypes2) {
       recordSuperType(namedType, IndexRelationKind.IS_MIXED_IN_BY);
     }
   }
@@ -862,9 +862,9 @@
     }
 
     addSupertype(superclass);
-    withClause?.mixinTypes.forEach(addSupertype);
-    onClause?.superclassConstraints.forEach(addSupertype);
-    implementsClause?.interfaces.forEach(addSupertype);
+    withClause?.mixinTypes2.forEach(addSupertype);
+    onClause?.superclassConstraints2.forEach(addSupertype);
+    implementsClause?.interfaces2.forEach(addSupertype);
 
     void addMemberName(SimpleIdentifier identifier) {
       String name = identifier.name;
diff --git a/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart b/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
index 073d6f6..028dad7 100644
--- a/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
@@ -35,15 +35,15 @@
   for (CompilationUnitMember declaration in unit.declarations) {
     if (declaration is ClassDeclaration) {
       _addSubtypedName(declaration.extendsClause?.superclass);
-      _addSubtypedNames(declaration.withClause?.mixinTypes);
-      _addSubtypedNames(declaration.implementsClause?.interfaces);
+      _addSubtypedNames(declaration.withClause?.mixinTypes2);
+      _addSubtypedNames(declaration.implementsClause?.interfaces2);
     } else if (declaration is ClassTypeAlias) {
       _addSubtypedName(declaration.superclass);
-      _addSubtypedNames(declaration.withClause.mixinTypes);
-      _addSubtypedNames(declaration.implementsClause?.interfaces);
+      _addSubtypedNames(declaration.withClause.mixinTypes2);
+      _addSubtypedNames(declaration.implementsClause?.interfaces2);
     } else if (declaration is MixinDeclaration) {
-      _addSubtypedNames(declaration.onClause?.superclassConstraints);
-      _addSubtypedNames(declaration.implementsClause?.interfaces);
+      _addSubtypedNames(declaration.onClause?.superclassConstraints2);
+      _addSubtypedNames(declaration.implementsClause?.interfaces2);
     }
   }
 
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index bdcb763..f7c9969 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -5756,11 +5756,11 @@
   Token implementsKeyword;
 
   /// The interfaces that are being implemented.
-  final NodeListImpl<TypeName> _interfaces = NodeListImpl._();
+  final NodeListImpl<NamedType> _interfaces = NodeListImpl._();
 
   /// Initialize a newly created implements clause.
   ImplementsClauseImpl(this.implementsKeyword, List<NamedType> interfaces) {
-    _interfaces._initialize2(this, interfaces);
+    _interfaces._initialize(this, interfaces);
   }
 
   @override
@@ -5770,13 +5770,17 @@
   // TODO(paulberry): add commas.
   Iterable<SyntacticEntity> get childEntities => ChildEntities()
     ..add(implementsKeyword)
-    ..addAll(interfaces);
+    ..addAll(interfaces2);
 
   @override
   Token get endToken => _interfaces.endToken!;
 
+  @Deprecated('Use interfaces2 instead')
   @override
-  NodeListImpl<TypeName> get interfaces => _interfaces;
+  NodeList<TypeName> get interfaces => _DelegatingTypeNameList(_interfaces);
+
+  @override
+  NodeListImpl<NamedType> get interfaces2 => _interfaces;
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitImplementsClause(this);
@@ -7635,20 +7639,6 @@
       }
     }
   }
-
-  /// Set the [owner] of this container, and populate it with [elements].
-  /// TODO(scheglov) Remove this method, it exists only to implicitly cast.
-  void _initialize2<E2>(AstNodeImpl owner, List<E2>? elements) {
-    _owner = owner;
-    if (elements != null) {
-      var length = elements.length;
-      for (var i = 0; i < length; i++) {
-        var node = elements[i] as E;
-        _elements.add(node);
-        owner._becomeParentOf(node as AstNodeImpl);
-      }
-    }
-  }
 }
 
 /// A formal parameter that is required (is not optional).
@@ -7836,11 +7826,11 @@
   Token onKeyword;
 
   /// The classes are super-class constraints for the mixin.
-  final NodeListImpl<TypeName> _superclassConstraints = NodeListImpl._();
+  final NodeListImpl<NamedType> _superclassConstraints = NodeListImpl._();
 
   /// Initialize a newly created on clause.
   OnClauseImpl(this.onKeyword, List<NamedType> superclassConstraints) {
-    _superclassConstraints._initialize2(this, superclassConstraints);
+    _superclassConstraints._initialize(this, superclassConstraints);
   }
 
   @override
@@ -7856,7 +7846,11 @@
   Token get endToken => _superclassConstraints.endToken!;
 
   @override
-  NodeListImpl<TypeName> get superclassConstraints => _superclassConstraints;
+  NodeList<TypeName> get superclassConstraints =>
+      _DelegatingTypeNameList(_superclassConstraints);
+
+  @override
+  NodeListImpl<NamedType> get superclassConstraints2 => _superclassConstraints;
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitOnClause(this);
@@ -10877,11 +10871,11 @@
   Token withKeyword;
 
   /// The names of the mixins that were specified.
-  final NodeListImpl<TypeName> _mixinTypes = NodeListImpl._();
+  final NodeListImpl<NamedType> _mixinTypes = NodeListImpl._();
 
   /// Initialize a newly created with clause.
   WithClauseImpl(this.withKeyword, List<NamedType> mixinTypes) {
-    _mixinTypes._initialize2(this, mixinTypes);
+    _mixinTypes._initialize(this, mixinTypes);
   }
 
   @override
@@ -10896,8 +10890,12 @@
   @override
   Token get endToken => _mixinTypes.endToken!;
 
+  @Deprecated('Use mixinTypes2 instead')
   @override
-  NodeListImpl<TypeName> get mixinTypes => _mixinTypes;
+  NodeList<TypeName> get mixinTypes => _DelegatingTypeNameList(_mixinTypes);
+
+  @override
+  NodeListImpl<NamedType> get mixinTypes2 => _mixinTypes;
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitWithClause(this);
@@ -10968,6 +10966,76 @@
   }
 }
 
+/// Implementation of `NodeList<TypeName>` that delegates.
+class _DelegatingTypeNameList
+    with ListMixin<TypeName>
+    implements NodeList<TypeName> {
+  final NodeListImpl<NamedType> _delegate;
+
+  _DelegatingTypeNameList(this._delegate);
+
+  @override
+  Token? get beginToken {
+    return _delegate.beginToken;
+  }
+
+  @override
+  Token? get endToken {
+    return _delegate.endToken;
+  }
+
+  @override
+  int get length => _delegate.length;
+
+  @override
+  set length(int newLength) {
+    _delegate.length = newLength;
+  }
+
+  @override
+  AstNodeImpl get owner => _delegate.owner;
+
+  @override
+  TypeName operator [](int index) {
+    return _delegate[index] as TypeName;
+  }
+
+  @override
+  void operator []=(int index, TypeName node) {
+    _delegate[index] = node;
+  }
+
+  @override
+  void accept(AstVisitor visitor) {
+    _delegate.accept(visitor);
+  }
+
+  @override
+  void add(NamedType node) {
+    _delegate.add(node);
+  }
+
+  @override
+  void addAll(Iterable<TypeName> nodes) {
+    _delegate.addAll(nodes);
+  }
+
+  @override
+  void clear() {
+    _delegate.clear();
+  }
+
+  @override
+  void insert(int index, TypeName node) {
+    _delegate.insert(index, node);
+  }
+
+  @override
+  TypeName removeAt(int index) {
+    return _delegate.removeAt(index) as TypeName;
+  }
+}
+
 /// An indication of the resolved kind of a [SetOrMapLiteral].
 enum _SetOrMapKind {
   /// Indicates that the literal represents a map.
diff --git a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
index 12c0ab3..908b3f4 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -600,7 +600,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     sink.write('implements ');
-    _visitNodeList(node.interfaces, separator: ', ');
+    _visitNodeList(node.interfaces2, separator: ', ');
   }
 
   @override
@@ -776,7 +776,7 @@
   @override
   void visitOnClause(OnClause node) {
     sink.write('on ');
-    _visitNodeList(node.superclassConstraints, separator: ', ');
+    _visitNodeList(node.superclassConstraints2, separator: ', ');
   }
 
   @override
@@ -1072,7 +1072,7 @@
   @override
   void visitWithClause(WithClause node) {
     sink.write('with ');
-    _visitNodeList(node.mixinTypes, separator: ', ');
+    _visitNodeList(node.mixinTypes2, separator: ', ');
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index b887f0a..d24d4ea 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -718,7 +718,7 @@
   bool visitImplementsClause(ImplementsClause node) {
     ImplementsClause other = _other as ImplementsClause;
     return isEqualTokens(node.implementsKeyword, other.implementsKeyword) &&
-        _isEqualNodeLists(node.interfaces, other.interfaces);
+        _isEqualNodeLists(node.interfaces2, other.interfaces2);
   }
 
   @override
@@ -908,7 +908,7 @@
     OnClause other = _other as OnClause;
     return isEqualTokens(node.onKeyword, other.onKeyword) &&
         _isEqualNodeLists(
-            node.superclassConstraints, other.superclassConstraints);
+            node.superclassConstraints2, other.superclassConstraints2);
   }
 
   @override
@@ -1246,7 +1246,7 @@
   bool visitWithClause(WithClause node) {
     WithClause other = _other as WithClause;
     return isEqualTokens(node.withKeyword, other.withKeyword) &&
-        _isEqualNodeLists(node.mixinTypes, other.mixinTypes);
+        _isEqualNodeLists(node.mixinTypes2, other.mixinTypes2);
   }
 
   @override
@@ -2325,7 +2325,7 @@
 
   @override
   bool visitImplementsClause(covariant ImplementsClauseImpl node) {
-    if (_replaceInList(node.interfaces)) {
+    if (_replaceInList(node.interfaces2)) {
       return true;
     }
     return visitNode(node);
@@ -2933,7 +2933,7 @@
 
   @override
   bool visitWithClause(covariant WithClauseImpl node) {
-    if (_replaceInList(node.mixinTypes)) {
+    if (_replaceInList(node.mixinTypes2)) {
       return true;
     }
     return visitNode(node);
@@ -2948,7 +2948,7 @@
     return visitNode(node);
   }
 
-  bool _replaceInList(NodeListImpl list) {
+  bool _replaceInList(NodeList list) {
     int count = list.length;
     for (int i = 0; i < count; i++) {
       if (identical(_oldNode, list[i])) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/type_name_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
similarity index 91%
rename from pkg/analyzer/lib/src/dart/resolver/type_name_resolver.dart
rename to pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
index 3f3c167..9cf8cfd 100644
--- a/pkg/analyzer/lib/src/dart/resolver/type_name_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
@@ -21,8 +21,8 @@
 
 /// Helper for resolving types.
 ///
-/// The client must set [nameScope] before calling [resolveTypeName].
-class TypeNameResolver {
+/// The client must set [nameScope] before calling [resolve].
+class NamedTypeResolver {
   final LibraryElementImpl _libraryElement;
   final TypeSystemImpl typeSystem;
   final DartType dynamicType;
@@ -37,26 +37,26 @@
 
   /// If not `null`, a direct child of an [ExtendsClause], [WithClause],
   /// or [ImplementsClause].
-  TypeName? classHierarchy_typeName;
+  NamedType? classHierarchy_namedType;
 
   /// If not `null`, a direct child the [WithClause] in the [enclosingClass].
-  TypeName? withClause_typeName;
+  NamedType? withClause_namedType;
 
-  /// If not `null`, the [TypeName] of the redirected constructor being
+  /// If not `null`, the [NamedType] of the redirected constructor being
   /// resolved, in the [enclosingClass].
-  TypeName? redirectedConstructor_typeName;
+  NamedType? redirectedConstructor_namedType;
 
-  /// If [resolveTypeName] finds out that the given [TypeName] with a
+  /// If [resolve] finds out that the given [NamedType] with a
   /// [PrefixedIdentifier] name is actually the name of a class and the name of
   /// the constructor, it rewrites the [ConstructorName] to correctly represent
   /// the type and the constructor name, and set this field to the rewritten
   /// [ConstructorName]. Otherwise this field will be set `null`.
   ConstructorName? rewriteResult;
 
-  /// If [resolveTypeName] reported an error, this flag is set to `true`.
+  /// If [resolve] reported an error, this flag is set to `true`.
   bool hasErrorReported = false;
 
-  TypeNameResolver(this._libraryElement, TypeProvider typeProvider,
+  NamedTypeResolver(this._libraryElement, TypeProvider typeProvider,
       this.isNonNullableByDefault, this.errorReporter)
       : typeSystem = _libraryElement.typeSystem,
         dynamicType = typeProvider.dynamicType;
@@ -70,11 +70,11 @@
         : NullabilitySuffix.star;
   }
 
-  /// Resolve the given [TypeName] - set its element and static type. Only the
+  /// Resolve the given [NamedType] - set its element and static type. Only the
   /// given [node] is resolved, all its children must be already resolved.
   ///
-  /// The client must set [nameScope] before calling [resolveTypeName].
-  void resolveTypeName(TypeNameImpl node) {
+  /// The client must set [nameScope] before calling [resolve].
+  void resolve(TypeNameImpl node) {
     rewriteResult = null;
     hasErrorReported = false;
 
@@ -128,7 +128,7 @@
 
   /// Return type arguments, exactly [parameterCount].
   List<DartType> _buildTypeArguments(
-      TypeName node, TypeArgumentList argumentList, int parameterCount) {
+      NamedType node, TypeArgumentList argumentList, int parameterCount) {
     var arguments = argumentList.arguments;
     var argumentCount = arguments.length;
 
@@ -151,7 +151,7 @@
     );
   }
 
-  NullabilitySuffix _getNullability(TypeName node) {
+  NullabilitySuffix _getNullability(NamedType node) {
     if (isNonNullableByDefault) {
       if (node.question != null) {
         return NullabilitySuffix.question;
@@ -162,7 +162,7 @@
     return NullabilitySuffix.star;
   }
 
-  /// We are resolving the [TypeName] in a redirecting constructor of the
+  /// We are resolving the [NamedType] in a redirecting constructor of the
   /// [enclosingClass].
   InterfaceType _inferRedirectedConstructor(ClassElement element) {
     if (element == enclosingClass) {
@@ -188,7 +188,7 @@
     }
   }
 
-  DartType _instantiateElement(TypeName node, Element element) {
+  DartType _instantiateElement(NamedType node, Element element) {
     var nullability = _getNullability(node);
 
     var argumentList = node.typeArguments;
@@ -236,7 +236,7 @@
     }
 
     if (element is ClassElement) {
-      if (identical(node, withClause_typeName)) {
+      if (identical(node, withClause_namedType)) {
         for (var mixin in enclosingClass!.mixins) {
           if (mixin.element == element) {
             return mixin;
@@ -244,7 +244,7 @@
         }
       }
 
-      if (identical(node, redirectedConstructor_typeName)) {
+      if (identical(node, redirectedConstructor_namedType)) {
         return _inferRedirectedConstructor(element);
       }
 
@@ -355,8 +355,8 @@
   /// but the [type] is nullable (because the question mark was specified,
   /// or the type alias is nullable), report an error, and return the
   /// corresponding non-nullable type.
-  DartType _verifyNullability(TypeName node, DartType type) {
-    if (identical(node, classHierarchy_typeName)) {
+  DartType _verifyNullability(NamedType node, DartType type) {
+    if (identical(node, classHierarchy_namedType)) {
       if (type.nullabilitySuffix == NullabilitySuffix.question) {
         var parent = node.parent;
         if (parent is ExtendsClause || parent is ClassTypeAlias) {
@@ -388,7 +388,7 @@
   }
 
   DartType _verifyTypeAliasForContext(
-    TypeName node,
+    NamedType node,
     TypeAliasElement element,
     DartType type,
   ) {
@@ -446,7 +446,7 @@
     return type;
   }
 
-  static bool _isInstanceCreation(TypeName node) {
+  static bool _isInstanceCreation(NamedType node) {
     var parent = node.parent;
     return parent is ConstructorName &&
         parent.parent is InstanceCreationExpression;
@@ -459,7 +459,7 @@
 
   _ErrorHelper(this.errorReporter);
 
-  bool reportNewWithNonType(TypeName node) {
+  bool reportNewWithNonType(NamedType node) {
     var constructorName = node.parent;
     if (constructorName is ConstructorName) {
       var instanceCreation = constructorName.parent;
@@ -479,7 +479,7 @@
     return false;
   }
 
-  void reportNullOrNonTypeElement(TypeName node, Element? element) {
+  void reportNullOrNonTypeElement(NamedType node, Element? element) {
     var identifier = node.name;
     var errorNode = _getErrorNode(node);
 
@@ -596,12 +596,12 @@
   }
 
   /// Returns the simple identifier of the given (maybe prefixed) identifier.
-  static Identifier _getErrorNode(TypeName node) {
+  static Identifier _getErrorNode(NamedType node) {
     Identifier identifier = node.name;
     if (identifier is PrefixedIdentifier) {
       // The prefixed identifier can be:
-      // 1. new importPrefix.TypeName()
-      // 2. new TypeName.constructorName()
+      // 1. new importPrefix.NamedType()
+      // 2. new NamedType.constructorName()
       // 3. new unresolved.Unresolved()
       if (identifier.prefix.staticElement is PrefixElement) {
         return identifier.identifier;
@@ -614,7 +614,7 @@
   }
 
   /// Check if the [node] is the type in a redirected constructor name.
-  static bool _isRedirectingConstructor(TypeName node) {
+  static bool _isRedirectingConstructor(NamedType node) {
     var parent = node.parent;
     if (parent is ConstructorName) {
       var grandParent = parent.parent;
@@ -626,7 +626,7 @@
   }
 
   /// Checks if the [node] is the type in an `as` expression.
-  static bool _isTypeInAsExpression(TypeName node) {
+  static bool _isTypeInAsExpression(NamedType node) {
     var parent = node.parent;
     if (parent is AsExpression) {
       return identical(parent.type, node);
@@ -635,7 +635,7 @@
   }
 
   /// Checks if the [node] is the exception type in a `catch` clause.
-  static bool _isTypeInCatchClause(TypeName node) {
+  static bool _isTypeInCatchClause(NamedType node) {
     var parent = node.parent;
     if (parent is CatchClause) {
       return identical(parent.exceptionType, node);
@@ -644,7 +644,7 @@
   }
 
   /// Checks if the [node] is the type in an `is` expression.
-  static bool _isTypeInIsExpression(TypeName node) {
+  static bool _isTypeInIsExpression(NamedType node) {
     var parent = node.parent;
     if (parent is IsExpression) {
       return identical(parent.type, node);
@@ -653,7 +653,7 @@
   }
 
   /// Checks if the [node] is an element in a type argument list.
-  static bool _isTypeInTypeArgumentList(TypeName node) {
+  static bool _isTypeInTypeArgumentList(NamedType node) {
     return node.parent is TypeArgumentList;
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 3275ca4..964e414 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -18,8 +18,8 @@
 import 'package:analyzer/src/dart/element/scope.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/resolver/ast_rewrite.dart';
+import 'package:analyzer/src/dart/resolver/named_type_resolver.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
-import 'package:analyzer/src/dart/resolver/type_name_resolver.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/declaration_resolver.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
@@ -63,7 +63,7 @@
   final bool _isNonNullableByDefault;
   final ErrorReporter _errorReporter;
   final AstRewriter _astRewriter;
-  final TypeNameResolver _typeNameResolver;
+  final NamedTypeResolver _typeNameResolver;
 
   /// This index is incremented every time we visit a [LibraryDirective].
   /// There is just one [LibraryElement], so we can support only one node.
@@ -103,7 +103,7 @@
       isNonNullableByDefault: isNonNullableByDefault,
     );
 
-    var typeNameResolver = TypeNameResolver(
+    var typeNameResolver = NamedTypeResolver(
       libraryElement,
       typeProvider,
       isNonNullableByDefault,
@@ -992,7 +992,7 @@
     node.typeArguments?.accept(this);
 
     _typeNameResolver.nameScope = _nameScope;
-    _typeNameResolver.resolveTypeName(node);
+    _typeNameResolver.resolve(node);
 
     if (_typeNameResolver.rewriteResult != null) {
       _typeNameResolver.rewriteResult!.accept(this);
@@ -1223,7 +1223,7 @@
     if (clause == null) return;
 
     _resolveTypes(
-      clause.interfaces,
+      clause.interfaces2,
       CompileTimeErrorCode.IMPLEMENTS_NON_CLASS,
     );
   }
@@ -1232,7 +1232,7 @@
     if (clause == null) return;
 
     _resolveTypes(
-      clause.superclassConstraints,
+      clause.superclassConstraints2,
       CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE,
     );
   }
@@ -1242,11 +1242,11 @@
     if (redirectedConstructor == null) return;
 
     var namedType = redirectedConstructor.type;
-    _typeNameResolver.redirectedConstructor_typeName = namedType;
+    _typeNameResolver.redirectedConstructor_namedType = namedType;
 
     redirectedConstructor.accept(this);
 
-    _typeNameResolver.redirectedConstructor_typeName = null;
+    _typeNameResolver.redirectedConstructor_namedType = null;
   }
 
   /// Return the [InterfaceType] of the given [namedType].
@@ -1258,9 +1258,9 @@
   /// classes).
   void _resolveType(TypeNameImpl namedType, ErrorCode errorCode,
       {bool asClass = false}) {
-    _typeNameResolver.classHierarchy_typeName = namedType;
+    _typeNameResolver.classHierarchy_namedType = namedType;
     visitTypeName(namedType);
-    _typeNameResolver.classHierarchy_typeName = null;
+    _typeNameResolver.classHierarchy_namedType = null;
 
     if (_typeNameResolver.hasErrorReported) {
       return;
@@ -1302,13 +1302,13 @@
   void _resolveWithClause(WithClause? clause) {
     if (clause == null) return;
 
-    for (var namedType in clause.mixinTypes) {
-      _typeNameResolver.withClause_typeName = namedType;
+    for (var namedType in clause.mixinTypes2) {
+      _typeNameResolver.withClause_namedType = namedType;
       _resolveType(
         namedType as TypeNameImpl,
         CompileTimeErrorCode.MIXIN_OF_NON_CLASS,
       );
-      _typeNameResolver.withClause_typeName = null;
+      _typeNameResolver.withClause_namedType = null;
     }
   }
 
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index 928a9f5..8c4abb5 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -152,7 +152,7 @@
     //   class C extends S&M2 { ...members of C... }
     // So, we need to check members of each mixin against superinterfaces
     // of `S`, and superinterfaces of all previous mixins.
-    var mixinNodes = withClause?.mixinTypes;
+    var mixinNodes = withClause?.mixinTypes2;
     var mixinTypes = classElement.mixins;
     for (var i = 0; i < mixinTypes.length; i++) {
       var mixinType = mixinTypes[i];
@@ -347,7 +347,7 @@
   bool _checkDirectSuperTypes() {
     var hasError = false;
     if (implementsClause != null) {
-      for (var namedType in implementsClause!.interfaces) {
+      for (var namedType in implementsClause!.interfaces2) {
         if (_checkDirectSuperType(
           namedType,
           CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
@@ -357,7 +357,7 @@
       }
     }
     if (onClause != null) {
-      for (var namedType in onClause!.superclassConstraints) {
+      for (var namedType in onClause!.superclassConstraints2) {
         if (_checkDirectSuperType(
           namedType,
           CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS,
@@ -375,7 +375,7 @@
       }
     }
     if (withClause != null) {
-      for (var namedType in withClause!.mixinTypes) {
+      for (var namedType in withClause!.mixinTypes2) {
         if (_checkDirectSuperType(
           namedType,
           CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 75bd8ed..58f5342 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -3436,15 +3436,15 @@
       if (declaration.withClause == null) {
         declaration.withClause = withClause;
       } else {
-        declaration.withClause!.mixinTypes.addAll(withClause.mixinTypes);
+        declaration.withClause!.mixinTypes2.addAll(withClause.mixinTypes2);
       }
     }
     if (implementsClause != null) {
       if (declaration.implementsClause == null) {
         declaration.implementsClause = implementsClause;
       } else {
-        declaration.implementsClause!.interfaces
-            .addAll(implementsClause.interfaces);
+        declaration.implementsClause!.interfaces2
+            .addAll(implementsClause.interfaces2);
       }
     }
   }
@@ -3486,16 +3486,16 @@
       if (mixinDeclaration!.onClause == null) {
         mixinDeclaration!.onClause = onClause;
       } else {
-        mixinDeclaration!.onClause!.superclassConstraints
-            .addAll(onClause.superclassConstraints);
+        mixinDeclaration!.onClause!.superclassConstraints2
+            .addAll(onClause.superclassConstraints2);
       }
     }
     if (implementsClause != null) {
       if (mixinDeclaration!.implementsClause == null) {
         mixinDeclaration!.implementsClause = implementsClause;
       } else {
-        mixinDeclaration!.implementsClause!.interfaces
-            .addAll(implementsClause.interfaces);
+        mixinDeclaration!.implementsClause!.interfaces2
+            .addAll(implementsClause.interfaces2);
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 6493ae6..029f914 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -833,7 +833,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    node.interfaces.forEach(_checkForImplicitDynamicType);
+    node.interfaces2.forEach(_checkForImplicitDynamicType);
     super.visitImplementsClause(node);
   }
 
@@ -1289,7 +1289,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    node.mixinTypes.forEach(_checkForImplicitDynamicType);
+    node.mixinTypes2.forEach(_checkForImplicitDynamicType);
     super.visitWithClause(node);
   }
 
@@ -1309,7 +1309,7 @@
         !_checkForNoGenerativeConstructorsInSuperclass(superclass)) {
       _checkForImplicitDynamicType(superclass);
       _checkForExtendsDeferredClass(superclass);
-      _checkForRepeatedType(implementsClause?.interfaces,
+      _checkForRepeatedType(implementsClause?.interfaces2,
           CompileTimeErrorCode.IMPLEMENTS_REPEATED);
       _checkImplementsSuperClass(implementsClause);
       _checkMixinsSuperClass(withClause);
@@ -1384,9 +1384,9 @@
     bool problemReported = false;
     int mixinTypeIndex = -1;
     for (int mixinNameIndex = 0;
-        mixinNameIndex < withClause.mixinTypes.length;
+        mixinNameIndex < withClause.mixinTypes2.length;
         mixinNameIndex++) {
-      NamedType mixinName = withClause.mixinTypes[mixinNameIndex];
+      NamedType mixinName = withClause.mixinTypes2[mixinNameIndex];
       DartType mixinType = mixinName.typeOrThrow;
       if (mixinType is InterfaceType) {
         mixinTypeIndex++;
@@ -1624,7 +1624,7 @@
     }
 
     if (implementsClause != null) {
-      for (var interface in implementsClause.interfaces) {
+      for (var interface in implementsClause.interfaces2) {
         var type = interface.type;
         if (type != null && type.isDartCoreFunction) {
           errorReporter.reportErrorForNode(
@@ -1637,7 +1637,7 @@
     }
 
     if (withClause != null) {
-      for (NamedType type in withClause.mixinTypes) {
+      for (NamedType type in withClause.mixinTypes2) {
         var mixinElement = type.name.staticElement;
         if (mixinElement != null && mixinElement.name == "Function") {
           errorReporter.reportErrorForNode(
@@ -2539,7 +2539,7 @@
       return false;
     }
     bool foundError = false;
-    for (NamedType type in clause.interfaces) {
+    for (NamedType type in clause.interfaces2) {
       if (_checkForExtendsOrImplementsDisallowedClass(
           type, CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS)) {
         foundError = true;
@@ -3221,7 +3221,7 @@
       return false;
     }
 
-    for (NamedType mixinType in withClause.mixinTypes) {
+    for (NamedType mixinType in withClause.mixinTypes2) {
       DartType type = mixinType.typeOrThrow;
       if (type is InterfaceType) {
         LibraryElement library = type.element.library;
@@ -3550,7 +3550,7 @@
       return false;
     }
     bool problemReported = false;
-    for (NamedType namedType in onClause.superclassConstraints) {
+    for (NamedType namedType in onClause.superclassConstraints2) {
       DartType type = namedType.typeOrThrow;
       if (type is InterfaceType) {
         if (_checkForExtendsOrImplementsDisallowedClass(
@@ -4615,7 +4615,7 @@
       return;
     }
 
-    for (var interfaceNode in implementsClause.interfaces) {
+    for (var interfaceNode in implementsClause.interfaces2) {
       var type = interfaceNode.type;
       if (type is InterfaceType && type.element == superElement) {
         errorReporter.reportErrorForNode(
@@ -4638,7 +4638,7 @@
     var interfacesMerger = InterfacesMerger(typeSystem);
     interfacesMerger.addWithSupertypes(supertype);
 
-    for (var namedType in withClause.mixinTypes) {
+    for (var namedType in withClause.mixinTypes2) {
       var mixinType = namedType.type;
       if (mixinType is InterfaceType) {
         var mixinElement = mixinType.element;
@@ -4687,11 +4687,11 @@
         !_checkForImplementsClauseErrorCodes(implementsClause)) {
 //      _checkForImplicitDynamicType(superclass);
       _checkForRepeatedType(
-        onClause?.superclassConstraints,
+        onClause?.superclassConstraints2,
         CompileTimeErrorCode.ON_REPEATED,
       );
       _checkForRepeatedType(
-        implementsClause?.interfaces,
+        implementsClause?.interfaces2,
         CompileTimeErrorCode.IMPLEMENTS_REPEATED,
       );
       _checkForConflictingGenerics(node);
@@ -4712,7 +4712,7 @@
       return;
     }
 
-    for (var mixinNode in withClause.mixinTypes) {
+    for (var mixinNode in withClause.mixinTypes2) {
       var type = mixinNode.type;
       if (type is InterfaceType && type.element == superElement) {
         errorReporter.reportErrorForNode(
diff --git a/pkg/analyzer/lib/src/generated/ffi_verifier.dart b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
index f7ecada..516a19d 100644
--- a/pkg/analyzer/lib/src/generated/ffi_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
@@ -116,14 +116,14 @@
 
     var implementsClause = node.implementsClause;
     if (implementsClause != null) {
-      for (NamedType type in implementsClause.interfaces) {
+      for (NamedType type in implementsClause.interfaces2) {
         checkSupertype(type, FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS,
             FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS);
       }
     }
     var withClause = node.withClause;
     if (withClause != null) {
-      for (NamedType type in withClause.mixinTypes) {
+      for (NamedType type in withClause.mixinTypes2) {
         checkSupertype(type, FfiCode.SUBTYPE_OF_FFI_CLASS_IN_WITH,
             FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH);
       }
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
index ed3e329..921c116 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -261,7 +261,7 @@
           String name,
           TypeParameterList? typeParameters,
           Keyword? abstractKeyword,
-          TypeName superclass,
+          NamedType superclass,
           WithClause withClause,
           ImplementsClause? implementsClause) =>
       astFactory.classTypeAlias(
@@ -402,7 +402,7 @@
           TokenFactory.tokenFromType(TokenType.EQ),
           expression);
 
-  static ConstructorNameImpl constructorName(TypeName type, String? name) =>
+  static ConstructorNameImpl constructorName(NamedType type, String? name) =>
       astFactory.constructorName(
           type,
           name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
@@ -511,7 +511,7 @@
       astFactory.expressionStatement(
           expression, TokenFactory.tokenFromType(TokenType.SEMICOLON));
 
-  static ExtendsClauseImpl extendsClause(TypeName type) => astFactory
+  static ExtendsClauseImpl extendsClause(NamedType type) => astFactory
       .extendsClause(TokenFactory.tokenFromKeyword(Keyword.EXTENDS), type);
 
   static ExtensionDeclarationImpl extensionDeclaration(
@@ -795,7 +795,7 @@
               : TokenFactory.tokenFromKeyword(Keyword.ELSE),
           elseStatement);
 
-  static ImplementsClauseImpl implementsClause(List<TypeName> types) =>
+  static ImplementsClauseImpl implementsClause(List<NamedType> types) =>
       astFactory.implementsClause(
           TokenFactory.tokenFromKeyword(Keyword.IMPLEMENTS), types);
 
@@ -863,12 +863,12 @@
           argumentList(arguments));
 
   static InstanceCreationExpressionImpl instanceCreationExpression2(
-          Keyword? keyword, TypeName type,
+          Keyword? keyword, NamedType type,
           [List<Expression> arguments = const []]) =>
       instanceCreationExpression3(keyword, type, null, arguments);
 
   static InstanceCreationExpressionImpl instanceCreationExpression3(
-          Keyword? keyword, TypeName type, String? identifier,
+          Keyword? keyword, NamedType type, String? identifier,
           [List<Expression> arguments = const []]) =>
       instanceCreationExpression(
           keyword,
@@ -1531,7 +1531,7 @@
           TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
           body);
 
-  static WithClauseImpl withClause(List<TypeName> types) =>
+  static WithClauseImpl withClause(List<NamedType> types) =>
       astFactory.withClause(TokenFactory.tokenFromKeyword(Keyword.WITH), types);
 
   static YieldStatementImpl yieldEachStatement(Expression expression) =>
diff --git a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
index 3c7de8d..bb5f5fc 100644
--- a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
@@ -570,7 +570,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     _token(node.implementsKeyword);
-    _nodeList(node.interfaces, node.endToken.next);
+    _nodeList(node.interfaces2, node.endToken.next);
   }
 
   @override
@@ -731,7 +731,7 @@
   @override
   void visitOnClause(OnClause node) {
     _token(node.onKeyword);
-    _nodeList(node.superclassConstraints, node.endToken.next);
+    _nodeList(node.superclassConstraints2, node.endToken.next);
   }
 
   @override
@@ -1003,7 +1003,7 @@
   @override
   void visitWithClause(WithClause node) {
     _token(node.withKeyword);
-    _nodeList(node.mixinTypes, node.endToken.next);
+    _nodeList(node.mixinTypes2, node.endToken.next);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 2c2649d..fe2b237 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -601,7 +601,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    node.interfaces.accept(this);
+    node.interfaces2.accept(this);
   }
 
   @override
@@ -746,7 +746,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    node.superclassConstraints.accept(this);
+    node.superclassConstraints2.accept(this);
   }
 
   @override
@@ -895,7 +895,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    node.mixinTypes.accept(this);
+    node.mixinTypes2.accept(this);
   }
 
   List<ElementAnnotation> _buildAnnotations(List<Annotation> nodeList) {
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index 1cba245..9fccda8 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -273,7 +273,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    node.interfaces.accept(this);
+    node.interfaces2.accept(this);
   }
 
   @override
@@ -316,7 +316,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    node.superclassConstraints.accept(this);
+    node.superclassConstraints2.accept(this);
   }
 
   @override
@@ -412,7 +412,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    node.mixinTypes.accept(this);
+    node.mixinTypes2.accept(this);
   }
 
   NullabilitySuffix _getNullabilitySuffix(bool hasQuestion) {
diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart
index fd30689..b128cfe 100644
--- a/pkg/analyzer/lib/src/summary2/types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/types_builder.dart
@@ -135,11 +135,11 @@
     }
 
     element.mixins = _toInterfaceTypeList(
-      node.withClause?.mixinTypes,
+      node.withClause?.mixinTypes2,
     );
 
     element.interfaces = _toInterfaceTypeList(
-      node.implementsClause?.interfaces,
+      node.implementsClause?.interfaces2,
     );
   }
 
@@ -154,11 +154,11 @@
     }
 
     element.mixins = _toInterfaceTypeList(
-      node.withClause.mixinTypes,
+      node.withClause.mixinTypes2,
     );
 
     element.interfaces = _toInterfaceTypeList(
-      node.implementsClause?.interfaces,
+      node.implementsClause?.interfaces2,
     );
   }
 
@@ -286,7 +286,7 @@
     var element = node.declaredElement as MixinElementImpl;
 
     var constraints = _toInterfaceTypeList(
-      node.onClause?.superclassConstraints,
+      node.onClause?.superclassConstraints2,
     );
     if (constraints.isEmpty) {
       constraints = [_objectType(element)];
@@ -294,7 +294,7 @@
     element.superclassConstraints = constraints;
 
     element.interfaces = _toInterfaceTypeList(
-      node.implementsClause?.interfaces,
+      node.implementsClause?.interfaces2,
     );
   }
 
@@ -363,7 +363,7 @@
   void perform(WithClause? withClause) {
     if (withClause == null) return;
 
-    for (var mixinNode in withClause.mixinTypes) {
+    for (var mixinNode in withClause.mixinTypes2) {
       var mixinType = _inferSingle(mixinNode as TypeNameImpl);
       interfacesMerger.addWithSupertypes(mixinType);
     }
@@ -513,7 +513,7 @@
       } finally {
         element.mixinInferenceCallback = null;
         element.mixins = _toInterfaceTypeList(
-          withClause.mixinTypes,
+          withClause.mixinTypes2,
         );
       }
     }
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
index 47cc45d0..9aa5e8e 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
@@ -531,6 +531,10 @@
   int get index;
 }
 
+abstract class _Enum extends Enum {
+  String _name;
+}
+
 abstract class Pattern {
   Iterable<Match> allMatches(String string, [int start = 0]);
 }
diff --git a/pkg/analyzer/lib/src/workspace/bazel.dart b/pkg/analyzer/lib/src/workspace/bazel.dart
index 7f688ff..b75a215 100644
--- a/pkg/analyzer/lib/src/workspace/bazel.dart
+++ b/pkg/analyzer/lib/src/workspace/bazel.dart
@@ -206,6 +206,9 @@
   /// to avoid this in cases when `BUILD` files are always available.
   final bool _lookForBuildFileSubstitutes;
 
+  /// The language version for this workspace, `null` if cannot be read.
+  final Version? _languageVersion;
+
   /// The cache of packages. The key is the directory path, the value is
   /// the corresponding package.
   final Map<String, BazelWorkspacePackage> _directoryToPackage = {};
@@ -220,7 +223,8 @@
     this.binPaths,
     this.genfiles, {
     required bool lookForBuildFileSubstitutes,
-  }) : _lookForBuildFileSubstitutes = lookForBuildFileSubstitutes;
+  })  : _lookForBuildFileSubstitutes = lookForBuildFileSubstitutes,
+        _languageVersion = _readLanguageVersion(provider, root);
 
   /// Stream of files that we tried to find along with their potential or actual
   /// paths.
@@ -564,6 +568,33 @@
   static Folder? _firstExistingFolder(Folder root, List<String> names) => names
       .map((name) => root.getChildAssumingFolder(name))
       .firstWhereOrNull((folder) => folder.exists);
+
+  /// Return the default language version of the workspace.
+  ///
+  /// Return `null` if cannot be read, for example because the file does not
+  /// exist, or is not available in this build configuration (batch analysis).
+  static Version? _readLanguageVersion(
+    ResourceProvider resourceProvider,
+    String rootPath,
+  ) {
+    var file = resourceProvider.getFile(
+      resourceProvider.pathContext.joinAll(
+        [rootPath, 'dart', 'build_defs', 'bzl', 'language.bzl'],
+      ),
+    );
+
+    String content;
+    try {
+      content = file.readAsStringSync();
+    } on FileSystemException {
+      return null;
+    }
+
+    final pattern = RegExp(r'_version_null_safety\s*=\s*"(\d+\.\d+)"');
+    for (var match in pattern.allMatches(content)) {
+      return Version.parse('${match.group(1)}.0');
+    }
+  }
 }
 
 /// Information about a package defined in a BazelWorkspace.
@@ -597,7 +628,7 @@
   @override
   Version? get languageVersion {
     _readBuildFile();
-    return _languageVersion;
+    return _languageVersion ?? workspace._languageVersion;
   }
 
   @override
diff --git a/pkg/analyzer/test/generated/simple_parser_test.dart b/pkg/analyzer/test/generated/simple_parser_test.dart
index 73804a4..830df2d 100644
--- a/pkg/analyzer/test/generated/simple_parser_test.dart
+++ b/pkg/analyzer/test/generated/simple_parser_test.dart
@@ -1381,7 +1381,7 @@
     ImplementsClause clause = parseImplementsClause('implements A, B, C');
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
-    expect(clause.interfaces, hasLength(3));
+    expect(clause.interfaces2, hasLength(3));
     expect(clause.implementsKeyword, isNotNull);
   }
 
@@ -1389,7 +1389,7 @@
     ImplementsClause clause = parseImplementsClause('implements A');
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
-    expect(clause.interfaces, hasLength(1));
+    expect(clause.interfaces2, hasLength(1));
     expect(clause.implementsKeyword, isNotNull);
   }
 
@@ -2077,7 +2077,7 @@
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
     expect(clause.withKeyword, isNotNull);
-    expect(clause.mixinTypes, hasLength(3));
+    expect(clause.mixinTypes2, hasLength(3));
   }
 
   void test_parseWithClause_single() {
@@ -2085,7 +2085,7 @@
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
     expect(clause.withKeyword, isNotNull);
-    expect(clause.mixinTypes, hasLength(1));
+    expect(clause.mixinTypes2, hasLength(1));
   }
 
   void test_typeAlias_37733() {
diff --git a/pkg/analyzer/test/generated/top_level_parser_test.dart b/pkg/analyzer/test/generated/top_level_parser_test.dart
index 6962aff..533a43e 100644
--- a/pkg/analyzer/test/generated/top_level_parser_test.dart
+++ b/pkg/analyzer/test/generated/top_level_parser_test.dart
@@ -398,7 +398,7 @@
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.implementsClause, isNotNull);
     expect(typeAlias.implementsClause!.implementsKeyword, isNotNull);
-    expect(typeAlias.implementsClause!.interfaces.length, 1);
+    expect(typeAlias.implementsClause!.interfaces2.length, 1);
     expect(typeAlias.semicolon, isNotNull);
   }
 
@@ -414,7 +414,7 @@
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.withClause.withKeyword, isNotNull);
-    expect(typeAlias.withClause.mixinTypes.length, 1);
+    expect(typeAlias.withClause.mixinTypes2.length, 1);
     expect(typeAlias.implementsClause, isNull);
     expect(typeAlias.semicolon, isNotNull);
   }
@@ -1949,7 +1949,7 @@
     expect(declaration.onClause, isNull);
     var implementsClause = declaration.implementsClause!;
     expect(implementsClause.implementsKeyword, isNotNull);
-    NodeList<NamedType> interfaces = implementsClause.interfaces;
+    NodeList<NamedType> interfaces = implementsClause.interfaces2;
     expect(interfaces, hasLength(1));
     expect(interfaces[0].name.name, 'B');
     expect(interfaces[0].typeArguments, isNull);
@@ -1971,7 +1971,7 @@
     expect(declaration.onClause, isNull);
     var implementsClause = declaration.implementsClause!;
     expect(implementsClause.implementsKeyword, isNotNull);
-    NodeList<NamedType> interfaces = implementsClause.interfaces;
+    NodeList<NamedType> interfaces = implementsClause.interfaces2;
     expect(interfaces, hasLength(2));
     expect(interfaces[0].name.name, 'B');
     expect(interfaces[0].typeArguments!.arguments, hasLength(1));
@@ -2013,7 +2013,7 @@
     expect(declaration.documentationComment, isNull);
     var onClause = declaration.onClause!;
     expect(onClause.onKeyword, isNotNull);
-    NodeList<NamedType> constraints = onClause.superclassConstraints;
+    NodeList<NamedType> constraints = onClause.superclassConstraints2;
     expect(constraints, hasLength(1));
     expect(constraints[0].name.name, 'B');
     expect(constraints[0].typeArguments, isNull);
@@ -2035,7 +2035,7 @@
     expect(declaration.documentationComment, isNull);
     var onClause = declaration.onClause!;
     expect(onClause.onKeyword, isNotNull);
-    NodeList<NamedType> constraints = onClause.superclassConstraints;
+    NodeList<NamedType> constraints = onClause.superclassConstraints2;
     expect(constraints, hasLength(2));
     expect(constraints[0].name.name, 'B');
     expect(constraints[0].typeArguments, isNull);
@@ -2059,13 +2059,13 @@
     expect(declaration.documentationComment, isNull);
     var onClause = declaration.onClause!;
     expect(onClause.onKeyword, isNotNull);
-    NodeList<NamedType> constraints = onClause.superclassConstraints;
+    NodeList<NamedType> constraints = onClause.superclassConstraints2;
     expect(constraints, hasLength(1));
     expect(constraints[0].name.name, 'B');
     expect(constraints[0].typeArguments, isNull);
     var implementsClause = declaration.implementsClause!;
     expect(implementsClause.implementsKeyword, isNotNull);
-    NodeList<NamedType> interfaces = implementsClause.interfaces;
+    NodeList<NamedType> interfaces = implementsClause.interfaces2;
     expect(interfaces, hasLength(1));
     expect(interfaces[0].name.name, 'C');
     expect(interfaces[0].typeArguments, isNull);
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index 4b26412..4327899 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -1225,7 +1225,7 @@
   ListGetter_NodeReplacerTest_test_implementsClause(int arg0) : super(arg0);
 
   @override
-  NodeList<NamedType> getList(ImplementsClause node) => node.interfaces;
+  NodeList<NamedType> getList(ImplementsClause node) => node.interfaces2;
 }
 
 class ListGetter_NodeReplacerTest_test_labeledStatement
@@ -1327,7 +1327,7 @@
   ListGetter_NodeReplacerTest_test_withClause(int arg0) : super(arg0);
 
   @override
-  NodeList<NamedType> getList(WithClause node) => node.mixinTypes;
+  NodeList<NamedType> getList(WithClause node) => node.mixinTypes2;
 }
 
 class ListGetter_NodeReplacerTest_testAnnotatedNode
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index de0bea2..d2da736 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -6963,7 +6963,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType mixinType = dNode.withClause!.mixinTypes[0];
+      NamedType mixinType = dNode.withClause!.mixinTypes2[0];
       expect(mixinType.type, expectedType);
 
       var identifier = mixinType.name as SimpleIdentifier;
@@ -6977,7 +6977,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType implementedType = dNode.implementsClause!.interfaces[0];
+      NamedType implementedType = dNode.implementsClause!.interfaces2[0];
       expect(implementedType.type, expectedType);
 
       var identifier = implementedType.name as SimpleIdentifier;
@@ -7032,7 +7032,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType mixinType = dNode.withClause.mixinTypes[0];
+      NamedType mixinType = dNode.withClause.mixinTypes2[0];
       expect(mixinType.type, expectedType);
 
       var identifier = mixinType.name as SimpleIdentifier;
@@ -7046,7 +7046,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType interfaceType = dNode.implementsClause!.interfaces[0];
+      NamedType interfaceType = dNode.implementsClause!.interfaces2[0];
       expect(interfaceType.type, expectedType);
 
       var identifier = interfaceType.name as SimpleIdentifier;
diff --git a/pkg/analyzer/test/src/dart/resolution/non_nullable_bazel_workspace_test.dart b/pkg/analyzer/test/src/dart/resolution/non_nullable_bazel_workspace_test.dart
index 4b18551..8340942 100644
--- a/pkg/analyzer/test/src/dart/resolution/non_nullable_bazel_workspace_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/non_nullable_bazel_workspace_test.dart
@@ -2,6 +2,9 @@
 // for 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 'package:analyzer/src/dart/analysis/experiments.dart';
+import 'package:pub_semver/pub_semver.dart';
+import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -63,6 +66,52 @@
     assertType(findNode.namedType('int v'), 'int');
   }
 
+  test_buildFile_nonNullable_languageVersion_current() async {
+    newFile('$myPackageRootPath/BUILD', content: r'''
+dart_package(
+  null_safety = True,
+)
+''');
+
+    await resolveFileCode(
+      '$myPackageRootPath/lib/a.dart',
+      'int v = 0;',
+    );
+    _assertLanguageVersion(
+      package: ExperimentStatus.currentVersion,
+      override: null,
+    );
+  }
+
+  test_buildFile_nonNullable_languageVersion_fromWorkspace() async {
+    newFile('$workspaceRootPath/dart/build_defs/bzl/language.bzl', content: r'''
+_version = "2.9"
+_version_null_safety = "2.14"
+_version_for_analyzer = _version_null_safety
+
+language = struct(
+    version = _version,
+    version_null_safety = _version_null_safety,
+    version_for_analyzer = _version_for_analyzer,
+)
+''');
+
+    newFile('$myPackageRootPath/BUILD', content: r'''
+dart_package(
+  null_safety = True,
+)
+''');
+
+    await resolveFileCode(
+      '$myPackageRootPath/lib/a.dart',
+      'int v = 0;',
+    );
+    _assertLanguageVersion(
+      package: Version.parse('2.14.0'),
+      override: null,
+    );
+  }
+
   test_buildFile_nonNullable_oneLine_noComma() async {
     newFile('$myPackageRootPath/BUILD', content: r'''
 dart_package(null_safety = True)
@@ -99,4 +148,13 @@
 
     assertType(findNode.namedType('int v'), 'int*');
   }
+
+  void _assertLanguageVersion({
+    required Version package,
+    required Version? override,
+  }) async {
+    var element = result.libraryElement;
+    expect(element.languageVersion.package, package);
+    expect(element.languageVersion.override, override);
+  }
 }
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index 1921da7..5f7440a 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -814,7 +814,7 @@
     _withIndent(() {
       var properties = _Properties();
       properties.addToken('implementsKeyword', node.implementsKeyword);
-      properties.addNodeList('interfaces', node.interfaces);
+      properties.addNodeList('interfaces', node.interfaces2);
       _addAstNode(properties, node);
       _writeProperties(properties);
     });
@@ -1053,7 +1053,7 @@
       var properties = _Properties();
       properties.addToken('onKeyword', node.onKeyword);
       properties.addNodeList(
-          'superclassConstraints', node.superclassConstraints);
+          'superclassConstraints', node.superclassConstraints2);
       _addAstNode(properties, node);
       _writeProperties(properties);
     });
@@ -1531,7 +1531,7 @@
     _withIndent(() {
       var properties = _Properties();
       properties.addToken('withKeyword', node.withKeyword);
-      properties.addNodeList('mixinTypes', node.mixinTypes);
+      properties.addNodeList('mixinTypes', node.mixinTypes2);
       _addAstNode(properties, node);
       _writeProperties(properties);
     });
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
index d444d31..0cfeba2 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
@@ -1408,7 +1408,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    if (node.mixinTypes.contains(entity)) {
+    if (node.mixinTypes2.contains(entity)) {
       optype.completionLocation = 'WithClause_mixinType';
     }
     optype.includeTypeNameSuggestions = true;
diff --git a/pkg/compiler/lib/src/ir/scope_visitor.dart b/pkg/compiler/lib/src/ir/scope_visitor.dart
index a93bc05..942a0ad 100644
--- a/pkg/compiler/lib/src/ir/scope_visitor.dart
+++ b/pkg/compiler/lib/src/ir/scope_visitor.dart
@@ -336,7 +336,7 @@
 
   void _handleVariableDeclaration(
       ir.VariableDeclaration node, VariableUse usage) {
-    if (!node.isFieldFormal) {
+    if (!node.isInitializingFormal) {
       _scopeVariables.add(node);
     }
 
diff --git a/pkg/compiler/lib/src/kernel/transformations/late_lowering.dart b/pkg/compiler/lib/src/kernel/transformations/late_lowering.dart
index d2b3a00..c88b7b7 100644
--- a/pkg/compiler/lib/src/kernel/transformations/late_lowering.dart
+++ b/pkg/compiler/lib/src/kernel/transformations/late_lowering.dart
@@ -71,22 +71,15 @@
   bool _shouldLowerInstanceField(Field field) =>
       field.isLate && !field.isStatic;
 
-  String _mangleFieldName(Field field) {
-    assert(_shouldLowerInstanceField(field));
-    Class cls = field.enclosingClass!;
-    return '_#${cls.name}#${field.name.text}';
+  Name _mangleFieldCellName(Field field) {
+    assert(_shouldLowerStaticField(field));
+    return Name('_#${field.name.text}', field.enclosingLibrary);
   }
 
-  void transformAdditionalExports(Library library) {
-    List<Reference> additionalExports = library.additionalExports;
-    Set<Reference> newExports = {};
-    additionalExports.removeWhere((Reference reference) {
-      Field? cell = _fieldCells[reference.node];
-      if (cell == null) return false;
-      newExports.add(cell.getterReference);
-      return true;
-    });
-    additionalExports.addAll(newExports);
+  Name _mangleFieldName(Field field) {
+    assert(_shouldLowerInstanceField(field));
+    Class cls = field.enclosingClass!;
+    return Name('_#${cls.name}#${field.name.text}', field.enclosingLibrary);
   }
 
   ConstructorInvocation _callCellConstructor(Expression name, int fileOffset) =>
@@ -154,6 +147,13 @@
           Arguments([value])..fileOffset = fileOffset)
         ..fileOffset = fileOffset;
 
+  void exitLibrary() {
+    assert(_variableCells.isEmpty);
+    _fieldCells.clear();
+    _backingInstanceFields.clear();
+    _getterToField.clear();
+  }
+
   void enterFunction() {
     _variableCells.add(null);
   }
@@ -198,6 +198,7 @@
         type: InterfaceType(_coreTypes.cellClass, nonNullable),
         isFinal: true)
       ..fileOffset = fileOffset;
+
     return _addToCurrentScope(variable, cell);
   }
 
@@ -282,17 +283,71 @@
     return _fieldCells.putIfAbsent(field, () {
       int fileOffset = field.fileOffset;
       Name name = field.name;
-      field.getterReference.canonicalName?.unbind();
-      field.setterReference?.canonicalName?.unbind();
-      return Field.immutable(name,
+      Uri fileUri = field.fileUri;
+      DartType type = field.type;
+      Field fieldCell = Field.immutable(_mangleFieldCellName(field),
           type: InterfaceType(_coreTypes.cellClass, nonNullable),
           initializer: _callCellConstructor(
               _nameLiteral(name.text, fileOffset), fileOffset),
           isFinal: true,
           isStatic: true,
-          fileUri: field.fileUri)
+          fileUri: fileUri)
         ..fileOffset = fileOffset
         ..isNonNullableByDefault = true;
+      StaticGet fieldCellAccess() =>
+          StaticGet(fieldCell)..fileOffset = fileOffset;
+
+      Procedure getter = Procedure(
+          name,
+          ProcedureKind.Getter,
+          FunctionNode(
+              ReturnStatement(
+                  _callReader(_readField, fieldCellAccess(), type, fileOffset))
+                ..fileOffset = fileOffset,
+              returnType: type)
+            ..fileOffset = fileOffset,
+          isStatic: true,
+          fileUri: fileUri,
+          reference: field.getterReference)
+        ..fileOffset = fileOffset
+        ..isNonNullableByDefault = true;
+
+      VariableDeclaration setterValue = VariableDeclaration('value', type: type)
+        ..fileOffset = fileOffset;
+      VariableGet setterValueRead() =>
+          VariableGet(setterValue)..fileOffset = fileOffset;
+
+      Procedure setter = Procedure(
+          name,
+          ProcedureKind.Setter,
+          FunctionNode(
+              ReturnStatement(_callSetter(
+                  field.isFinal
+                      ? _coreTypes.cellFinalFieldValueSetter
+                      : _coreTypes.cellValueSetter,
+                  fieldCellAccess(),
+                  setterValueRead(),
+                  fileOffset))
+                ..fileOffset = fileOffset,
+              positionalParameters: [setterValue],
+              returnType: VoidType())
+            ..fileOffset = fileOffset,
+          isStatic: true,
+          fileUri: fileUri,
+          reference: field.setterReference)
+        ..fileOffset = fileOffset
+        ..isNonNullableByDefault = true;
+
+      TreeNode parent = field.parent!;
+      if (parent is Class) {
+        parent.addProcedure(getter);
+        parent.addProcedure(setter);
+      } else if (parent is Library) {
+        parent.addProcedure(getter);
+        parent.addProcedure(setter);
+      }
+
+      return fieldCell;
     });
   }
 
@@ -313,7 +368,7 @@
     Expression? initializer = field.initializer;
     Class enclosingClass = field.enclosingClass!;
 
-    Name mangledName = Name(_mangleFieldName(field), field.enclosingLibrary);
+    Name mangledName = _mangleFieldName(field);
     Field backingField = Field.mutable(mangledName,
         type: type,
         initializer: StaticInvocation(_coreTypes.createSentinelMethod,
@@ -518,36 +573,4 @@
     return FieldInitializer(backingField, initializer.value)
       ..fileOffset = initializer.fileOffset;
   }
-
-  StaticGet _fieldCellAccess(Field field, int fileOffset) =>
-      StaticGet(_fieldCell(field))..fileOffset = fileOffset;
-
-  TreeNode transformStaticGet(StaticGet node, Member contextMember) {
-    _contextMember = contextMember;
-
-    Member target = node.target;
-    if (target is Field && _shouldLowerStaticField(target)) {
-      int fileOffset = node.fileOffset;
-      StaticGet cell = _fieldCellAccess(target, fileOffset);
-      return _callReader(_readField, cell, target.type, fileOffset);
-    }
-
-    return node;
-  }
-
-  TreeNode transformStaticSet(StaticSet node, Member contextMember) {
-    _contextMember = contextMember;
-
-    Member target = node.target;
-    if (target is Field && _shouldLowerStaticField(target)) {
-      int fileOffset = node.fileOffset;
-      StaticGet cell = _fieldCellAccess(target, fileOffset);
-      Procedure setter = target.isFinal
-          ? _coreTypes.cellFinalFieldValueSetter
-          : _coreTypes.cellValueSetter;
-      return _callSetter(setter, cell, node.value, fileOffset);
-    }
-
-    return node;
-  }
 }
diff --git a/pkg/compiler/lib/src/kernel/transformations/lowering.dart b/pkg/compiler/lib/src/kernel/transformations/lowering.dart
index e04314b..2d3b374 100644
--- a/pkg/compiler/lib/src/kernel/transformations/lowering.dart
+++ b/pkg/compiler/lib/src/kernel/transformations/lowering.dart
@@ -21,12 +21,6 @@
     ClassHierarchy hierarchy, CompilerOptions? options) {
   final transformer = _Lowering(coreTypes, hierarchy, options);
   libraries.forEach(transformer.visitLibrary);
-
-  // Do a second pass to remove/replace now-unused nodes.
-
-  // Since the transformer API doesn't visit `Library.additionalExports`, we
-  // have to manually replace references to transformed nodes.
-  libraries.forEach(transformer.transformAdditionalExports);
 }
 
 class _Lowering extends Transformer {
@@ -40,10 +34,6 @@
       : factorySpecializer = FactorySpecializer(coreTypes, hierarchy),
         _lateLowering = LateLowering(coreTypes, _options);
 
-  void transformAdditionalExports(Library node) {
-    _lateLowering.transformAdditionalExports(node);
-  }
-
   @override
   TreeNode defaultMember(Member node) {
     _currentMember = node;
@@ -51,6 +41,13 @@
   }
 
   @override
+  TreeNode visitLibrary(Library node) {
+    node.transformChildren(this);
+    _lateLowering.exitLibrary();
+    return node;
+  }
+
+  @override
   TreeNode visitStaticInvocation(StaticInvocation node) {
     node.transformChildren(this);
     return factorySpecializer.transformStaticInvocation(node, _currentMember!);
@@ -94,16 +91,4 @@
     node.transformChildren(this);
     return _lateLowering.transformFieldInitializer(node, _currentMember!);
   }
-
-  @override
-  TreeNode visitStaticGet(StaticGet node) {
-    node.transformChildren(this);
-    return _lateLowering.transformStaticGet(node, _currentMember!);
-  }
-
-  @override
-  TreeNode visitStaticSet(StaticSet node) {
-    node.transformChildren(this);
-    return _lateLowering.transformStaticSet(node, _currentMember!);
-  }
 }
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 605ac63..08e8045 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -4499,12 +4499,16 @@
 
   int _extractEnumIndexFromConstantValue(
       ConstantValue constant, ClassEntity classElement) {
-    if (constant is ConstructedConstantValue) {
-      if (constant.type.element == classElement) {
-        assert(constant.fields.length == 1 || constant.fields.length == 2);
-        ConstantValue indexConstant = constant.fields.values.first;
-        if (indexConstant is IntConstantValue) {
-          return indexConstant.intValue.toInt();
+    if (constant is ConstructedConstantValue &&
+        constant.type.element == classElement) {
+      assert(constant.fields.length >= 1);
+      for (var field in constant.fields.keys) {
+        if (field.memberName.text == "index") {
+          ConstantValue indexConstant = constant.fields[field];
+          if (indexConstant is IntConstantValue) {
+            return indexConstant.intValue.toInt();
+          }
+          break;
         }
       }
     }
diff --git a/pkg/compiler/test/field_analysis/jdata/effectively_constant_state.dart b/pkg/compiler/test/field_analysis/jdata/effectively_constant_state.dart
index 1bb9851..b0c0c7e 100644
--- a/pkg/compiler/test/field_analysis/jdata/effectively_constant_state.dart
+++ b/pkg/compiler/test/field_analysis/jdata/effectively_constant_state.dart
@@ -25,7 +25,7 @@
   /*member: Class.state1:constant=IntConstant(1)*/
   final int state1;
 
-  /*member: Class.state2:constant=ConstructedConstant(Enum(_name=StringConstant("Enum.c"),index=IntConstant(2)))*/
+  /*member: Class.state2:constant=ConstructedConstant(Enum(_name=StringConstant("c"),index=IntConstant(2)))*/
   final Enum state2;
 
   Class({this.state1: 1, this.state2: Enum.c});
diff --git a/pkg/compiler/test/impact/data/classes.dart b/pkg/compiler/test/impact/data/classes.dart
index 3b8bfc7..471a2c8 100644
--- a/pkg/compiler/test/impact/data/classes.dart
+++ b/pkg/compiler/test/impact/data/classes.dart
@@ -264,8 +264,8 @@
 
 /*member: testEnum:
  static=[
-  Enum._name=StringConstant("Enum.A"),
-  Enum.index=IntConstant(0)],
+  _Enum._name=StringConstant("A"),
+  _Enum.index=IntConstant(0)],
  type=[
   const:Enum,
   inst:JSInt,
diff --git a/pkg/compiler/test/inference/data/enum.dart b/pkg/compiler/test/inference/data/enum.dart
index 5f650f3..5ee2d9b 100644
--- a/pkg/compiler/test/inference/data/enum.dart
+++ b/pkg/compiler/test/inference/data/enum.dart
@@ -55,7 +55,7 @@
   a,
 }
 
-/*member: enumToString1:Value([exact=JSString], value: "Enum4.a")*/
+/*member: enumToString1:[exact=JSString]*/
 enumToString1() {
   return Enum4.a. /*invoke: [exact=Enum4]*/ toString();
 }
diff --git a/pkg/dev_compiler/lib/src/kernel/module_symbols_collector.dart b/pkg/dev_compiler/lib/src/kernel/module_symbols_collector.dart
index 7c77325e..e99dc07 100644
--- a/pkg/dev_compiler/lib/src/kernel/module_symbols_collector.dart
+++ b/pkg/dev_compiler/lib/src/kernel/module_symbols_collector.dart
@@ -174,7 +174,7 @@
 
   @override
   void visitVariableDeclaration(VariableDeclaration node) {
-    var kind = node.isFieldFormal
+    var kind = node.isInitializingFormal
         ? VariableSymbolKind.formal
         : VariableSymbolKind.local;
     var variableSymbol = _createVariableSymbol(node, kind);
diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index 3822c10..3c3b87c 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -13,7 +13,6 @@
         ConstructorInvocation,
         Expression,
         Field,
-        FieldInitializer,
         InstanceAccessKind,
         InstanceGet,
         IntLiteral,
@@ -24,10 +23,10 @@
         Reference,
         ReturnStatement,
         StaticGet,
+        StringConcatenation,
         StringLiteral,
         SuperInitializer,
-        ThisExpression,
-        VariableGet;
+        ThisExpression;
 import 'package:kernel/core_types.dart';
 
 import 'package:kernel/reference_from_index.dart' show IndexedClass;
@@ -45,13 +44,7 @@
 
 import '../util/helpers.dart';
 
-import '../modifier.dart'
-    show
-        constMask,
-        finalMask,
-        hasInitializerMask,
-        initializingFormalMask,
-        staticMask;
+import '../modifier.dart' show constMask, hasInitializerMask, staticMask;
 
 import '../scope.dart';
 
@@ -81,8 +74,6 @@
 
   final NamedTypeBuilder objectType;
 
-  final NamedTypeBuilder enumType;
-
   final NamedTypeBuilder listType;
 
   EnumBuilder.internal(
@@ -95,7 +86,7 @@
       this.intType,
       this.listType,
       this.objectType,
-      this.enumType,
+      TypeBuilder enumType,
       this.stringType,
       SourceLibraryBuilder parent,
       int startCharOffset,
@@ -107,7 +98,7 @@
             0,
             name,
             /* typeVariable = */ null,
-            /* supertype = */ null,
+            enumType,
             /* interfaces = */ null,
             /* onTypes = */ null,
             scope,
@@ -154,7 +145,7 @@
         /* fileUri = */ null,
         /* charOffset = */ null);
     NamedTypeBuilder enumType = new NamedTypeBuilder(
-        "Enum",
+        "_Enum",
         const NullabilityBuilder.omitted(),
         /* arguments = */ null,
         /* fileUri = */ null,
@@ -178,25 +169,16 @@
         /* fileUri = */ null,
         /* charOffset = */ null);
 
-    /// metadata class E {
-    ///   final int index;
-    ///   final String _name;
-    ///   const E(this.index, this._name);
-    ///   static const E id0 = const E(0, 'E.id0');
-    ///   ...
-    ///   static const E idn-1 = const E(n - 1, 'E.idn-1');
-    ///   static const List<E> values = const <E>[id0, ..., idn-1];
-    ///   String toString() => _name;
-    /// }
-
-    NameScheme instanceFieldNameScheme = new NameScheme(
-        isInstanceMember: true,
-        className: name,
-        isExtensionMember: false,
-        extensionName: null,
-        libraryReference: referencesFromIndexed != null
-            ? referencesFromIndexed.library.reference
-            : parent.library.reference);
+    // metadata class E extends _Enum {
+    //   const E(int index, String name) : super(index, name);
+    //   static const E id0 = const E(0, 'id0');
+    //   ...
+    //   static const E id${n-1} = const E(n - 1, 'idn-1');
+    //   static const List<E> values = const <E>[id0, ..., id${n-1}];
+    //   String toString() {
+    //     return "E.${_Enum::_name}";
+    //   }
+    // }
 
     NameScheme staticFieldNameScheme = new NameScheme(
         isInstanceMember: false,
@@ -218,10 +200,6 @@
 
     Constructor? constructorReference;
     Reference? toStringReference;
-    Reference? indexGetterReference;
-    Reference? indexSetterReference;
-    Reference? _nameGetterReference;
-    Reference? _nameSetterReference;
     Reference? valuesGetterReference;
     Reference? valuesSetterReference;
     if (referencesFromIndexed != null) {
@@ -229,15 +207,6 @@
           referencesFromIndexed.lookupConstructor(new Name("")) as Constructor;
       toStringReference =
           referencesFromIndexed.lookupGetterReference(new Name("toString"));
-      Name indexName = new Name("index");
-      indexGetterReference =
-          referencesFromIndexed.lookupGetterReference(indexName);
-      indexSetterReference =
-          referencesFromIndexed.lookupSetterReference(indexName);
-      _nameGetterReference = referencesFromIndexed.lookupGetterReference(
-          new Name("_name", referencesFromIndexed.library));
-      _nameSetterReference = referencesFromIndexed.lookupSetterReference(
-          new Name("_name", referencesFromIndexed.library));
       Name valuesName = new Name("values");
       valuesGetterReference =
           referencesFromIndexed.lookupGetterReference(valuesName);
@@ -245,32 +214,6 @@
           referencesFromIndexed.lookupSetterReference(valuesName);
     }
 
-    FieldBuilder indexBuilder = new SourceFieldBuilder(
-        /* metadata = */ null,
-        intType,
-        "index",
-        finalMask | hasInitializerMask,
-        /* isTopLevel = */ false,
-        parent,
-        charOffset,
-        charOffset,
-        instanceFieldNameScheme,
-        fieldGetterReference: indexGetterReference,
-        fieldSetterReference: indexSetterReference);
-    members["index"] = indexBuilder;
-    FieldBuilder nameBuilder = new SourceFieldBuilder(
-        /* metadata = */ null,
-        stringType,
-        "_name",
-        finalMask | hasInitializerMask,
-        /* isTopLevel = */ false,
-        parent,
-        charOffset,
-        charOffset,
-        instanceFieldNameScheme,
-        fieldGetterReference: _nameGetterReference,
-        fieldSetterReference: _nameSetterReference);
-    members["_name"] = nameBuilder;
     ConstructorBuilder constructorBuilder = new ConstructorBuilderImpl(
         /* metadata = */ null,
         constMask,
@@ -278,10 +221,10 @@
         "",
         /* typeParameters = */ null,
         <FormalParameterBuilder>[
-          new FormalParameterBuilder(null, initializingFormalMask, intType,
-              "index", parent, charOffset),
-          new FormalParameterBuilder(null, initializingFormalMask, stringType,
-              "_name", parent, charOffset)
+          new FormalParameterBuilder(
+              null, 0, intType, "index", parent, charOffset),
+          new FormalParameterBuilder(
+              null, 0, stringType, "name", parent, charOffset)
         ],
         parent,
         charOffset,
@@ -304,10 +247,6 @@
         fieldGetterReference: valuesGetterReference,
         fieldSetterReference: valuesSetterReference);
     members["values"] = valuesBuilder;
-    constructorBuilder
-      ..registerInitializedField(nameBuilder)
-      ..registerInitializedField(indexBuilder)
-      ..registerInitializedField(valuesBuilder);
     ProcedureBuilder toStringBuilder = new SourceProcedureBuilder(
         /* metadata = */ null,
         0,
@@ -328,6 +267,7 @@
         isExtensionMember: false,
         isInstanceMember: true);
     members["toString"] = toStringBuilder;
+    constructorBuilder.registerInitializedField(valuesBuilder);
     String className = name;
     if (enumConstantInfos != null) {
       for (int i = 0; i < enumConstantInfos.length; i++) {
@@ -442,26 +382,11 @@
         coreLibrary.scope, charOffset, fileUri, libraryBuilder);
     objectType.resolveIn(
         coreLibrary.scope, charOffset, fileUri, libraryBuilder);
-    enumType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+    TypeBuilder supertypeBuilder = this.supertypeBuilder!;
+    supertypeBuilder.resolveIn(
+        coreLibrary.scope, charOffset, fileUri, libraryBuilder);
     listType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
 
-    cls.implementedTypes
-        .add(enumType.buildSupertype(libraryBuilder, charOffset, fileUri)!);
-
-    SourceFieldBuilder indexFieldBuilder =
-        firstMemberNamed("index") as SourceFieldBuilder;
-    indexFieldBuilder.build(libraryBuilder);
-    Field indexField = indexFieldBuilder.field;
-    SourceFieldBuilder nameFieldBuilder =
-        firstMemberNamed("_name") as SourceFieldBuilder;
-    nameFieldBuilder.build(libraryBuilder);
-    Field nameField = nameFieldBuilder.field;
-    ProcedureBuilder toStringBuilder =
-        firstMemberNamed("toString") as ProcedureBuilder;
-    toStringBuilder.body = new ReturnStatement(new InstanceGet(
-        InstanceAccessKind.Instance, new ThisExpression(), nameField.name,
-        interfaceTarget: nameField, resultType: nameField.type));
-
     List<Expression> values = <Expression>[];
     if (enumConstantInfos != null) {
       for (EnumConstantInfo? enumConstantInfo in enumConstantInfos!) {
@@ -481,29 +406,22 @@
     ConstructorBuilderImpl constructorBuilder =
         constructorScopeBuilder[""] as ConstructorBuilderImpl;
     Constructor constructor = constructorBuilder.build(libraryBuilder);
-    constructor.initializers.insert(
-        0,
-        new FieldInitializer(indexField,
-            new VariableGet(constructor.function.positionalParameters[0]))
-          ..parent = constructor);
-    constructor.initializers.insert(
-        1,
-        new FieldInitializer(nameField,
-            new VariableGet(constructor.function.positionalParameters[1]))
-          ..parent = constructor);
     ClassBuilder objectClass = objectType.declaration as ClassBuilder;
-    MemberBuilder? superConstructor = objectClass.findConstructorOrFactory(
+    ClassBuilder enumClass = supertypeBuilder.declaration as ClassBuilder;
+    MemberBuilder? superConstructor = enumClass.findConstructorOrFactory(
         "", charOffset, fileUri, libraryBuilder);
     if (superConstructor == null || !superConstructor.isConstructor) {
       // TODO(ahe): Ideally, we would also want to check that [Object]'s
       // unnamed constructor requires no arguments. But that information isn't
       // always available at this point, and it's not really a situation that
       // can happen unless you start modifying the SDK sources.
+      // (We should add a correct message. We no longer depend on Object here.)
       library.addProblem(messageNoUnnamedConstructorInObject,
           objectClass.charOffset, objectClass.name.length, objectClass.fileUri);
     } else {
       constructor.initializers.add(new SuperInitializer(
-          superConstructor.member as Constructor, new Arguments.empty())
+          superConstructor.member as Constructor,
+          new Arguments.forwarded(constructor.function, libraryBuilder.library))
         ..parent = constructor);
     }
     return super.build(libraryBuilder, coreLibrary);
@@ -551,13 +469,33 @@
           }
           Arguments arguments = new Arguments(<Expression>[
             new IntLiteral(index++),
-            new StringLiteral("$name.$constant")
+            new StringLiteral(constant),
           ]);
           field.buildBody(coreTypes,
               new ConstructorInvocation(constructor, arguments, isConst: true));
         }
       }
     }
+
+    ProcedureBuilder toStringBuilder =
+        firstMemberNamed("toString") as ProcedureBuilder;
+
+    TypeBuilder supertypeBuilder = this.supertypeBuilder!;
+    ClassBuilder enumClass = supertypeBuilder.declaration as ClassBuilder;
+    MemberBuilder? nameFieldBuilder =
+        enumClass.lookupLocalMember("_name") as MemberBuilder?;
+    if (nameFieldBuilder != null) {
+      Field nameField = nameFieldBuilder.member as Field;
+
+      toStringBuilder.body = new ReturnStatement(new StringConcatenation([
+        new StringLiteral("${cls.demangledName}."),
+        new InstanceGet.byReference(
+            InstanceAccessKind.Instance, new ThisExpression(), nameField.name,
+            interfaceTargetReference: nameField.getterReference,
+            resultType: nameField.getterType),
+      ]));
+    } else {}
+
     super.buildOutlineExpressions(
         library, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
   }
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 bd77903..c0df993 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
@@ -141,7 +141,7 @@
           type: builtType,
           isFinal: isFinal,
           isConst: isConst,
-          isFieldFormal: isInitializingFormal,
+          isInitializingFormal: isInitializingFormal,
           isCovariantByDeclaration: isCovariantByDeclaration,
           isRequired: isNamedRequired,
           hasDeclaredInitializer: hasDeclaredInitializer,
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index f164ecc..772314b 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -54,7 +54,7 @@
 
   /// The [Member] to use when invoking this member builder.
   ///
-  /// For a constructor, a field, a regular method, a getter an operator or
+  /// For a constructor, a field, a regular method, a getter, an operator or
   /// a factory this is the [member] itself. For a setter this is `null`.
   Member? get invokeTarget;
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index 2d5435a..4cc99a7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -644,7 +644,7 @@
       DartType? type,
       bool isFinal: false,
       bool isConst: false,
-      bool isFieldFormal: false,
+      bool isInitializingFormal: false,
       bool isCovariantByDeclaration: false,
       bool isLocalFunction: false}) {
     // ignore: unnecessary_null_comparison
@@ -654,7 +654,7 @@
         initializer: initializer,
         isFinal: isFinal,
         isConst: isConst,
-        isFieldFormal: isFieldFormal,
+        isInitializingFormal: isInitializingFormal,
         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 92a9dca..b587d91 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -1591,7 +1591,7 @@
       DartType? type,
       bool isFinal: false,
       bool isConst: false,
-      bool isFieldFormal: false,
+      bool isInitializingFormal: false,
       bool isCovariantByDeclaration: false,
       bool isLocalFunction: false,
       bool isLate: false,
@@ -1605,7 +1605,7 @@
             type: type ?? const DynamicType(),
             isFinal: isFinal,
             isConst: isConst,
-            isFieldFormal: isFieldFormal,
+            isInitializingFormal: isInitializingFormal,
             isCovariantByDeclaration: isCovariantByDeclaration,
             isLate: isLate,
             isRequired: isRequired,
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 5207c06..bd7fb08 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1632,6 +1632,9 @@
 abstract class Enum {
 }
 
+abstract class _Enum {
+}
+
 class String {}
 
 class Symbol {}
diff --git a/pkg/front_end/lib/src/testing/id_extractor.dart b/pkg/front_end/lib/src/testing/id_extractor.dart
index 0f7429d..0cfa685 100644
--- a/pkg/front_end/lib/src/testing/id_extractor.dart
+++ b/pkg/front_end/lib/src/testing/id_extractor.dart
@@ -312,7 +312,7 @@
 
   @override
   void visitVariableGet(VariableGet node) {
-    if (node.variable.name != null && !node.variable.isFieldFormal) {
+    if (node.variable.name != null && !node.variable.isInitializingFormal) {
       // Skip use of synthetic variables.
       computeForNode(node, computeDefaultNodeId(node));
     }
diff --git a/pkg/front_end/test/extensions/data/ambiguous/lib1.dart b/pkg/front_end/test/extensions/data/ambiguous/lib1.dart
index 3e96ec7..d2ec93e 100644
--- a/pkg/front_end/test/extensions/data/ambiguous/lib1.dart
+++ b/pkg/front_end/test/extensions/data/ambiguous/lib1.dart
@@ -8,7 +8,9 @@
   AmbiguousExtension1,
   AmbiguousExtension2,
   UnambiguousExtension1,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: AmbiguousExtension1:
  builder-name=AmbiguousExtension1,
diff --git a/pkg/front_end/test/extensions/data/ambiguous/lib2.dart b/pkg/front_end/test/extensions/data/ambiguous/lib2.dart
index 60dab6f..5554fab 100644
--- a/pkg/front_end/test/extensions/data/ambiguous/lib2.dart
+++ b/pkg/front_end/test/extensions/data/ambiguous/lib2.dart
@@ -8,7 +8,9 @@
   AmbiguousExtension1,
   AmbiguousExtension2,
   UnambiguousExtension2,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: AmbiguousExtension1:
  builder-name=AmbiguousExtension1,
diff --git a/pkg/front_end/test/extensions/data/ambiguous/main.dart b/pkg/front_end/test/extensions/data/ambiguous/main.dart
index 76b412c..b3032bc 100644
--- a/pkg/front_end/test/extensions/data/ambiguous/main.dart
+++ b/pkg/front_end/test/extensions/data/ambiguous/main.dart
@@ -6,6 +6,8 @@
 
 /*library: scope=[
   async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName,
   lib1.dart.AmbiguousExtension1,
   lib1.dart.AmbiguousExtension2,
   lib1.dart.UnambiguousExtension1,
diff --git a/pkg/front_end/test/extensions/data/as_show/lib.dart b/pkg/front_end/test/extensions/data/as_show/lib.dart
index 2511ba6..0f83439 100644
--- a/pkg/front_end/test/extensions/data/as_show/lib.dart
+++ b/pkg/front_end/test/extensions/data/as_show/lib.dart
@@ -6,7 +6,9 @@
 
 /*library: scope=[
   Extension1,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: Extension1:
  builder-name=Extension1,
diff --git a/pkg/front_end/test/extensions/data/as_show/main.dart b/pkg/front_end/test/extensions/data/as_show/main.dart
index c65f8c0..6d3e459 100644
--- a/pkg/front_end/test/extensions/data/as_show/main.dart
+++ b/pkg/front_end/test/extensions/data/as_show/main.dart
@@ -6,6 +6,8 @@
 
 /*library: scope=[
   async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName,
   lib.dart.Extension1,
   origin.dart.Extension2]*/
 
diff --git a/pkg/front_end/test/extensions/data/as_show/origin.dart b/pkg/front_end/test/extensions/data/as_show/origin.dart
index abbeee6..3ba1c97 100644
--- a/pkg/front_end/test/extensions/data/as_show/origin.dart
+++ b/pkg/front_end/test/extensions/data/as_show/origin.dart
@@ -6,7 +6,9 @@
 
 /*library: scope=[
   Extension2,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: Extension2:
  builder-name=Extension2,
diff --git a/pkg/front_end/test/extensions/data/explicit_this.dart b/pkg/front_end/test/extensions/data/explicit_this.dart
index e1fcd49..3fa67bc 100644
--- a/pkg/front_end/test/extensions/data/explicit_this.dart
+++ b/pkg/front_end/test/extensions/data/explicit_this.dart
@@ -6,7 +6,9 @@
 
 /*library: scope=[
   A2,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 class A1 {
   Object field;
diff --git a/pkg/front_end/test/extensions/data/export_twice/lib1.dart b/pkg/front_end/test/extensions/data/export_twice/lib1.dart
index 14a21cd..98bceb7 100644
--- a/pkg/front_end/test/extensions/data/export_twice/lib1.dart
+++ b/pkg/front_end/test/extensions/data/export_twice/lib1.dart
@@ -6,7 +6,9 @@
 
 /*library: scope=[
   E,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 class A {}
 
diff --git a/pkg/front_end/test/extensions/data/export_twice/lib2.dart b/pkg/front_end/test/extensions/data/export_twice/lib2.dart
index e3d0760..2ec4f6e 100644
--- a/pkg/front_end/test/extensions/data/export_twice/lib2.dart
+++ b/pkg/front_end/test/extensions/data/export_twice/lib2.dart
@@ -2,7 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*library: scope=[async.dart.FutureExtensions]*/
+/*library: scope=[
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 // @dart = 2.9
 
diff --git a/pkg/front_end/test/extensions/data/export_twice/main.dart b/pkg/front_end/test/extensions/data/export_twice/main.dart
index 919a7ff..50f805b 100644
--- a/pkg/front_end/test/extensions/data/export_twice/main.dart
+++ b/pkg/front_end/test/extensions/data/export_twice/main.dart
@@ -6,6 +6,8 @@
 
 /*library: scope=[
   async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName,
   lib1.dart.E]*/
 
 import 'lib1.dart';
diff --git a/pkg/front_end/test/extensions/data/export_unnamed/lib.dart b/pkg/front_end/test/extensions/data/export_unnamed/lib.dart
index b6fab4b..dcba01e 100644
--- a/pkg/front_end/test/extensions/data/export_unnamed/lib.dart
+++ b/pkg/front_end/test/extensions/data/export_unnamed/lib.dart
@@ -7,7 +7,9 @@
 /*library: scope=[
   NamedExtension,
   _extension#0,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: _extension#0:
  builder-name=_extension#0,
diff --git a/pkg/front_end/test/extensions/data/export_unnamed/main.dart b/pkg/front_end/test/extensions/data/export_unnamed/main.dart
index 5e37c32..3eabaef 100644
--- a/pkg/front_end/test/extensions/data/export_unnamed/main.dart
+++ b/pkg/front_end/test/extensions/data/export_unnamed/main.dart
@@ -6,6 +6,8 @@
 
 /*library: scope=[
   async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName,
   lib.dart.NamedExtension]*/
 
 import 'lib.dart';
diff --git a/pkg/front_end/test/extensions/data/extension_on_type_variable.dart b/pkg/front_end/test/extensions/data/extension_on_type_variable.dart
index 5f7bb41..e40cd1c 100644
--- a/pkg/front_end/test/extensions/data/extension_on_type_variable.dart
+++ b/pkg/front_end/test/extensions/data/extension_on_type_variable.dart
@@ -6,7 +6,9 @@
 
 /*library: scope=[
   GeneralGeneric,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: GeneralGeneric:
  builder-name=GeneralGeneric,
diff --git a/pkg/front_end/test/extensions/data/implicit_this.dart b/pkg/front_end/test/extensions/data/implicit_this.dart
index 733fb79..2dd48a4 100644
--- a/pkg/front_end/test/extensions/data/implicit_this.dart
+++ b/pkg/front_end/test/extensions/data/implicit_this.dart
@@ -6,7 +6,9 @@
 
 /*library: scope=[
   A2,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 class A1 {
   Object field;
diff --git a/pkg/front_end/test/extensions/data/instance_members.dart b/pkg/front_end/test/extensions/data/instance_members.dart
index 6bd7d39..e7ee05b 100644
--- a/pkg/front_end/test/extensions/data/instance_members.dart
+++ b/pkg/front_end/test/extensions/data/instance_members.dart
@@ -7,7 +7,9 @@
 /*library: scope=[
   A2,
   B2,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 class A1 {}
 
diff --git a/pkg/front_end/test/extensions/data/named_declarations.dart b/pkg/front_end/test/extensions/data/named_declarations.dart
index 5f7d266..c108a11 100644
--- a/pkg/front_end/test/extensions/data/named_declarations.dart
+++ b/pkg/front_end/test/extensions/data/named_declarations.dart
@@ -9,7 +9,9 @@
   B2,
   B3,
   B4,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 class A1 {}
 
diff --git a/pkg/front_end/test/extensions/data/other_kinds.dart b/pkg/front_end/test/extensions/data/other_kinds.dart
index d38a105..38003af 100644
--- a/pkg/front_end/test/extensions/data/other_kinds.dart
+++ b/pkg/front_end/test/extensions/data/other_kinds.dart
@@ -6,7 +6,9 @@
 
 /*library: scope=[
   A2,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 class A1 {
   int _instanceField;
diff --git a/pkg/front_end/test/extensions/data/part/main.dart b/pkg/front_end/test/extensions/data/part/main.dart
index 124b206..7f7a5c0 100644
--- a/pkg/front_end/test/extensions/data/part/main.dart
+++ b/pkg/front_end/test/extensions/data/part/main.dart
@@ -5,7 +5,9 @@
 /*library: scope=[
   Extension,
   _extension#0,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 part 'part.dart';
 
diff --git a/pkg/front_end/test/extensions/data/patching/main.dart b/pkg/front_end/test/extensions/data/patching/main.dart
index 43fab2c..c73c1b6 100644
--- a/pkg/front_end/test/extensions/data/patching/main.dart
+++ b/pkg/front_end/test/extensions/data/patching/main.dart
@@ -6,6 +6,8 @@
 
 /*library: scope=[
   async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName,
   origin.dart.Extension,
   origin.dart.GenericExtension]*/
 
diff --git a/pkg/front_end/test/extensions/data/patching/origin.dart b/pkg/front_end/test/extensions/data/patching/origin.dart
index f11eb98..ee167d4 100644
--- a/pkg/front_end/test/extensions/data/patching/origin.dart
+++ b/pkg/front_end/test/extensions/data/patching/origin.dart
@@ -7,7 +7,9 @@
 /*library: scope=[
   Extension,
   GenericExtension,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: Extension:
  builder-name=Extension,
diff --git a/pkg/front_end/test/extensions/data/prefix/lib1.dart b/pkg/front_end/test/extensions/data/prefix/lib1.dart
index 37dcd3b..66eef24 100644
--- a/pkg/front_end/test/extensions/data/prefix/lib1.dart
+++ b/pkg/front_end/test/extensions/data/prefix/lib1.dart
@@ -7,7 +7,9 @@
 /*library: scope=[
   HiddenExtension1,
   ShownExtension1,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: ShownExtension1:
  builder-name=ShownExtension1,
diff --git a/pkg/front_end/test/extensions/data/prefix/lib2.dart b/pkg/front_end/test/extensions/data/prefix/lib2.dart
index 6c32e13..6bc2749 100644
--- a/pkg/front_end/test/extensions/data/prefix/lib2.dart
+++ b/pkg/front_end/test/extensions/data/prefix/lib2.dart
@@ -7,7 +7,9 @@
 /*library: scope=[
   HiddenExtension2,
   ShownExtension2,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: HiddenExtension2:
  builder-name=HiddenExtension2,
diff --git a/pkg/front_end/test/extensions/data/prefix/lib3.dart b/pkg/front_end/test/extensions/data/prefix/lib3.dart
index a7245a0..f56416d 100644
--- a/pkg/front_end/test/extensions/data/prefix/lib3.dart
+++ b/pkg/front_end/test/extensions/data/prefix/lib3.dart
@@ -6,7 +6,9 @@
 
 /*library: scope=[
   ShownExtension3,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: ShownExtension3:
  builder-name=ShownExtension3,
diff --git a/pkg/front_end/test/extensions/data/prefix/main.dart b/pkg/front_end/test/extensions/data/prefix/main.dart
index 3d5a192..05a1e8c 100644
--- a/pkg/front_end/test/extensions/data/prefix/main.dart
+++ b/pkg/front_end/test/extensions/data/prefix/main.dart
@@ -6,6 +6,8 @@
 
 /*library: scope=[
   async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName,
   lib1.dart.ShownExtension1,
   lib2.dart.ShownExtension2,
   lib3.dart.ShownExtension3]*/
diff --git a/pkg/front_end/test/extensions/data/reexport/lib.dart b/pkg/front_end/test/extensions/data/reexport/lib.dart
index c250d6a..f9286f6 100644
--- a/pkg/front_end/test/extensions/data/reexport/lib.dart
+++ b/pkg/front_end/test/extensions/data/reexport/lib.dart
@@ -2,7 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*library: scope=[async.dart.FutureExtensions]*/
+/*library: scope=[
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 // @dart = 2.9
 
diff --git a/pkg/front_end/test/extensions/data/reexport/lib1.dart b/pkg/front_end/test/extensions/data/reexport/lib1.dart
index ecf38c5..0e1aef3 100644
--- a/pkg/front_end/test/extensions/data/reexport/lib1.dart
+++ b/pkg/front_end/test/extensions/data/reexport/lib1.dart
@@ -7,7 +7,9 @@
 /*library: scope=[
   ClashingExtension,
   UniqueExtension1,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: ClashingExtension:
  builder-name=ClashingExtension,
diff --git a/pkg/front_end/test/extensions/data/reexport/lib2.dart b/pkg/front_end/test/extensions/data/reexport/lib2.dart
index 56e8c50..a6a9289 100644
--- a/pkg/front_end/test/extensions/data/reexport/lib2.dart
+++ b/pkg/front_end/test/extensions/data/reexport/lib2.dart
@@ -7,7 +7,9 @@
 /*library: scope=[
   ClashingExtension,
   UniqueExtension2,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: ClashingExtension:
  builder-name=ClashingExtension,
diff --git a/pkg/front_end/test/extensions/data/reexport/main.dart b/pkg/front_end/test/extensions/data/reexport/main.dart
index 7238499..cec1552 100644
--- a/pkg/front_end/test/extensions/data/reexport/main.dart
+++ b/pkg/front_end/test/extensions/data/reexport/main.dart
@@ -6,6 +6,8 @@
 
 /*library: scope=[
   async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName,
   lib1.dart.UniqueExtension1,
   lib2.dart.UniqueExtension2]*/
 
diff --git a/pkg/front_end/test/extensions/data/show_hide/lib1.dart b/pkg/front_end/test/extensions/data/show_hide/lib1.dart
index 37dcd3b..66eef24 100644
--- a/pkg/front_end/test/extensions/data/show_hide/lib1.dart
+++ b/pkg/front_end/test/extensions/data/show_hide/lib1.dart
@@ -7,7 +7,9 @@
 /*library: scope=[
   HiddenExtension1,
   ShownExtension1,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: ShownExtension1:
  builder-name=ShownExtension1,
diff --git a/pkg/front_end/test/extensions/data/show_hide/lib2.dart b/pkg/front_end/test/extensions/data/show_hide/lib2.dart
index 6c32e13..6bc2749 100644
--- a/pkg/front_end/test/extensions/data/show_hide/lib2.dart
+++ b/pkg/front_end/test/extensions/data/show_hide/lib2.dart
@@ -7,7 +7,9 @@
 /*library: scope=[
   HiddenExtension2,
   ShownExtension2,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 /*class: HiddenExtension2:
  builder-name=HiddenExtension2,
diff --git a/pkg/front_end/test/extensions/data/show_hide/main.dart b/pkg/front_end/test/extensions/data/show_hide/main.dart
index 3846220..470c0ca 100644
--- a/pkg/front_end/test/extensions/data/show_hide/main.dart
+++ b/pkg/front_end/test/extensions/data/show_hide/main.dart
@@ -6,6 +6,8 @@
 
 /*library: scope=[
   async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName,
   lib1.dart.ShownExtension1,
   lib2.dart.ShownExtension2]*/
 
diff --git a/pkg/front_end/test/extensions/data/static_members.dart b/pkg/front_end/test/extensions/data/static_members.dart
index eab1942..0796bc8 100644
--- a/pkg/front_end/test/extensions/data/static_members.dart
+++ b/pkg/front_end/test/extensions/data/static_members.dart
@@ -7,7 +7,9 @@
 /*library: scope=[
   A2,
   B2,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 class A1 {}
 
diff --git a/pkg/front_end/test/extensions/data/super.dart b/pkg/front_end/test/extensions/data/super.dart
index df22e8f..e01d659 100644
--- a/pkg/front_end/test/extensions/data/super.dart
+++ b/pkg/front_end/test/extensions/data/super.dart
@@ -6,7 +6,9 @@
 
 /*library: scope=[
   A2,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 class A1 {
   method1() {}
diff --git a/pkg/front_end/test/extensions/data/type_variables.dart b/pkg/front_end/test/extensions/data/type_variables.dart
index 8153930..26c0198 100644
--- a/pkg/front_end/test/extensions/data/type_variables.dart
+++ b/pkg/front_end/test/extensions/data/type_variables.dart
@@ -8,7 +8,9 @@
   A2,
   A3,
   A4,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 class A1<T> {}
 
diff --git a/pkg/front_end/test/extensions/data/unnamed_declarations.dart b/pkg/front_end/test/extensions/data/unnamed_declarations.dart
index ffa10b4..df8a014 100644
--- a/pkg/front_end/test/extensions/data/unnamed_declarations.dart
+++ b/pkg/front_end/test/extensions/data/unnamed_declarations.dart
@@ -10,7 +10,9 @@
   _extension#2,
   _extension#3,
   _extension#4,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 class A1 {}
 
diff --git a/pkg/front_end/test/extensions/data/use_as_type.dart b/pkg/front_end/test/extensions/data/use_as_type.dart
index c52ad6a..fd5e3dd 100644
--- a/pkg/front_end/test/extensions/data/use_as_type.dart
+++ b/pkg/front_end/test/extensions/data/use_as_type.dart
@@ -7,7 +7,9 @@
 /*library: scope=[
   A2,
   B2,
-  async.dart.FutureExtensions]*/
+  async.dart.FutureExtensions,
+  core.dart.EnumByName,
+  core.dart.EnumName]*/
 
 class A1 {}
 
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.expect
index d4fc22a..740f2d9 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.expect
@@ -46,7 +46,7 @@
   const constructor •() → self::F<self::F::T%, self::F::U%, self::F::V%>
     : super core::Object::•()
     ;
-  method fn(generic-covariant-impl self::F::U% x) → self::F::U%
+  method fn(covariant-by-class self::F::U% x) → self::F::U%
     return x;
 }
 class G<T extends core::Object? = dynamic> extends self::F<self::G::T%, core::String, core::num> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.transformed.expect
index d4fc22a..740f2d9 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.strong.transformed.expect
@@ -46,7 +46,7 @@
   const constructor •() → self::F<self::F::T%, self::F::U%, self::F::V%>
     : super core::Object::•()
     ;
-  method fn(generic-covariant-impl self::F::U% x) → self::F::U%
+  method fn(covariant-by-class self::F::U% x) → self::F::U%
     return x;
 }
 class G<T extends core::Object? = dynamic> extends self::F<self::G::T%, core::String, core::num> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.expect
index 896a334..d74febc 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.expect
@@ -46,7 +46,7 @@
   const constructor •() → self::F<self::F::T%, self::F::U%, self::F::V%>
     : super core::Object::•()
     ;
-  method fn(generic-covariant-impl self::F::U% x) → self::F::U%
+  method fn(covariant-by-class self::F::U% x) → self::F::U%
     return x;
 }
 class G<T extends core::Object? = dynamic> extends self::F<self::G::T%, core::String, core::num> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.outline.expect
index 4443d89..2492af1 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.outline.expect
@@ -42,7 +42,7 @@
   const constructor •() → self::F<self::F::T%, self::F::U%, self::F::V%>
     : super core::Object::•()
     ;
-  method fn(generic-covariant-impl self::F::U% x) → self::F::U%
+  method fn(covariant-by-class self::F::U% x) → self::F::U%
     ;
 }
 class G<T extends core::Object? = dynamic> extends self::F<self::G::T%, core::String, core::num> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.transformed.expect
index 896a334..d74febc 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_instance_methods.dart.weak.transformed.expect
@@ -46,7 +46,7 @@
   const constructor •() → self::F<self::F::T%, self::F::U%, self::F::V%>
     : super core::Object::•()
     ;
-  method fn(generic-covariant-impl self::F::U% x) → self::F::U%
+  method fn(covariant-by-class self::F::U% x) → self::F::U%
     return x;
 }
 class G<T extends core::Object? = dynamic> extends self::F<self::G::T%, core::String, core::num> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.expect
index d952a09..254bc55 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.expect
@@ -19,7 +19,7 @@
 }
 class B<T extends core::Object? = dynamic> extends core::Object implements self::A {
   field core::int field1;
-  generic-covariant-impl field self::B::T% field2;
+  covariant-by-class field self::B::T% field2;
   constructor •(core::int field1, self::B::T% field2) → self::B<self::B::T%>
     : self::B::field1 = field1, self::B::field2 = field2, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.transformed.expect
index d952a09..254bc55 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
 }
 class B<T extends core::Object? = dynamic> extends core::Object implements self::A {
   field core::int field1;
-  generic-covariant-impl field self::B::T% field2;
+  covariant-by-class field self::B::T% field2;
   constructor •(core::int field1, self::B::T% field2) → self::B<self::B::T%>
     : self::B::field1 = field1, self::B::field2 = field2, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.expect
index 9294ac3..b80b9d5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.expect
@@ -19,7 +19,7 @@
 }
 class B<T extends core::Object? = dynamic> extends core::Object implements self::A {
   field core::int field1;
-  generic-covariant-impl field self::B::T% field2;
+  covariant-by-class field self::B::T% field2;
   constructor •(core::int field1, self::B::T% field2) → self::B<self::B::T%>
     : self::B::field1 = field1, self::B::field2 = field2, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.outline.expect
index c32ee60..1277311 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.outline.expect
@@ -17,7 +17,7 @@
 }
 class B<T extends core::Object? = dynamic> extends core::Object implements self::A {
   field core::int field1;
-  generic-covariant-impl field self::B::T% field2;
+  covariant-by-class field self::B::T% field2;
   constructor •(core::int field1, self::B::T% field2) → self::B<self::B::T%>
     ;
   constructor named(core::int field1, self::B::T% field2) → self::B<self::B::T%>
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.transformed.expect
index 9294ac3..b80b9d5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/inferred_tear_off.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
 }
 class B<T extends core::Object? = dynamic> extends core::Object implements self::A {
   field core::int field1;
-  generic-covariant-impl field self::B::T% field2;
+  covariant-by-class field self::B::T% field2;
   constructor •(core::int field1, self::B::T% field2) → self::B<self::B::T%>
     : self::B::field1 = field1, self::B::field2 = field2, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.strong.expect b/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.strong.expect
index 7cafb3b..b0d37be 100644
--- a/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.strong.expect
@@ -1,23 +1,4 @@
 library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:59:11: Error: Setter not found: 'a'.
-//   Statics.a = 42;
-//           ^
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:65:11: Error: Setter not found: 'b'.
-//   Statics.b = 42;
-//           ^
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:81:7: Error: Setter not found: 'a'.
-//   lib.a = 42;
-//       ^
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:87:7: Error: Setter not found: 'b'.
-//   lib.b = 42;
-//       ^
-//
 import self as self;
 import "main_lib1.dart" as mai;
 import "dart:core" as core;
@@ -69,16 +50,12 @@
 }
 static method testUninitializedNonFinalStaticField() → void {
   core::print(mai::Statics::a);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:59:11: Error: Setter not found: 'a'.
-  Statics.a = 42;
-          ^";
+  mai::Statics::a = 42;
   core::print(mai::Statics::a);
 }
 static method testUninitializedFinalStaticField() → void {
   core::print(mai::Statics::b);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:65:11: Error: Setter not found: 'b'.
-  Statics.b = 42;
-          ^";
+  mai::Statics::b = 42;
   core::print(mai::Statics::b);
 }
 static method testInitializedNonFinalStaticField() → void {
@@ -91,16 +68,12 @@
 }
 static method testUninitializedNonFinalTopLevelField() → void {
   core::print(mai2::a);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:81:7: Error: Setter not found: 'a'.
-  lib.a = 42;
-      ^";
+  mai2::a = 42;
   core::print(mai2::a);
 }
 static method testUninitializedFinalTopLevelField() → void {
   core::print(mai2::b);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:87:7: Error: Setter not found: 'b'.
-  lib.b = 42;
-      ^";
+  mai2::b = 42;
   core::print(mai2::b);
 }
 static method testInitializedNonFinalTopLevelField() → void {
@@ -157,8 +130,8 @@
   }
 }
 class Statics extends core::Object {
-  static final field _la::_Cell a = new _la::_Cell::named("a");
-  static final field _la::_Cell b = new _la::_Cell::named("b");
+  static final field _la::_Cell _#a = new _la::_Cell::named("a");
+  static final field _la::_Cell _#b = new _la::_Cell::named("b");
   late static field core::int c = 1.{core::int::unary-}(){() → core::int};
   late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
   synthetic constructor •() → mai::Statics
@@ -166,6 +139,14 @@
     ;
   static method _#new#tearOff() → mai::Statics
     return new mai::Statics::•();
+  static get a() → core::int
+    return mai::Statics::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set a(core::int value) → void
+    return mai::Statics::_#a.{_la::_Cell::value} = value;
+  static get b() → core::int
+    return mai::Statics::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set b(core::int value) → void
+    return mai::Statics::_#b.{_la::_Cell::finalFieldValue} = value;
 }
 static method testNullableUninitializedNonFinalLocal() → void {
   final _la::_Cell x = new _la::_Cell::named("x");
@@ -216,10 +197,18 @@
 
 library /*isNonNullableByDefault*/;
 import self as mai2;
-import "dart:_late_helper" as _la;
 import "dart:core" as core;
+import "dart:_late_helper" as _la;
 
-static final field _la::_Cell a = new _la::_Cell::named("a");
-static final field _la::_Cell b = new _la::_Cell::named("b");
+static final field _la::_Cell _#a = new _la::_Cell::named("a");
+static final field _la::_Cell _#b = new _la::_Cell::named("b");
 late static field core::int c = 1.{core::int::unary-}(){() → core::int};
 late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
+static get a() → core::int
+  return mai2::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set a(core::int value) → void
+  return mai2::_#a.{_la::_Cell::value} = value;
+static get b() → core::int
+  return mai2::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set b(core::int value) → void
+  return mai2::_#b.{_la::_Cell::finalFieldValue} = value;
diff --git a/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.strong.transformed.expect
index 62953b9..e24d5f5 100644
--- a/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.strong.transformed.expect
@@ -1,23 +1,4 @@
 library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:59:11: Error: Setter not found: 'a'.
-//   Statics.a = 42;
-//           ^
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:65:11: Error: Setter not found: 'b'.
-//   Statics.b = 42;
-//           ^
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:81:7: Error: Setter not found: 'a'.
-//   lib.a = 42;
-//       ^
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:87:7: Error: Setter not found: 'b'.
-//   lib.b = 42;
-//       ^
-//
 import self as self;
 import "main_lib1.dart" as mai;
 import "dart:core" as core;
@@ -69,16 +50,12 @@
 }
 static method testUninitializedNonFinalStaticField() → void {
   core::print(mai::Statics::a);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:59:11: Error: Setter not found: 'a'.
-  Statics.a = 42;
-          ^";
+  mai::Statics::a = 42;
   core::print(mai::Statics::a);
 }
 static method testUninitializedFinalStaticField() → void {
   core::print(mai::Statics::b);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:65:11: Error: Setter not found: 'b'.
-  Statics.b = 42;
-          ^";
+  mai::Statics::b = 42;
   core::print(mai::Statics::b);
 }
 static method testInitializedNonFinalStaticField() → void {
@@ -91,16 +68,12 @@
 }
 static method testUninitializedNonFinalTopLevelField() → void {
   core::print(mai2::a);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:81:7: Error: Setter not found: 'a'.
-  lib.a = 42;
-      ^";
+  mai2::a = 42;
   core::print(mai2::a);
 }
 static method testUninitializedFinalTopLevelField() → void {
   core::print(mai2::b);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:87:7: Error: Setter not found: 'b'.
-  lib.b = 42;
-      ^";
+  mai2::b = 42;
   core::print(mai2::b);
 }
 static method testInitializedNonFinalTopLevelField() → void {
@@ -157,8 +130,8 @@
   }
 }
 class Statics extends core::Object {
-  static final field _la::_Cell a = new _la::_Cell::named("a");
-  static final field _la::_Cell b = new _la::_Cell::named("b");
+  static final field _la::_Cell _#a = new _la::_Cell::named("a");
+  static final field _la::_Cell _#b = new _la::_Cell::named("b");
   late static field core::int c = 1.{core::int::unary-}(){() → core::int};
   late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
   synthetic constructor •() → mai::Statics
@@ -166,6 +139,14 @@
     ;
   static method _#new#tearOff() → mai::Statics
     return new mai::Statics::•();
+  static get a() → core::int
+    return mai::Statics::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set a(core::int value) → void
+    return mai::Statics::_#a.{_la::_Cell::value} = value;
+  static get b() → core::int
+    return mai::Statics::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set b(core::int value) → void
+    return mai::Statics::_#b.{_la::_Cell::finalFieldValue} = value;
 }
 static method testNullableUninitializedNonFinalLocal() → void {
   final _la::_Cell x = new _la::_Cell::named("x");
@@ -216,13 +197,21 @@
 
 library /*isNonNullableByDefault*/;
 import self as mai2;
-import "dart:_late_helper" as _la;
 import "dart:core" as core;
+import "dart:_late_helper" as _la;
 
-static final field _la::_Cell a = new _la::_Cell::named("a");
-static final field _la::_Cell b = new _la::_Cell::named("b");
+static final field _la::_Cell _#a = new _la::_Cell::named("a");
+static final field _la::_Cell _#b = new _la::_Cell::named("b");
 late static field core::int c = 1.{core::int::unary-}(){() → core::int};
 late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
+static get a() → core::int
+  return mai2::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set a(core::int value) → void
+  return mai2::_#a.{_la::_Cell::value} = value;
+static get b() → core::int
+  return mai2::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set b(core::int value) → void
+  return mai2::_#b.{_la::_Cell::finalFieldValue} = value;
 
 
 Extra constant evaluation status:
@@ -236,4 +225,4 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///main_lib1.dart:71:22 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///main_lib2.dart:7:14 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///main_lib2.dart:8:20 -> DoubleConstant(-1.0)
-Extra constant evaluation: evaluated: 205, effectively constant: 10
+Extra constant evaluation: evaluated: 229, effectively constant: 10
diff --git a/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.expect b/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.expect
index 7cafb3b..b0d37be 100644
--- a/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.expect
@@ -1,23 +1,4 @@
 library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:59:11: Error: Setter not found: 'a'.
-//   Statics.a = 42;
-//           ^
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:65:11: Error: Setter not found: 'b'.
-//   Statics.b = 42;
-//           ^
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:81:7: Error: Setter not found: 'a'.
-//   lib.a = 42;
-//       ^
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:87:7: Error: Setter not found: 'b'.
-//   lib.b = 42;
-//       ^
-//
 import self as self;
 import "main_lib1.dart" as mai;
 import "dart:core" as core;
@@ -69,16 +50,12 @@
 }
 static method testUninitializedNonFinalStaticField() → void {
   core::print(mai::Statics::a);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:59:11: Error: Setter not found: 'a'.
-  Statics.a = 42;
-          ^";
+  mai::Statics::a = 42;
   core::print(mai::Statics::a);
 }
 static method testUninitializedFinalStaticField() → void {
   core::print(mai::Statics::b);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:65:11: Error: Setter not found: 'b'.
-  Statics.b = 42;
-          ^";
+  mai::Statics::b = 42;
   core::print(mai::Statics::b);
 }
 static method testInitializedNonFinalStaticField() → void {
@@ -91,16 +68,12 @@
 }
 static method testUninitializedNonFinalTopLevelField() → void {
   core::print(mai2::a);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:81:7: Error: Setter not found: 'a'.
-  lib.a = 42;
-      ^";
+  mai2::a = 42;
   core::print(mai2::a);
 }
 static method testUninitializedFinalTopLevelField() → void {
   core::print(mai2::b);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:87:7: Error: Setter not found: 'b'.
-  lib.b = 42;
-      ^";
+  mai2::b = 42;
   core::print(mai2::b);
 }
 static method testInitializedNonFinalTopLevelField() → void {
@@ -157,8 +130,8 @@
   }
 }
 class Statics extends core::Object {
-  static final field _la::_Cell a = new _la::_Cell::named("a");
-  static final field _la::_Cell b = new _la::_Cell::named("b");
+  static final field _la::_Cell _#a = new _la::_Cell::named("a");
+  static final field _la::_Cell _#b = new _la::_Cell::named("b");
   late static field core::int c = 1.{core::int::unary-}(){() → core::int};
   late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
   synthetic constructor •() → mai::Statics
@@ -166,6 +139,14 @@
     ;
   static method _#new#tearOff() → mai::Statics
     return new mai::Statics::•();
+  static get a() → core::int
+    return mai::Statics::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set a(core::int value) → void
+    return mai::Statics::_#a.{_la::_Cell::value} = value;
+  static get b() → core::int
+    return mai::Statics::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set b(core::int value) → void
+    return mai::Statics::_#b.{_la::_Cell::finalFieldValue} = value;
 }
 static method testNullableUninitializedNonFinalLocal() → void {
   final _la::_Cell x = new _la::_Cell::named("x");
@@ -216,10 +197,18 @@
 
 library /*isNonNullableByDefault*/;
 import self as mai2;
-import "dart:_late_helper" as _la;
 import "dart:core" as core;
+import "dart:_late_helper" as _la;
 
-static final field _la::_Cell a = new _la::_Cell::named("a");
-static final field _la::_Cell b = new _la::_Cell::named("b");
+static final field _la::_Cell _#a = new _la::_Cell::named("a");
+static final field _la::_Cell _#b = new _la::_Cell::named("b");
 late static field core::int c = 1.{core::int::unary-}(){() → core::int};
 late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
+static get a() → core::int
+  return mai2::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set a(core::int value) → void
+  return mai2::_#a.{_la::_Cell::value} = value;
+static get b() → core::int
+  return mai2::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set b(core::int value) → void
+  return mai2::_#b.{_la::_Cell::finalFieldValue} = value;
diff --git a/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.outline.expect
index b904ea6..7917e7d 100644
--- a/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.outline.expect
@@ -70,14 +70,30 @@
   }
 }
 class Statics extends core::Object {
-  static final field _la::_Cell a = new _la::_Cell::named("a");
-  static final field _la::_Cell b = new _la::_Cell::named("b");
-  static final field _la::_Cell c = new _la::_Cell::named("c");
-  static final field _la::_Cell d = new _la::_Cell::named("d");
+  static final field _la::_Cell _#a = new _la::_Cell::named("a");
+  static final field _la::_Cell _#b = new _la::_Cell::named("b");
+  static final field _la::_Cell _#c = new _la::_Cell::named("c");
+  static final field _la::_Cell _#d = new _la::_Cell::named("d");
   synthetic constructor •() → mai::Statics
     ;
   static method _#new#tearOff() → mai::Statics
     return new mai::Statics::•();
+  static get a() → core::int
+    return mai::Statics::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set a(core::int value) → void
+    return mai::Statics::_#a.{_la::_Cell::value} = value;
+  static get b() → core::int
+    return mai::Statics::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set b(core::int value) → void
+    return mai::Statics::_#b.{_la::_Cell::finalFieldValue} = value;
+  static get c() → core::int
+    return mai::Statics::_#c.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set c(core::int value) → void
+    return mai::Statics::_#c.{_la::_Cell::value} = value;
+  static get d() → core::int
+    return mai::Statics::_#d.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set d(core::int value) → void
+    return mai::Statics::_#d.{_la::_Cell::finalFieldValue} = value;
 }
 static method testNullableUninitializedNonFinalLocal() → void
   ;
@@ -98,9 +114,26 @@
 
 library /*isNonNullableByDefault*/;
 import self as self2;
+import "dart:core" as core;
 import "dart:_late_helper" as _la;
 
-static final field _la::_Cell a = new _la::_Cell::named("a");
-static final field _la::_Cell b = new _la::_Cell::named("b");
-static final field _la::_Cell c = new _la::_Cell::named("c");
-static final field _la::_Cell d = new _la::_Cell::named("d");
+static final field _la::_Cell _#a = new _la::_Cell::named("a");
+static final field _la::_Cell _#b = new _la::_Cell::named("b");
+static final field _la::_Cell _#c = new _la::_Cell::named("c");
+static final field _la::_Cell _#d = new _la::_Cell::named("d");
+static get a() → core::int
+  return self2::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set a(core::int value) → void
+  return self2::_#a.{_la::_Cell::value} = value;
+static get b() → core::int
+  return self2::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set b(core::int value) → void
+  return self2::_#b.{_la::_Cell::finalFieldValue} = value;
+static get c() → core::int
+  return self2::_#c.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set c(core::int value) → void
+  return self2::_#c.{_la::_Cell::value} = value;
+static get d() → core::int
+  return self2::_#d.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set d(core::int value) → void
+  return self2::_#d.{_la::_Cell::finalFieldValue} = value;
diff --git a/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.transformed.expect
index 62953b9..e24d5f5 100644
--- a/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/late_from_dill/main.dart.weak.transformed.expect
@@ -1,23 +1,4 @@
 library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:59:11: Error: Setter not found: 'a'.
-//   Statics.a = 42;
-//           ^
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:65:11: Error: Setter not found: 'b'.
-//   Statics.b = 42;
-//           ^
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:81:7: Error: Setter not found: 'a'.
-//   lib.a = 42;
-//       ^
-//
-// pkg/front_end/testcases/dart2js/late_from_dill/main.dart:87:7: Error: Setter not found: 'b'.
-//   lib.b = 42;
-//       ^
-//
 import self as self;
 import "main_lib1.dart" as mai;
 import "dart:core" as core;
@@ -69,16 +50,12 @@
 }
 static method testUninitializedNonFinalStaticField() → void {
   core::print(mai::Statics::a);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:59:11: Error: Setter not found: 'a'.
-  Statics.a = 42;
-          ^";
+  mai::Statics::a = 42;
   core::print(mai::Statics::a);
 }
 static method testUninitializedFinalStaticField() → void {
   core::print(mai::Statics::b);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:65:11: Error: Setter not found: 'b'.
-  Statics.b = 42;
-          ^";
+  mai::Statics::b = 42;
   core::print(mai::Statics::b);
 }
 static method testInitializedNonFinalStaticField() → void {
@@ -91,16 +68,12 @@
 }
 static method testUninitializedNonFinalTopLevelField() → void {
   core::print(mai2::a);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:81:7: Error: Setter not found: 'a'.
-  lib.a = 42;
-      ^";
+  mai2::a = 42;
   core::print(mai2::a);
 }
 static method testUninitializedFinalTopLevelField() → void {
   core::print(mai2::b);
-  invalid-expression "pkg/front_end/testcases/dart2js/late_from_dill/main.dart:87:7: Error: Setter not found: 'b'.
-  lib.b = 42;
-      ^";
+  mai2::b = 42;
   core::print(mai2::b);
 }
 static method testInitializedNonFinalTopLevelField() → void {
@@ -157,8 +130,8 @@
   }
 }
 class Statics extends core::Object {
-  static final field _la::_Cell a = new _la::_Cell::named("a");
-  static final field _la::_Cell b = new _la::_Cell::named("b");
+  static final field _la::_Cell _#a = new _la::_Cell::named("a");
+  static final field _la::_Cell _#b = new _la::_Cell::named("b");
   late static field core::int c = 1.{core::int::unary-}(){() → core::int};
   late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
   synthetic constructor •() → mai::Statics
@@ -166,6 +139,14 @@
     ;
   static method _#new#tearOff() → mai::Statics
     return new mai::Statics::•();
+  static get a() → core::int
+    return mai::Statics::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set a(core::int value) → void
+    return mai::Statics::_#a.{_la::_Cell::value} = value;
+  static get b() → core::int
+    return mai::Statics::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set b(core::int value) → void
+    return mai::Statics::_#b.{_la::_Cell::finalFieldValue} = value;
 }
 static method testNullableUninitializedNonFinalLocal() → void {
   final _la::_Cell x = new _la::_Cell::named("x");
@@ -216,13 +197,21 @@
 
 library /*isNonNullableByDefault*/;
 import self as mai2;
-import "dart:_late_helper" as _la;
 import "dart:core" as core;
+import "dart:_late_helper" as _la;
 
-static final field _la::_Cell a = new _la::_Cell::named("a");
-static final field _la::_Cell b = new _la::_Cell::named("b");
+static final field _la::_Cell _#a = new _la::_Cell::named("a");
+static final field _la::_Cell _#b = new _la::_Cell::named("b");
 late static field core::int c = 1.{core::int::unary-}(){() → core::int};
 late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
+static get a() → core::int
+  return mai2::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set a(core::int value) → void
+  return mai2::_#a.{_la::_Cell::value} = value;
+static get b() → core::int
+  return mai2::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set b(core::int value) → void
+  return mai2::_#b.{_la::_Cell::finalFieldValue} = value;
 
 
 Extra constant evaluation status:
@@ -236,4 +225,4 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///main_lib1.dart:71:22 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///main_lib2.dart:7:14 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///main_lib2.dart:8:20 -> DoubleConstant(-1.0)
-Extra constant evaluation: evaluated: 205, effectively constant: 10
+Extra constant evaluation: evaluated: 229, effectively constant: 10
diff --git a/pkg/front_end/testcases/dart2js/late_statics.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/late_statics.dart.strong.transformed.expect
index 209cdb6..d8893fe 100644
--- a/pkg/front_end/testcases/dart2js/late_statics.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/late_statics.dart.strong.transformed.expect
@@ -3,18 +3,20 @@
 import "dart:core" as core;
 import "dart:_late_helper" as _la;
 import "late_statics_lib.dart" as lat;
-additionalExports = (lat::c,
-  lat::c,
-  lat::d,
+additionalExports = (lat::a,
   lat::a,
-  lat::b)
+  lat::b,
+  lat::b,
+  lat::c,
+  lat::c,
+  lat::d)
 
 import "org-dartlang-testcase:///late_statics_lib.dart" as lib;
 export "org-dartlang-testcase:///late_statics_lib.dart";
 
 class Statics extends core::Object {
-  static final field _la::_Cell a = new _la::_Cell::named("a");
-  static final field _la::_Cell b = new _la::_Cell::named("b");
+  static final field _la::_Cell _#a = new _la::_Cell::named("a");
+  static final field _la::_Cell _#b = new _la::_Cell::named("b");
   late static field core::int c = 1.{core::int::unary-}(){() → core::int};
   late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
   synthetic constructor •() → self::Statics
@@ -22,6 +24,14 @@
     ;
   static method _#new#tearOff() → self::Statics
     return new self::Statics::•();
+  static get a() → core::int
+    return self::Statics::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set a(core::int value) → void
+    return self::Statics::_#a.{_la::_Cell::value} = value;
+  static get b() → core::int
+    return self::Statics::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set b(core::int value) → void
+    return self::Statics::_#b.{_la::_Cell::finalFieldValue} = value;
 }
 static method main() → void {
   self::testUninitializedNonFinalStaticField();
@@ -34,14 +44,14 @@
   self::testInitializedFinalTopLevelField();
 }
 static method testUninitializedNonFinalStaticField() → void {
-  core::print(self::Statics::a.{_la::_Cell::readField}<core::int>(){() → core::int});
-  self::Statics::a.{_la::_Cell::value} = 42;
-  core::print(self::Statics::a.{_la::_Cell::readField}<core::int>(){() → core::int});
+  core::print(self::Statics::a);
+  self::Statics::a = 42;
+  core::print(self::Statics::a);
 }
 static method testUninitializedFinalStaticField() → void {
-  core::print(self::Statics::b.{_la::_Cell::readField}<core::int>(){() → core::int});
-  self::Statics::b.{_la::_Cell::finalFieldValue} = 42;
-  core::print(self::Statics::b.{_la::_Cell::readField}<core::int>(){() → core::int});
+  core::print(self::Statics::b);
+  self::Statics::b = 42;
+  core::print(self::Statics::b);
 }
 static method testInitializedNonFinalStaticField() → void {
   core::print(self::Statics::c);
@@ -52,14 +62,14 @@
   core::print(self::Statics::d);
 }
 static method testUninitializedNonFinalTopLevelField() → void {
-  core::print(lat::a.{_la::_Cell::readField}<core::int>(){() → core::int});
-  lat::a.{_la::_Cell::value} = 42;
-  core::print(lat::a.{_la::_Cell::readField}<core::int>(){() → core::int});
+  core::print(lat::a);
+  lat::a = 42;
+  core::print(lat::a);
 }
 static method testUninitializedFinalTopLevelField() → void {
-  core::print(lat::b.{_la::_Cell::readField}<core::int>(){() → core::int});
-  lat::b.{_la::_Cell::finalFieldValue} = 42;
-  core::print(lat::b.{_la::_Cell::readField}<core::int>(){() → core::int});
+  core::print(lat::b);
+  lat::b = 42;
+  core::print(lat::b);
 }
 static method testInitializedNonFinalTopLevelField() → void {
   core::print(lat::c);
@@ -72,13 +82,21 @@
 
 library /*isNonNullableByDefault*/;
 import self as lat;
-import "dart:_late_helper" as _la;
 import "dart:core" as core;
+import "dart:_late_helper" as _la;
 
-static final field _la::_Cell a = new _la::_Cell::named("a");
-static final field _la::_Cell b = new _la::_Cell::named("b");
+static final field _la::_Cell _#a = new _la::_Cell::named("a");
+static final field _la::_Cell _#b = new _la::_Cell::named("b");
 late static field core::int c = 1.{core::int::unary-}(){() → core::int};
 late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
+static get a() → core::int
+  return lat::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set a(core::int value) → void
+  return lat::_#a.{_la::_Cell::value} = value;
+static get b() → core::int
+  return lat::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set b(core::int value) → void
+  return lat::_#b.{_la::_Cell::finalFieldValue} = value;
 
 
 Extra constant evaluation status:
@@ -86,4 +104,4 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics.dart:23:29 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics_lib.dart:7:14 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics_lib.dart:8:20 -> DoubleConstant(-1.0)
-Extra constant evaluation: evaluated: 63, effectively constant: 4
+Extra constant evaluation: evaluated: 71, effectively constant: 4
diff --git a/pkg/front_end/testcases/dart2js/late_statics.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/late_statics.dart.weak.transformed.expect
index 209cdb6..d8893fe 100644
--- a/pkg/front_end/testcases/dart2js/late_statics.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/late_statics.dart.weak.transformed.expect
@@ -3,18 +3,20 @@
 import "dart:core" as core;
 import "dart:_late_helper" as _la;
 import "late_statics_lib.dart" as lat;
-additionalExports = (lat::c,
-  lat::c,
-  lat::d,
+additionalExports = (lat::a,
   lat::a,
-  lat::b)
+  lat::b,
+  lat::b,
+  lat::c,
+  lat::c,
+  lat::d)
 
 import "org-dartlang-testcase:///late_statics_lib.dart" as lib;
 export "org-dartlang-testcase:///late_statics_lib.dart";
 
 class Statics extends core::Object {
-  static final field _la::_Cell a = new _la::_Cell::named("a");
-  static final field _la::_Cell b = new _la::_Cell::named("b");
+  static final field _la::_Cell _#a = new _la::_Cell::named("a");
+  static final field _la::_Cell _#b = new _la::_Cell::named("b");
   late static field core::int c = 1.{core::int::unary-}(){() → core::int};
   late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
   synthetic constructor •() → self::Statics
@@ -22,6 +24,14 @@
     ;
   static method _#new#tearOff() → self::Statics
     return new self::Statics::•();
+  static get a() → core::int
+    return self::Statics::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set a(core::int value) → void
+    return self::Statics::_#a.{_la::_Cell::value} = value;
+  static get b() → core::int
+    return self::Statics::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+  static set b(core::int value) → void
+    return self::Statics::_#b.{_la::_Cell::finalFieldValue} = value;
 }
 static method main() → void {
   self::testUninitializedNonFinalStaticField();
@@ -34,14 +44,14 @@
   self::testInitializedFinalTopLevelField();
 }
 static method testUninitializedNonFinalStaticField() → void {
-  core::print(self::Statics::a.{_la::_Cell::readField}<core::int>(){() → core::int});
-  self::Statics::a.{_la::_Cell::value} = 42;
-  core::print(self::Statics::a.{_la::_Cell::readField}<core::int>(){() → core::int});
+  core::print(self::Statics::a);
+  self::Statics::a = 42;
+  core::print(self::Statics::a);
 }
 static method testUninitializedFinalStaticField() → void {
-  core::print(self::Statics::b.{_la::_Cell::readField}<core::int>(){() → core::int});
-  self::Statics::b.{_la::_Cell::finalFieldValue} = 42;
-  core::print(self::Statics::b.{_la::_Cell::readField}<core::int>(){() → core::int});
+  core::print(self::Statics::b);
+  self::Statics::b = 42;
+  core::print(self::Statics::b);
 }
 static method testInitializedNonFinalStaticField() → void {
   core::print(self::Statics::c);
@@ -52,14 +62,14 @@
   core::print(self::Statics::d);
 }
 static method testUninitializedNonFinalTopLevelField() → void {
-  core::print(lat::a.{_la::_Cell::readField}<core::int>(){() → core::int});
-  lat::a.{_la::_Cell::value} = 42;
-  core::print(lat::a.{_la::_Cell::readField}<core::int>(){() → core::int});
+  core::print(lat::a);
+  lat::a = 42;
+  core::print(lat::a);
 }
 static method testUninitializedFinalTopLevelField() → void {
-  core::print(lat::b.{_la::_Cell::readField}<core::int>(){() → core::int});
-  lat::b.{_la::_Cell::finalFieldValue} = 42;
-  core::print(lat::b.{_la::_Cell::readField}<core::int>(){() → core::int});
+  core::print(lat::b);
+  lat::b = 42;
+  core::print(lat::b);
 }
 static method testInitializedNonFinalTopLevelField() → void {
   core::print(lat::c);
@@ -72,13 +82,21 @@
 
 library /*isNonNullableByDefault*/;
 import self as lat;
-import "dart:_late_helper" as _la;
 import "dart:core" as core;
+import "dart:_late_helper" as _la;
 
-static final field _la::_Cell a = new _la::_Cell::named("a");
-static final field _la::_Cell b = new _la::_Cell::named("b");
+static final field _la::_Cell _#a = new _la::_Cell::named("a");
+static final field _la::_Cell _#b = new _la::_Cell::named("b");
 late static field core::int c = 1.{core::int::unary-}(){() → core::int};
 late static final field core::int d = 1.{core::int::unary-}(){() → core::int};
+static get a() → core::int
+  return lat::_#a.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set a(core::int value) → void
+  return lat::_#a.{_la::_Cell::value} = value;
+static get b() → core::int
+  return lat::_#b.{_la::_Cell::readField}<core::int>(){() → core::int};
+static set b(core::int value) → void
+  return lat::_#b.{_la::_Cell::finalFieldValue} = value;
 
 
 Extra constant evaluation status:
@@ -86,4 +104,4 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics.dart:23:29 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics_lib.dart:7:14 -> DoubleConstant(-1.0)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///late_statics_lib.dart:8:20 -> DoubleConstant(-1.0)
-Extra constant evaluation: evaluated: 63, effectively constant: 4
+Extra constant evaluation: evaluated: 71, effectively constant: 4
diff --git a/pkg/front_end/testcases/dartdevc/private_covariant.dart.strong.expect b/pkg/front_end/testcases/dartdevc/private_covariant.dart.strong.expect
index d99381b..aaaca01 100644
--- a/pkg/front_end/testcases/dartdevc/private_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/dartdevc/private_covariant.dart.strong.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  method _privateMethod(covariant core::int i) → dynamic {}
+  method _privateMethod(covariant-by-declaration core::int i) → dynamic {}
   static method _#new#tearOff() → self::Class
     return new self::Class::•();
 }
diff --git a/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.expect b/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.expect
index d99381b..aaaca01 100644
--- a/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  method _privateMethod(covariant core::int i) → dynamic {}
+  method _privateMethod(covariant-by-declaration core::int i) → dynamic {}
   static method _#new#tearOff() → self::Class
     return new self::Class::•();
 }
diff --git a/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.outline.expect
index 7c99f9e..e4ccf60 100644
--- a/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/dartdevc/private_covariant.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class Class extends core::Object {
   synthetic constructor •() → self::Class
     ;
-  method _privateMethod(covariant core::int i) → dynamic
+  method _privateMethod(covariant-by-declaration core::int i) → dynamic
     ;
   static method _#new#tearOff() → self::Class
     return new self::Class::•();
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.expect
index 9db4ca6..d892e0f 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.expect
@@ -19,7 +19,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::GenericClass::T* field = null;
+  covariant-by-class field self::GenericClass::T* field = null;
   synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.outline.expect
index 55a6232..c697396 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.outline.expect
@@ -18,7 +18,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::GenericClass::T* field;
+  covariant-by-class field self::GenericClass::T* field;
   synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.transformed.expect
index 9db4ca6..d892e0f 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::GenericClass::T* field = null;
+  covariant-by-class field self::GenericClass::T* field = null;
   synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.expect
index 6e15fda..ad69a00 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 class Class<T extends core::num*> extends core::Object {
-  generic-covariant-impl field self::Class::T* field1;
-  generic-covariant-impl field self::Class::T* field2;
+  covariant-by-class field self::Class::T* field1;
+  covariant-by-class field self::Class::T* field2;
   constructor •(self::Class::T* field1, self::Class::T* field2) → self::Class<self::Class::T*>*
     : self::Class::field1 = field1, self::Class::field2 = field2, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.outline.expect
index 54e9504..322d3b1 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.outline.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 class Class<T extends core::num*> extends core::Object {
-  generic-covariant-impl field self::Class::T* field1;
-  generic-covariant-impl field self::Class::T* field2;
+  covariant-by-class field self::Class::T* field1;
+  covariant-by-class field self::Class::T* field2;
   constructor •(self::Class::T* field1, self::Class::T* field2) → self::Class<self::Class::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.transformed.expect
index a8c297a..225240c 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.transformed.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 class Class<T extends core::num*> extends core::Object {
-  generic-covariant-impl field self::Class::T* field1;
-  generic-covariant-impl field self::Class::T* field2;
+  covariant-by-class field self::Class::T* field1;
+  covariant-by-class field self::Class::T* field2;
   constructor •(self::Class::T* field1, self::Class::T* field2) → self::Class<self::Class::T*>*
     : self::Class::field1 = field1, self::Class::field2 = field2, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_call.dart.weak.expect
index c6d89be..13106a6 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Class<self::Class::T*>*
     : super core::Object::•()
     ;
-  method method(generic-covariant-impl self::Class::T* a) → self::Class::T*
+  method method(covariant-by-class self::Class::T* a) → self::Class::T*
     return a;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/extension_call.dart.weak.outline.expect
index bb8bde3..b4a47b5 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class Class<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::Class<self::Class::T*>*
     ;
-  method method(generic-covariant-impl self::Class::T* a) → self::Class::T*
+  method method(covariant-by-class self::Class::T* a) → self::Class::T*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_call.dart.weak.transformed.expect
index c6d89be..13106a6 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Class<self::Class::T*>*
     : super core::Object::•()
     ;
-  method method(generic-covariant-impl self::Class::T* a) → self::Class::T*
+  method method(covariant-by-class self::Class::T* a) → self::Class::T*
     return a;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/extensions/index.dart.weak.expect b/pkg/front_end/testcases/extensions/index.dart.weak.expect
index d141d5b..e91fc4b 100644
--- a/pkg/front_end/testcases/extensions/index.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/index.dart.weak.expect
@@ -9,7 +9,7 @@
     ;
   method get(core::Object* key) → self::MapLike::V*
     return this.{self::MapLike::_map}{core::Map<self::MapLike::K*, self::MapLike::V*>*}.{core::Map::[]}(key){(core::Object*) →* self::MapLike::V*};
-  method put(generic-covariant-impl self::MapLike::K* key, generic-covariant-impl self::MapLike::V* value) → self::MapLike::V*
+  method put(covariant-by-class self::MapLike::K* key, covariant-by-class self::MapLike::V* value) → self::MapLike::V*
     return let final core::Map<self::MapLike::K*, self::MapLike::V*>* #t1 = this.{self::MapLike::_map}{core::Map<self::MapLike::K*, self::MapLike::V*>*} in let final self::MapLike::K* #t2 = key in let final self::MapLike::V* #t3 = value in let final void #t4 = #t1.{core::Map::[]=}(#t2, #t3){(self::MapLike::K*, self::MapLike::V*) →* void} in #t3;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/extensions/index.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/index.dart.weak.outline.expect
index 8b0b1ca..b79e0ba 100644
--- a/pkg/front_end/testcases/extensions/index.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/index.dart.weak.outline.expect
@@ -8,7 +8,7 @@
     ;
   method get(core::Object* key) → self::MapLike::V*
     ;
-  method put(generic-covariant-impl self::MapLike::K* key, generic-covariant-impl self::MapLike::V* value) → self::MapLike::V*
+  method put(covariant-by-class self::MapLike::K* key, covariant-by-class self::MapLike::V* value) → self::MapLike::V*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/extensions/index.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/index.dart.weak.transformed.expect
index fd7413f..1b49a66 100644
--- a/pkg/front_end/testcases/extensions/index.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/index.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
     ;
   method get(core::Object* key) → self::MapLike::V*
     return this.{self::MapLike::_map}{core::Map<self::MapLike::K*, self::MapLike::V*>*}.{core::Map::[]}(key){(core::Object*) →* self::MapLike::V*};
-  method put(generic-covariant-impl self::MapLike::K* key, generic-covariant-impl self::MapLike::V* value) → self::MapLike::V*
+  method put(covariant-by-class self::MapLike::K* key, covariant-by-class self::MapLike::V* value) → self::MapLike::V*
     return let final core::Map<self::MapLike::K*, self::MapLike::V*>* #t1 = this.{self::MapLike::_map}{core::Map<self::MapLike::K*, self::MapLike::V*>*} in let final self::MapLike::K* #t2 = key in let final self::MapLike::V* #t3 = value in let final void #t4 = #t1.{core::Map::[]=}(#t2, #t3){(self::MapLike::K*, self::MapLike::V*) →* void} in #t3;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.expect b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.expect
index b9fb9f7..6b86f49 100644
--- a/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.expect
@@ -13,7 +13,7 @@
   synthetic constructor •() → self::Foo<self::Foo::S*>*
     : super core::Object::•()
     ;
-  method test1(generic-covariant-impl self::Foo::S* x) → void {
+  method test1(covariant-by-class self::Foo::S* x) → void {
     (self::Foo::S*) →* self::Foo::S* f = invalid-expression "pkg/front_end/testcases/extensions/language_issue1182.dart:11:25: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'S Function(S)'.
     S Function(S) f = x.test;
                         ^" in self::Test|get#test<core::num*>(x) as{TypeError} Never;
diff --git a/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.outline.expect
index cf1db41..cabb988 100644
--- a/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class Foo<S extends core::num*> extends core::Object {
   synthetic constructor •() → self::Foo<self::Foo::S*>*
     ;
-  method test1(generic-covariant-impl self::Foo::S* x) → void
+  method test1(covariant-by-class self::Foo::S* x) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.transformed.expect
index b9fb9f7..6b86f49 100644
--- a/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/language_issue1182.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
   synthetic constructor •() → self::Foo<self::Foo::S*>*
     : super core::Object::•()
     ;
-  method test1(generic-covariant-impl self::Foo::S* x) → void {
+  method test1(covariant-by-class self::Foo::S* x) → void {
     (self::Foo::S*) →* self::Foo::S* f = invalid-expression "pkg/front_end/testcases/extensions/language_issue1182.dart:11:25: Error: A value of type 'num Function(num)' can't be assigned to a variable of type 'S Function(S)'.
     S Function(S) f = x.test;
                         ^" in self::Test|get#test<core::num*>(x) as{TypeError} Never;
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
index bd3e8df..80eb1d7 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
@@ -18,20 +18,20 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Foo extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class Foo extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Foo*>* values = #C10;
   @#C11
   static const field self::Foo* bar = #C3;
   @#C12
   static const field self::Foo* baz = #C6;
   static const field self::Foo* cafebabe = #C9;
-  const constructor •(core::int* index, core::String* _name) → self::Foo*
-    : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::Foo*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Foo::_name}{core::String*};
+    return "Foo.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -47,13 +47,13 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Foo.bar"
+  #C2 = "bar"
   #C3 = self::Foo {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "Foo.baz"
+  #C5 = "baz"
   #C6 = self::Foo {index:#C4, _name:#C5}
   #C7 = 2
-  #C8 = "Foo.cafebabe"
+  #C8 = "cafebabe"
   #C9 = self::Foo {index:#C7, _name:#C8}
   #C10 = <self::Foo*>[#C3, #C6, #C9]
   #C11 = 42
@@ -64,5 +64,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///annotation_on_enum_values.dart:
 - Foo. (from org-dartlang-testcase:///annotation_on_enum_values.dart:15:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - Fisk.fisk (from org-dartlang-testcase:///annotation_on_enum_values.dart:12:9)
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.outline.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.outline.expect
index 3b90344..e14c553 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.outline.expect
@@ -18,20 +18,20 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Foo extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class Foo extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Foo*>* values = const <self::Foo*>[self::Foo::bar, self::Foo::baz, self::Foo::cafebabe];
   @self::hest
-  static const field self::Foo* bar = const self::Foo::•(0, "Foo.bar");
+  static const field self::Foo* bar = const self::Foo::•(0, "bar");
   @self::Fisk::fisk<core::int*>(self::hest)
-  static const field self::Foo* baz = const self::Foo::•(1, "Foo.baz");
-  static const field self::Foo* cafebabe = const self::Foo::•(2, "Foo.cafebabe");
-  const constructor •(core::int* index, core::String* _name) → self::Foo*
-    : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
+  static const field self::Foo* baz = const self::Foo::•(1, "baz");
+  static const field self::Foo* cafebabe = const self::Foo::•(2, "cafebabe");
+  const constructor •(core::int* index, core::String* name) → self::Foo*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Foo::_name}{core::String*};
+    return "Foo.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -48,10 +48,10 @@
 
 
 Extra constant evaluation status:
-Evaluated: ListLiteral @ org-dartlang-testcase:///annotation_on_enum_values.dart:15:6 -> ListConstant(const <Foo*>[const Foo{Foo.index: 0, Foo._name: "Foo.bar"}, const Foo{Foo.index: 1, Foo._name: "Foo.baz"}, const Foo{Foo.index: 2, Foo._name: "Foo.cafebabe"}])
+Evaluated: ListLiteral @ org-dartlang-testcase:///annotation_on_enum_values.dart:15:6 -> ListConstant(const <Foo*>[const Foo{_Enum.index: 0, _Enum._name: "bar"}, const Foo{_Enum.index: 1, _Enum._name: "baz"}, const Foo{_Enum.index: 2, _Enum._name: "cafebabe"}])
 Evaluated: StaticGet @ org-dartlang-testcase:///annotation_on_enum_values.dart:16:4 -> IntConstant(42)
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotation_on_enum_values.dart:17:3 -> InstanceConstant(const Foo{Foo.index: 0, Foo._name: "Foo.bar"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotation_on_enum_values.dart:17:3 -> InstanceConstant(const Foo{_Enum.index: 0, _Enum._name: "bar"})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotation_on_enum_values.dart:18:4 -> InstanceConstant(const Fisk<int*>{Fisk.x: 42})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotation_on_enum_values.dart:19:3 -> InstanceConstant(const Foo{Foo.index: 1, Foo._name: "Foo.baz"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotation_on_enum_values.dart:20:3 -> InstanceConstant(const Foo{Foo.index: 2, Foo._name: "Foo.cafebabe"})
-Extra constant evaluation: evaluated: 11, effectively constant: 6
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotation_on_enum_values.dart:19:3 -> InstanceConstant(const Foo{_Enum.index: 1, _Enum._name: "baz"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotation_on_enum_values.dart:20:3 -> InstanceConstant(const Foo{_Enum.index: 2, _Enum._name: "cafebabe"})
+Extra constant evaluation: evaluated: 12, effectively constant: 6
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
index bd3e8df..80eb1d7 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
@@ -18,20 +18,20 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Foo extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class Foo extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Foo*>* values = #C10;
   @#C11
   static const field self::Foo* bar = #C3;
   @#C12
   static const field self::Foo* baz = #C6;
   static const field self::Foo* cafebabe = #C9;
-  const constructor •(core::int* index, core::String* _name) → self::Foo*
-    : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::Foo*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Foo::_name}{core::String*};
+    return "Foo.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -47,13 +47,13 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Foo.bar"
+  #C2 = "bar"
   #C3 = self::Foo {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "Foo.baz"
+  #C5 = "baz"
   #C6 = self::Foo {index:#C4, _name:#C5}
   #C7 = 2
-  #C8 = "Foo.cafebabe"
+  #C8 = "cafebabe"
   #C9 = self::Foo {index:#C7, _name:#C8}
   #C10 = <self::Foo*>[#C3, #C6, #C9]
   #C11 = 42
@@ -64,5 +64,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///annotation_on_enum_values.dart:
 - Foo. (from org-dartlang-testcase:///annotation_on_enum_values.dart:15:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - Fisk.fisk (from org-dartlang-testcase:///annotation_on_enum_values.dart:12:9)
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.expect
index 8ca1bc7..228018a 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::X*>*
     : super core::Object::•()
     ;
-  method bar<generic-covariant-impl Y extends self::A::X*>() → dynamic
+  method bar<covariant-by-class Y extends self::A::X*>() → dynamic
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.outline.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.outline.expect
index 0828ddb..12e78d8 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A<X extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::A<self::A::X*>*
     ;
-  method bar<generic-covariant-impl Y extends self::A::X*>() → dynamic
+  method bar<covariant-by-class Y extends self::A::X*>() → dynamic
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.transformed.expect
index 8ca1bc7..228018a 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::X*>*
     : super core::Object::•()
     ;
-  method bar<generic-covariant-impl Y extends self::A::X*>() → dynamic
+  method bar<covariant-by-class Y extends self::A::X*>() → dynamic
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/bug33298.dart.weak.expect b/pkg/front_end/testcases/general/bug33298.dart.weak.expect
index 397db9f..d656910 100644
--- a/pkg/front_end/testcases/general/bug33298.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug33298.dart.weak.expect
@@ -30,7 +30,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  method call(generic-covariant-impl self::B::T* t) → self::B::T*
+  method call(covariant-by-class self::B::T* t) → self::B::T*
     return t;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/bug33298.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug33298.dart.weak.outline.expect
index 5a653a2..28cafd2 100644
--- a/pkg/front_end/testcases/general/bug33298.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug33298.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 class B<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::B<self::B::T*>*
     ;
-  method call(generic-covariant-impl self::B::T* t) → self::B::T*
+  method call(covariant-by-class self::B::T* t) → self::B::T*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect
index 8f7030e..476cd01 100644
--- a/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug33298.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  method call(generic-covariant-impl self::B::T* t) → self::B::T*
+  method call(covariant-by-class self::B::T* t) → self::B::T*
     return t;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/bug35470.dart.weak.expect b/pkg/front_end/testcases/general/bug35470.dart.weak.expect
index d840067..bc15f31 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.weak.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::X*>*
     : super core::Object::•()
     ;
-  method foo<generic-covariant-impl Y extends self::A::X*>() → dynamic {}
+  method foo<covariant-by-class Y extends self::A::X*>() → dynamic {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/bug35470.dart.weak.outline.expect b/pkg/front_end/testcases/general/bug35470.dart.weak.outline.expect
index bfe47d7..1169300 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A<X extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::A<self::A::X*>*
     ;
-  method foo<generic-covariant-impl Y extends self::A::X*>() → dynamic
+  method foo<covariant-by-class Y extends self::A::X*>() → dynamic
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/bug35470.dart.weak.transformed.expect b/pkg/front_end/testcases/general/bug35470.dart.weak.transformed.expect
index d840067..bc15f31 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::X*>*
     : super core::Object::•()
     ;
-  method foo<generic-covariant-impl Y extends self::A::X*>() → dynamic {}
+  method foo<covariant-by-class Y extends self::A::X*>() → dynamic {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect
index 59e805d..82b2ca3 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.expect
@@ -14,7 +14,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Function*> extends core::Object {
-  generic-covariant-impl field self::Class1::T* field;
+  covariant-by-class field self::Class1::T* field;
   constructor •(self::Class1::T* field) → self::Class1<self::Class1::T*>*
     : self::Class1::field = field, super core::Object::•()
     ;
@@ -37,7 +37,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2<T extends (core::int*) →* core::String*> extends core::Object {
-  generic-covariant-impl field self::Class2::T* field;
+  covariant-by-class field self::Class2::T* field;
   constructor •(self::Class2::T* field) → self::Class2<self::Class2::T*>*
     : self::Class2::field = field, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.outline.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.outline.expect
index 654c962..cc8857f2 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Function*> extends core::Object {
-  generic-covariant-impl field self::Class1::T* field;
+  covariant-by-class field self::Class1::T* field;
   constructor •(self::Class1::T* field) → self::Class1<self::Class1::T*>*
     ;
   method method() → dynamic
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2<T extends (core::int*) →* core::String*> extends core::Object {
-  generic-covariant-impl field self::Class2::T* field;
+  covariant-by-class field self::Class2::T* field;
   constructor •(self::Class2::T* field) → self::Class2<self::Class2::T*>*
     ;
   method method() → dynamic
diff --git a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect
index f740b10..38bd48c 100644
--- a/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/callable_type_variable.dart.weak.transformed.expect
@@ -14,7 +14,7 @@
 import "dart:core" as core;
 
 class Class1<T extends core::Function*> extends core::Object {
-  generic-covariant-impl field self::Class1::T* field;
+  covariant-by-class field self::Class1::T* field;
   constructor •(self::Class1::T* field) → self::Class1<self::Class1::T*>*
     : self::Class1::field = field, super core::Object::•()
     ;
@@ -37,7 +37,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2<T extends (core::int*) →* core::String*> extends core::Object {
-  generic-covariant-impl field self::Class2::T* field;
+  covariant-by-class field self::Class2::T* field;
   constructor •(self::Class2::T* field) → self::Class2<self::Class2::T*>*
     : self::Class2::field = field, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect
index 5e350b2..456d5c3 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.expect
@@ -222,14 +222,14 @@
   get iterator() → core::Iterator<core::int*>*
     return <core::int*>[].{core::Iterable::iterator}{core::Iterator<core::int*>*};
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
+  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::int*) →* self::ConstIterable::map::T* toElement) → core::Iterable<self::ConstIterable::map::T*>*; -> core::Iterable::map
   abstract member-signature method where((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::where
   abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::whereType::T*>*; -> core::Iterable::whereType
   abstract member-signature method expand<T extends core::Object* = dynamic>((core::int*) →* core::Iterable<self::ConstIterable::expand::T*>* toElements) → core::Iterable<self::ConstIterable::expand::T*>*; -> core::Iterable::expand
   abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
   abstract member-signature method forEach((core::int*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(generic-covariant-impl (core::int*, core::int*) →* core::int* combine) → core::int*; -> core::Iterable::reduce
+  abstract member-signature method reduce(covariant-by-class (core::int*, core::int*) →* core::int* combine) → core::int*; -> core::Iterable::reduce
   abstract member-signature method fold<T extends core::Object* = dynamic>(self::ConstIterable::fold::T* initialValue, (self::ConstIterable::fold::T*, core::int*) →* self::ConstIterable::fold::T* combine) → self::ConstIterable::fold::T*; -> core::Iterable::fold
   abstract member-signature method every((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::every
   abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
@@ -243,9 +243,9 @@
   abstract member-signature method takeWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::takeWhile
   abstract member-signature method skip(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::skip
   abstract member-signature method skipWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::int*) →* core::bool* test, {generic-covariant-impl () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::int*) →* core::bool* test, {generic-covariant-impl () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::int*) →* core::bool* test, {generic-covariant-impl () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::singleWhere
+  abstract member-signature method firstWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::firstWhere
+  abstract member-signature method lastWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::lastWhere
+  abstract member-signature method singleWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::singleWhere
   abstract member-signature method elementAt(core::int* index) → core::int*; -> core::Iterable::elementAt
   abstract member-signature method toString() → core::String*; -> core::Iterable::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -283,14 +283,14 @@
   get iterator() → core::Iterator<core::String*>*
     return <core::String*>[].{core::Iterable::iterator}{core::Iterator<core::String*>*};
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
+  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::String*) →* self::CustomIterable::map::T* toElement) → core::Iterable<self::CustomIterable::map::T*>*; -> core::Iterable::map
   abstract member-signature method where((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::where
   abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::whereType::T*>*; -> core::Iterable::whereType
   abstract member-signature method expand<T extends core::Object* = dynamic>((core::String*) →* core::Iterable<self::CustomIterable::expand::T*>* toElements) → core::Iterable<self::CustomIterable::expand::T*>*; -> core::Iterable::expand
   abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
   abstract member-signature method forEach((core::String*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(generic-covariant-impl (core::String*, core::String*) →* core::String* combine) → core::String*; -> core::Iterable::reduce
+  abstract member-signature method reduce(covariant-by-class (core::String*, core::String*) →* core::String* combine) → core::String*; -> core::Iterable::reduce
   abstract member-signature method fold<T extends core::Object* = dynamic>(self::CustomIterable::fold::T* initialValue, (self::CustomIterable::fold::T*, core::String*) →* self::CustomIterable::fold::T* combine) → self::CustomIterable::fold::T*; -> core::Iterable::fold
   abstract member-signature method every((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::every
   abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
@@ -304,9 +304,9 @@
   abstract member-signature method takeWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::takeWhile
   abstract member-signature method skip(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::skip
   abstract member-signature method skipWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::String*) →* core::bool* test, {generic-covariant-impl () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::String*) →* core::bool* test, {generic-covariant-impl () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::String*) →* core::bool* test, {generic-covariant-impl () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::singleWhere
+  abstract member-signature method firstWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::firstWhere
+  abstract member-signature method lastWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::lastWhere
+  abstract member-signature method singleWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::singleWhere
   abstract member-signature method elementAt(core::int* index) → core::String*; -> core::Iterable::elementAt
   abstract member-signature method toString() → core::String*; -> core::Iterable::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -330,7 +330,7 @@
   operator [](core::Object* key) → core::String*
     return throw new core::UnimplementedError::•();
   @#C4
-  operator []=(generic-covariant-impl core::String* key, generic-covariant-impl core::String* value) → void
+  operator []=(covariant-by-class core::String* key, covariant-by-class core::String* value) → void
     return throw new core::UnimplementedError::•();
   @#C4
   method cast<RK extends core::Object* = dynamic, RV extends core::Object* = dynamic>() → core::Map<self::CustomMap::cast::RK*, self::CustomMap::cast::RV*>*
@@ -363,24 +363,24 @@
   get values() → core::Iterable<core::String*>*
     return throw new core::UnimplementedError::•();
   @#C4
-  method addAll(generic-covariant-impl core::Map<core::String*, core::String*>* other) → void
+  method addAll(covariant-by-class core::Map<core::String*, core::String*>* other) → void
     return throw new core::UnimplementedError::•();
   @#C4
-  method addEntries(generic-covariant-impl core::Iterable<core::MapEntry<core::String*, core::String*>*>* newEntries) → void
+  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String*, core::String*>*>* newEntries) → void
     return throw new core::UnimplementedError::•();
   @#C4
   method forEach((core::String*, core::String*) →* void f) → void
     return throw new core::UnimplementedError::•();
   @#C4
-  method putIfAbsent(generic-covariant-impl core::String* key, generic-covariant-impl () →* core::String* ifAbsent) → core::String*
+  method putIfAbsent(covariant-by-class core::String* key, covariant-by-class () →* core::String* ifAbsent) → core::String*
     return throw new core::UnimplementedError::•();
   @#C4
-  method updateAll(generic-covariant-impl (core::String*, core::String*) →* core::String* update) → void
+  method updateAll(covariant-by-class (core::String*, core::String*) →* core::String* update) → void
     return throw new core::UnimplementedError::•();
   @#C4
   method removeWhere((core::String*, core::String*) →* core::bool* predicate) → void
     return throw new core::UnimplementedError::•();
-  method update(generic-covariant-impl core::String* key, generic-covariant-impl (core::String*) →* core::String* update, {generic-covariant-impl () →* core::String* ifAbsent = #C3}) → core::String*
+  method update(covariant-by-class core::String* key, covariant-by-class (core::String*) →* core::String* update, {covariant-by-class () →* core::String* ifAbsent = #C3}) → core::String*
     return throw new core::UnimplementedError::•();
   method map<K2 extends core::Object* = dynamic, V2 extends core::Object* = dynamic>((core::String*, core::String*) →* core::MapEntry<self::CustomMap::map::K2*, self::CustomMap::map::V2*>* f) → core::Map<self::CustomMap::map::K2*, self::CustomMap::map::V2*>*
     return throw new core::UnimplementedError::•();
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
index 8b671e9..bc85ecb 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.outline.expect
@@ -49,14 +49,14 @@
   get iterator() → core::Iterator<core::int*>*
     ;
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
+  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::int*) →* self::ConstIterable::map::T* toElement) → core::Iterable<self::ConstIterable::map::T*>*; -> core::Iterable::map
   abstract member-signature method where((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::where
   abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::whereType::T*>*; -> core::Iterable::whereType
   abstract member-signature method expand<T extends core::Object* = dynamic>((core::int*) →* core::Iterable<self::ConstIterable::expand::T*>* toElements) → core::Iterable<self::ConstIterable::expand::T*>*; -> core::Iterable::expand
   abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
   abstract member-signature method forEach((core::int*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(generic-covariant-impl (core::int*, core::int*) →* core::int* combine) → core::int*; -> core::Iterable::reduce
+  abstract member-signature method reduce(covariant-by-class (core::int*, core::int*) →* core::int* combine) → core::int*; -> core::Iterable::reduce
   abstract member-signature method fold<T extends core::Object* = dynamic>(self::ConstIterable::fold::T* initialValue, (self::ConstIterable::fold::T*, core::int*) →* self::ConstIterable::fold::T* combine) → self::ConstIterable::fold::T*; -> core::Iterable::fold
   abstract member-signature method every((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::every
   abstract member-signature method join([core::String* separator]) → core::String*; -> core::Iterable::join
@@ -70,9 +70,9 @@
   abstract member-signature method takeWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::takeWhile
   abstract member-signature method skip(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::skip
   abstract member-signature method skipWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::int*) →* core::bool* test, {generic-covariant-impl () →* core::int* orElse}) → core::int*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::int*) →* core::bool* test, {generic-covariant-impl () →* core::int* orElse}) → core::int*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::int*) →* core::bool* test, {generic-covariant-impl () →* core::int* orElse}) → core::int*; -> core::Iterable::singleWhere
+  abstract member-signature method firstWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse}) → core::int*; -> core::Iterable::firstWhere
+  abstract member-signature method lastWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse}) → core::int*; -> core::Iterable::lastWhere
+  abstract member-signature method singleWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse}) → core::int*; -> core::Iterable::singleWhere
   abstract member-signature method elementAt(core::int* index) → core::int*; -> core::Iterable::elementAt
   abstract member-signature method toString() → core::String*; -> core::Iterable::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -109,14 +109,14 @@
   get iterator() → core::Iterator<core::String*>*
     ;
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
+  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::String*) →* self::CustomIterable::map::T* toElement) → core::Iterable<self::CustomIterable::map::T*>*; -> core::Iterable::map
   abstract member-signature method where((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::where
   abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::whereType::T*>*; -> core::Iterable::whereType
   abstract member-signature method expand<T extends core::Object* = dynamic>((core::String*) →* core::Iterable<self::CustomIterable::expand::T*>* toElements) → core::Iterable<self::CustomIterable::expand::T*>*; -> core::Iterable::expand
   abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
   abstract member-signature method forEach((core::String*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(generic-covariant-impl (core::String*, core::String*) →* core::String* combine) → core::String*; -> core::Iterable::reduce
+  abstract member-signature method reduce(covariant-by-class (core::String*, core::String*) →* core::String* combine) → core::String*; -> core::Iterable::reduce
   abstract member-signature method fold<T extends core::Object* = dynamic>(self::CustomIterable::fold::T* initialValue, (self::CustomIterable::fold::T*, core::String*) →* self::CustomIterable::fold::T* combine) → self::CustomIterable::fold::T*; -> core::Iterable::fold
   abstract member-signature method every((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::every
   abstract member-signature method join([core::String* separator]) → core::String*; -> core::Iterable::join
@@ -130,9 +130,9 @@
   abstract member-signature method takeWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::takeWhile
   abstract member-signature method skip(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::skip
   abstract member-signature method skipWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::String*) →* core::bool* test, {generic-covariant-impl () →* core::String* orElse}) → core::String*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::String*) →* core::bool* test, {generic-covariant-impl () →* core::String* orElse}) → core::String*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::String*) →* core::bool* test, {generic-covariant-impl () →* core::String* orElse}) → core::String*; -> core::Iterable::singleWhere
+  abstract member-signature method firstWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse}) → core::String*; -> core::Iterable::firstWhere
+  abstract member-signature method lastWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse}) → core::String*; -> core::Iterable::lastWhere
+  abstract member-signature method singleWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse}) → core::String*; -> core::Iterable::singleWhere
   abstract member-signature method elementAt(core::int* index) → core::String*; -> core::Iterable::elementAt
   abstract member-signature method toString() → core::String*; -> core::Iterable::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -156,7 +156,7 @@
   operator [](core::Object* key) → core::String*
     ;
   @core::override
-  operator []=(generic-covariant-impl core::String* key, generic-covariant-impl core::String* value) → void
+  operator []=(covariant-by-class core::String* key, covariant-by-class core::String* value) → void
     ;
   @core::override
   method cast<RK extends core::Object* = dynamic, RV extends core::Object* = dynamic>() → core::Map<self::CustomMap::cast::RK*, self::CustomMap::cast::RV*>*
@@ -189,24 +189,24 @@
   get values() → core::Iterable<core::String*>*
     ;
   @core::override
-  method addAll(generic-covariant-impl core::Map<core::String*, core::String*>* other) → void
+  method addAll(covariant-by-class core::Map<core::String*, core::String*>* other) → void
     ;
   @core::override
-  method addEntries(generic-covariant-impl core::Iterable<core::MapEntry<core::String*, core::String*>*>* newEntries) → void
+  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String*, core::String*>*>* newEntries) → void
     ;
   @core::override
   method forEach((core::String*, core::String*) →* void f) → void
     ;
   @core::override
-  method putIfAbsent(generic-covariant-impl core::String* key, generic-covariant-impl () →* core::String* ifAbsent) → core::String*
+  method putIfAbsent(covariant-by-class core::String* key, covariant-by-class () →* core::String* ifAbsent) → core::String*
     ;
   @core::override
-  method updateAll(generic-covariant-impl (core::String*, core::String*) →* core::String* update) → void
+  method updateAll(covariant-by-class (core::String*, core::String*) →* core::String* update) → void
     ;
   @core::override
   method removeWhere((core::String*, core::String*) →* core::bool* predicate) → void
     ;
-  method update(generic-covariant-impl core::String* key, generic-covariant-impl (core::String*) →* core::String* update, {generic-covariant-impl () →* core::String* ifAbsent}) → core::String*
+  method update(covariant-by-class core::String* key, covariant-by-class (core::String*) →* core::String* update, {covariant-by-class () →* core::String* ifAbsent}) → core::String*
     ;
   method map<K2 extends core::Object* = dynamic, V2 extends core::Object* = dynamic>((core::String*, core::String*) →* core::MapEntry<self::CustomMap::map::K2*, self::CustomMap::map::V2*>* f) → core::Map<self::CustomMap::map::K2*, self::CustomMap::map::V2*>*
     ;
diff --git a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect
index 13439a67..d5c4674 100644
--- a/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/const_collections.dart.weak.transformed.expect
@@ -222,14 +222,14 @@
   get iterator() → core::Iterator<core::int*>*
     return core::_GrowableList::•<core::int*>(0).{core::Iterable::iterator}{core::Iterator<core::int*>*};
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
+  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::int*>* other) → core::Iterable<core::int*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::int*) →* self::ConstIterable::map::T* toElement) → core::Iterable<self::ConstIterable::map::T*>*; -> core::Iterable::map
   abstract member-signature method where((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::where
   abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::ConstIterable::whereType::T*>*; -> core::Iterable::whereType
   abstract member-signature method expand<T extends core::Object* = dynamic>((core::int*) →* core::Iterable<self::ConstIterable::expand::T*>* toElements) → core::Iterable<self::ConstIterable::expand::T*>*; -> core::Iterable::expand
   abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
   abstract member-signature method forEach((core::int*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(generic-covariant-impl (core::int*, core::int*) →* core::int* combine) → core::int*; -> core::Iterable::reduce
+  abstract member-signature method reduce(covariant-by-class (core::int*, core::int*) →* core::int* combine) → core::int*; -> core::Iterable::reduce
   abstract member-signature method fold<T extends core::Object* = dynamic>(self::ConstIterable::fold::T* initialValue, (self::ConstIterable::fold::T*, core::int*) →* self::ConstIterable::fold::T* combine) → self::ConstIterable::fold::T*; -> core::Iterable::fold
   abstract member-signature method every((core::int*) →* core::bool* test) → core::bool*; -> core::Iterable::every
   abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
@@ -243,9 +243,9 @@
   abstract member-signature method takeWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::takeWhile
   abstract member-signature method skip(core::int* count) → core::Iterable<core::int*>*; -> core::Iterable::skip
   abstract member-signature method skipWhile((core::int*) →* core::bool* test) → core::Iterable<core::int*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::int*) →* core::bool* test, {generic-covariant-impl () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::int*) →* core::bool* test, {generic-covariant-impl () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::int*) →* core::bool* test, {generic-covariant-impl () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::singleWhere
+  abstract member-signature method firstWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::firstWhere
+  abstract member-signature method lastWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::lastWhere
+  abstract member-signature method singleWhere((core::int*) →* core::bool* test, {covariant-by-class () →* core::int* orElse = #C3}) → core::int*; -> core::Iterable::singleWhere
   abstract member-signature method elementAt(core::int* index) → core::int*; -> core::Iterable::elementAt
   abstract member-signature method toString() → core::String*; -> core::Iterable::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -283,14 +283,14 @@
   get iterator() → core::Iterator<core::String*>*
     return core::_GrowableList::•<core::String*>(0).{core::Iterable::iterator}{core::Iterator<core::String*>*};
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
+  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::String*>* other) → core::Iterable<core::String*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::String*) →* self::CustomIterable::map::T* toElement) → core::Iterable<self::CustomIterable::map::T*>*; -> core::Iterable::map
   abstract member-signature method where((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::where
   abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::CustomIterable::whereType::T*>*; -> core::Iterable::whereType
   abstract member-signature method expand<T extends core::Object* = dynamic>((core::String*) →* core::Iterable<self::CustomIterable::expand::T*>* toElements) → core::Iterable<self::CustomIterable::expand::T*>*; -> core::Iterable::expand
   abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
   abstract member-signature method forEach((core::String*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(generic-covariant-impl (core::String*, core::String*) →* core::String* combine) → core::String*; -> core::Iterable::reduce
+  abstract member-signature method reduce(covariant-by-class (core::String*, core::String*) →* core::String* combine) → core::String*; -> core::Iterable::reduce
   abstract member-signature method fold<T extends core::Object* = dynamic>(self::CustomIterable::fold::T* initialValue, (self::CustomIterable::fold::T*, core::String*) →* self::CustomIterable::fold::T* combine) → self::CustomIterable::fold::T*; -> core::Iterable::fold
   abstract member-signature method every((core::String*) →* core::bool* test) → core::bool*; -> core::Iterable::every
   abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
@@ -304,9 +304,9 @@
   abstract member-signature method takeWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::takeWhile
   abstract member-signature method skip(core::int* count) → core::Iterable<core::String*>*; -> core::Iterable::skip
   abstract member-signature method skipWhile((core::String*) →* core::bool* test) → core::Iterable<core::String*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::String*) →* core::bool* test, {generic-covariant-impl () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::String*) →* core::bool* test, {generic-covariant-impl () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::String*) →* core::bool* test, {generic-covariant-impl () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::singleWhere
+  abstract member-signature method firstWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::firstWhere
+  abstract member-signature method lastWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::lastWhere
+  abstract member-signature method singleWhere((core::String*) →* core::bool* test, {covariant-by-class () →* core::String* orElse = #C3}) → core::String*; -> core::Iterable::singleWhere
   abstract member-signature method elementAt(core::int* index) → core::String*; -> core::Iterable::elementAt
   abstract member-signature method toString() → core::String*; -> core::Iterable::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -330,7 +330,7 @@
   operator [](core::Object* key) → core::String*
     return throw new core::UnimplementedError::•();
   @#C4
-  operator []=(generic-covariant-impl core::String* key, generic-covariant-impl core::String* value) → void
+  operator []=(covariant-by-class core::String* key, covariant-by-class core::String* value) → void
     return throw new core::UnimplementedError::•();
   @#C4
   method cast<RK extends core::Object* = dynamic, RV extends core::Object* = dynamic>() → core::Map<self::CustomMap::cast::RK*, self::CustomMap::cast::RV*>*
@@ -363,24 +363,24 @@
   get values() → core::Iterable<core::String*>*
     return throw new core::UnimplementedError::•();
   @#C4
-  method addAll(generic-covariant-impl core::Map<core::String*, core::String*>* other) → void
+  method addAll(covariant-by-class core::Map<core::String*, core::String*>* other) → void
     return throw new core::UnimplementedError::•();
   @#C4
-  method addEntries(generic-covariant-impl core::Iterable<core::MapEntry<core::String*, core::String*>*>* newEntries) → void
+  method addEntries(covariant-by-class core::Iterable<core::MapEntry<core::String*, core::String*>*>* newEntries) → void
     return throw new core::UnimplementedError::•();
   @#C4
   method forEach((core::String*, core::String*) →* void f) → void
     return throw new core::UnimplementedError::•();
   @#C4
-  method putIfAbsent(generic-covariant-impl core::String* key, generic-covariant-impl () →* core::String* ifAbsent) → core::String*
+  method putIfAbsent(covariant-by-class core::String* key, covariant-by-class () →* core::String* ifAbsent) → core::String*
     return throw new core::UnimplementedError::•();
   @#C4
-  method updateAll(generic-covariant-impl (core::String*, core::String*) →* core::String* update) → void
+  method updateAll(covariant-by-class (core::String*, core::String*) →* core::String* update) → void
     return throw new core::UnimplementedError::•();
   @#C4
   method removeWhere((core::String*, core::String*) →* core::bool* predicate) → void
     return throw new core::UnimplementedError::•();
-  method update(generic-covariant-impl core::String* key, generic-covariant-impl (core::String*) →* core::String* update, {generic-covariant-impl () →* core::String* ifAbsent = #C3}) → core::String*
+  method update(covariant-by-class core::String* key, covariant-by-class (core::String*) →* core::String* update, {covariant-by-class () →* core::String* ifAbsent = #C3}) → core::String*
     return throw new core::UnimplementedError::•();
   method map<K2 extends core::Object* = dynamic, V2 extends core::Object* = dynamic>((core::String*, core::String*) →* core::MapEntry<self::CustomMap::map::K2*, self::CustomMap::map::V2*>* f) → core::Map<self::CustomMap::map::K2*, self::CustomMap::map::V2*>*
     return throw new core::UnimplementedError::•();
diff --git a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.expect b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.expect
index 8f994fa..2c1402b 100644
--- a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.expect
@@ -18,7 +18,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::_Y<self::A::T*>* x;
+  covariant-by-class field self::_Y<self::A::T*>* x;
   constructor •(self::_Y<self::A::T*>* x) → self::A<self::A::T*>*
     : self::A::x = x, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.outline.expect b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.outline.expect
index 8059549..f0f7deb 100644
--- a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.outline.expect
@@ -18,7 +18,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::_Y<self::A::T*>* x;
+  covariant-by-class field self::_Y<self::A::T*>* x;
   constructor •(self::_Y<self::A::T*>* x) → self::A<self::A::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.transformed.expect
index 8f994fa..2c1402b 100644
--- a/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constructor_const_inference.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::_Y<self::A::T*>* x;
+  covariant-by-class field self::_Y<self::A::T*>* x;
   constructor •(self::_Y<self::A::T*>* x) → self::A<self::A::T*>*
     : self::A::x = x, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect b/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect
index 2e6ac11..3f1296f 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.weak.expect
@@ -126,7 +126,7 @@
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
-  operator ==(covariant self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
     return true;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -142,14 +142,14 @@
   synthetic constructor •() → self::B*
     : super self::A::•()
     ;
-  operator ==(covariant self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
     return true;
 }
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  operator ==(covariant generic-covariant-impl self::C<self::C::T*>* other) → core::bool*
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T*>* other) → core::bool*
     return true;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_equals.dart.weak.outline.expect
index 87e562f..a4cf466 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   synthetic constructor •() → self::A*
     ;
-  operator ==(covariant self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -20,13 +20,13 @@
 class B extends self::A {
   synthetic constructor •() → self::B*
     ;
-  operator ==(covariant self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
     ;
 }
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  operator ==(covariant generic-covariant-impl self::C<self::C::T*>* other) → core::bool*
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T*>* other) → core::bool*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect
index 2e6ac11..3f1296f 100644
--- a/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_equals.dart.weak.transformed.expect
@@ -126,7 +126,7 @@
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
-  operator ==(covariant self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
     return true;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -142,14 +142,14 @@
   synthetic constructor •() → self::B*
     : super self::A::•()
     ;
-  operator ==(covariant self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
     return true;
 }
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  operator ==(covariant generic-covariant-impl self::C<self::C::T*>* other) → core::bool*
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T*>* other) → core::bool*
     return true;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/covariant_field.dart.weak.expect b/pkg/front_end/testcases/general/covariant_field.dart.weak.expect
index 829f7cb..6453946 100644
--- a/pkg/front_end/testcases/general/covariant_field.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_field.dart.weak.expect
@@ -15,7 +15,7 @@
 
 class A extends core::Object {
   field core::num* invariantField = null;
-  covariant field core::num* covariantField = null;
+  covariant-by-declaration field core::num* covariantField = null;
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
@@ -37,7 +37,7 @@
   abstract get invariantField() → core::num*;
   abstract set invariantField(core::num* value) → void;
   abstract get covariantField() → core::num*;
-  abstract set covariantField(covariant core::num* value) → void;
+  abstract set covariantField(covariant-by-declaration core::num* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -56,7 +56,7 @@
   abstract get invariantField() → core::int*;
   set invariantField(core::int* value) → void {}
   abstract get covariantField() → core::int*;
-  set covariantField(covariant core::int* value) → void {}
+  set covariantField(covariant-by-declaration core::int* value) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -73,9 +73,9 @@
     : super core::Object::•()
     ;
   abstract get invariantField() → core::int*;
-  set invariantField(covariant core::int* value) → void {}
+  set invariantField(covariant-by-declaration core::int* value) → void {}
   abstract get covariantField() → core::int*;
-  set covariantField(covariant core::int* value) → void {}
+  set covariantField(covariant-by-declaration core::int* value) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/covariant_field.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_field.dart.weak.outline.expect
index eb9f223..734e3a9 100644
--- a/pkg/front_end/testcases/general/covariant_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_field.dart.weak.outline.expect
@@ -15,7 +15,7 @@
 
 class A extends core::Object {
   field core::num* invariantField;
-  covariant field core::num* covariantField;
+  covariant-by-declaration field core::num* covariantField;
   synthetic constructor •() → self::A*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -35,7 +35,7 @@
   abstract get invariantField() → core::num*;
   abstract set invariantField(core::num* value) → void;
   abstract get covariantField() → core::num*;
-  abstract set covariantField(covariant core::num* value) → void;
+  abstract set covariantField(covariant-by-declaration core::num* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -54,7 +54,7 @@
   set invariantField(core::int* value) → void
     ;
   abstract get covariantField() → core::int*;
-  set covariantField(covariant core::int* value) → void
+  set covariantField(covariant-by-declaration core::int* value) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -71,10 +71,10 @@
   synthetic constructor •() → self::D*
     ;
   abstract get invariantField() → core::int*;
-  set invariantField(covariant core::int* value) → void
+  set invariantField(covariant-by-declaration core::int* value) → void
     ;
   abstract get covariantField() → core::int*;
-  set covariantField(covariant core::int* value) → void
+  set covariantField(covariant-by-declaration core::int* value) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.expect
index 22e490c..fb69f60 100644
--- a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.expect
@@ -19,7 +19,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  covariant field core::num* field = null;
+  covariant-by-declaration field core::num* field = null;
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A implements self::B {
-  covariant field core::num* field = null;
+  covariant-by-declaration field core::num* field = null;
   synthetic constructor •() → self::C*
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.outline.expect
index d5cf801..a7dd616 100644
--- a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.outline.expect
@@ -18,7 +18,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  covariant field core::num* field;
+  covariant-by-declaration field core::num* field;
   synthetic constructor •() → self::B*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -33,7 +33,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A implements self::B {
-  covariant field core::num* field;
+  covariant-by-declaration field core::num* field;
   synthetic constructor •() → self::C*
     ;
 }
diff --git a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.transformed.expect
index 22e490c..fb69f60 100644
--- a/pkg/front_end/testcases/general/covariant_field_override.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_field_override.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  covariant field core::num* field = null;
+  covariant-by-declaration field core::num* field = null;
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::A implements self::B {
-  covariant field core::num* field = null;
+  covariant-by-declaration field core::num* field = null;
   synthetic constructor •() → self::C*
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/general/covariant_generic.dart.weak.expect b/pkg/front_end/testcases/general/covariant_generic.dart.weak.expect
index a195318..f28d890 100644
--- a/pkg/front_end/testcases/general/covariant_generic.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_generic.dart.weak.expect
@@ -6,13 +6,13 @@
 class Foo<T extends core::Object* = dynamic> extends core::Object {
   final field self::Foo::T* finalField;
   final field (self::Foo::T*) →* void callbackField;
-  generic-covariant-impl field self::Foo::T* mutableField = null;
+  covariant-by-class field self::Foo::T* mutableField = null;
   field (self::Foo::T*) →* void mutableCallbackField = null;
   constructor •(self::Foo::T* finalField, (self::Foo::T*) →* void callbackField) → self::Foo<self::Foo::T*>*
     : self::Foo::finalField = finalField, self::Foo::callbackField = callbackField, super core::Object::•()
     ;
-  method method(generic-covariant-impl self::Foo::T* x) → void {}
-  set setter(generic-covariant-impl self::Foo::T* x) → void {}
+  method method(covariant-by-class self::Foo::T* x) → void {}
+  set setter(covariant-by-class self::Foo::T* x) → void {}
   method withCallback((self::Foo::T*) →* void callback) → void {
     callback(this.{self::Foo::finalField}{self::Foo::T*}){(self::Foo::T*) →* void};
   }
diff --git a/pkg/front_end/testcases/general/covariant_generic.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_generic.dart.weak.outline.expect
index e37f335..eb4adfe 100644
--- a/pkg/front_end/testcases/general/covariant_generic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_generic.dart.weak.outline.expect
@@ -6,13 +6,13 @@
 class Foo<T extends core::Object* = dynamic> extends core::Object {
   final field self::Foo::T* finalField;
   final field (self::Foo::T*) →* void callbackField;
-  generic-covariant-impl field self::Foo::T* mutableField;
+  covariant-by-class field self::Foo::T* mutableField;
   field (self::Foo::T*) →* void mutableCallbackField;
   constructor •(self::Foo::T* finalField, (self::Foo::T*) →* void callbackField) → self::Foo<self::Foo::T*>*
     ;
-  method method(generic-covariant-impl self::Foo::T* x) → void
+  method method(covariant-by-class self::Foo::T* x) → void
     ;
-  set setter(generic-covariant-impl self::Foo::T* x) → void
+  set setter(covariant-by-class self::Foo::T* x) → void
     ;
   method withCallback((self::Foo::T*) →* void callback) → void
     ;
diff --git a/pkg/front_end/testcases/general/covariant_generic.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_generic.dart.weak.transformed.expect
index a65e4e7..4784a3f 100644
--- a/pkg/front_end/testcases/general/covariant_generic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_generic.dart.weak.transformed.expect
@@ -6,13 +6,13 @@
 class Foo<T extends core::Object* = dynamic> extends core::Object {
   final field self::Foo::T* finalField;
   final field (self::Foo::T*) →* void callbackField;
-  generic-covariant-impl field self::Foo::T* mutableField = null;
+  covariant-by-class field self::Foo::T* mutableField = null;
   field (self::Foo::T*) →* void mutableCallbackField = null;
   constructor •(self::Foo::T* finalField, (self::Foo::T*) →* void callbackField) → self::Foo<self::Foo::T*>*
     : self::Foo::finalField = finalField, self::Foo::callbackField = callbackField, super core::Object::•()
     ;
-  method method(generic-covariant-impl self::Foo::T* x) → void {}
-  set setter(generic-covariant-impl self::Foo::T* x) → void {}
+  method method(covariant-by-class self::Foo::T* x) → void {}
+  set setter(covariant-by-class self::Foo::T* x) → void {}
   method withCallback((self::Foo::T*) →* void callback) → void {
     callback(this.{self::Foo::finalField}{self::Foo::T*}){(self::Foo::T*) →* void};
   }
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.expect b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.expect
index 60fc7d3..0390bb6 100644
--- a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
-  method foo(covariant core::num* x) → void {}
+  method foo(covariant-by-declaration core::num* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -54,13 +54,13 @@
   synthetic constructor •() → self::_D&A&B*
     : super self::A::•()
     ;
-  forwarding-stub method foo(covariant core::num* x) → void
+  forwarding-stub method foo(covariant-by-declaration core::num* x) → void
     return super.{self::B::foo}(x);
 }
 class D extends self::_D&A&B implements self::C {
   synthetic constructor •() → self::D*
     : super self::_D&A&B::•()
     ;
-  method foo(covariant core::int* x) → void {}
+  method foo(covariant-by-declaration core::int* x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.outline.expect
index 2ca3173..6da60de 100644
--- a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   synthetic constructor •() → self::A*
     ;
-  method foo(covariant core::num* x) → void
+  method foo(covariant-by-declaration core::num* x) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -54,13 +54,13 @@
   synthetic constructor •() → self::_D&A&B*
     : super self::A::•()
     ;
-  forwarding-stub method foo(covariant core::num* x) → void
+  forwarding-stub method foo(covariant-by-declaration core::num* x) → void
     return super.{self::B::foo}(x);
 }
 class D extends self::_D&A&B implements self::C {
   synthetic constructor •() → self::D*
     ;
-  method foo(covariant core::int* x) → void
+  method foo(covariant-by-declaration core::int* x) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.transformed.expect
index e6dbddd..502b6f3 100644
--- a/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_parameter_in_superclass_of_mixin_application.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
-  method foo(covariant core::num* x) → void {}
+  method foo(covariant-by-declaration core::num* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -54,12 +54,12 @@
   synthetic constructor •() → self::_D&A&B*
     : super self::A::•()
     ;
-  method foo(covariant core::num* x) → void {}
+  method foo(covariant-by-declaration core::num* x) → void {}
 }
 class D extends self::_D&A&B implements self::C {
   synthetic constructor •() → self::D*
     : super self::_D&A&B::•()
     ;
-  method foo(covariant core::int* x) → void {}
+  method foo(covariant-by-declaration core::int* x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.expect b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.expect
index c51ea4f..044d867 100644
--- a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.expect
@@ -39,6 +39,6 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  method method(covariant core::String* a) → dynamic {}
+  method method(covariant-by-declaration core::String* a) → dynamic {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.outline.expect
index e83a1aa..e98cc10 100644
--- a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.outline.expect
@@ -38,7 +38,7 @@
 class C extends self::B {
   synthetic constructor •() → self::C*
     ;
-  method method(covariant core::String* a) → dynamic
+  method method(covariant-by-declaration core::String* a) → dynamic
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.transformed.expect
index c51ea4f..044d867 100644
--- a/pkg/front_end/testcases/general/covariant_super_check.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_super_check.dart.weak.transformed.expect
@@ -39,6 +39,6 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  method method(covariant core::String* a) → dynamic {}
+  method method(covariant-by-declaration core::String* a) → dynamic {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.expect
index 4ba2d78..d28fb6f 100644
--- a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::S*>*
     : super core::Object::•()
     ;
-  method method<generic-covariant-impl T extends self::A::S*>(generic-covariant-impl self::A::S* s) → void {}
+  method method<covariant-by-class T extends self::A::S*>(covariant-by-class self::A::S* s) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::B<self::B::S*>*
     : super core::Object::•()
     ;
-  method method<generic-covariant-impl T extends self::B::S*>(covariant generic-covariant-impl self::B::S* s) → void {}
+  method method<covariant-by-class T extends self::B::S*>(covariant-by-declaration covariant-by-class self::B::S* s) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,14 +38,14 @@
   synthetic constructor •() → self::C<self::C::S*>*
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method method<generic-covariant-impl T extends self::C::S*>(covariant generic-covariant-impl self::C::S* s) → void
+  forwarding-stub forwarding-semi-stub method method<covariant-by-class T extends self::C::S*>(covariant-by-declaration covariant-by-class self::C::S* s) → void
     return super.{self::A::method}<self::C::method::T*>(s);
 }
 class D<S extends core::Object* = dynamic> extends self::A<self::D::S*> implements self::B<self::D::S*> {
   synthetic constructor •() → self::D<self::D::S*>*
     : super self::A::•()
     ;
-  forwarding-stub method method<generic-covariant-impl T extends self::D::S*>(covariant generic-covariant-impl self::D::S* s) → void
+  forwarding-stub method method<covariant-by-class T extends self::D::S*>(covariant-by-declaration covariant-by-class self::D::S* s) → void
     return super.{self::A::method}<self::D::method::T*>(s);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.outline.expect
index 066d863..c24dcc9 100644
--- a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A<S extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::A<self::A::S*>*
     ;
-  method method<generic-covariant-impl T extends self::A::S*>(generic-covariant-impl self::A::S* s) → void
+  method method<covariant-by-class T extends self::A::S*>(covariant-by-class self::A::S* s) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -21,7 +21,7 @@
 class B<S extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::B<self::B::S*>*
     ;
-  method method<generic-covariant-impl T extends self::B::S*>(covariant generic-covariant-impl self::B::S* s) → void
+  method method<covariant-by-class T extends self::B::S*>(covariant-by-declaration covariant-by-class self::B::S* s) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -37,13 +37,13 @@
 class C<S extends core::Object* = dynamic> extends self::A<self::C::S*> implements self::B<self::C::S*> {
   synthetic constructor •() → self::C<self::C::S*>*
     ;
-  forwarding-stub forwarding-semi-stub method method<generic-covariant-impl T extends self::C::S*>(covariant generic-covariant-impl self::C::S* s) → void
+  forwarding-stub forwarding-semi-stub method method<covariant-by-class T extends self::C::S*>(covariant-by-declaration covariant-by-class self::C::S* s) → void
     return super.{self::A::method}<self::C::method::T*>(s);
 }
 class D<S extends core::Object* = dynamic> extends self::A<self::D::S*> implements self::B<self::D::S*> {
   synthetic constructor •() → self::D<self::D::S*>*
     ;
-  forwarding-stub method method<generic-covariant-impl T extends self::D::S*>(covariant generic-covariant-impl self::D::S* s) → void
+  forwarding-stub method method<covariant-by-class T extends self::D::S*>(covariant-by-declaration covariant-by-class self::D::S* s) → void
     return super.{self::A::method}<self::D::method::T*>(s);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.transformed.expect
index 4ba2d78..d28fb6f 100644
--- a/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/covariant_type_parameter.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::S*>*
     : super core::Object::•()
     ;
-  method method<generic-covariant-impl T extends self::A::S*>(generic-covariant-impl self::A::S* s) → void {}
+  method method<covariant-by-class T extends self::A::S*>(covariant-by-class self::A::S* s) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::B<self::B::S*>*
     : super core::Object::•()
     ;
-  method method<generic-covariant-impl T extends self::B::S*>(covariant generic-covariant-impl self::B::S* s) → void {}
+  method method<covariant-by-class T extends self::B::S*>(covariant-by-declaration covariant-by-class self::B::S* s) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,14 +38,14 @@
   synthetic constructor •() → self::C<self::C::S*>*
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method method<generic-covariant-impl T extends self::C::S*>(covariant generic-covariant-impl self::C::S* s) → void
+  forwarding-stub forwarding-semi-stub method method<covariant-by-class T extends self::C::S*>(covariant-by-declaration covariant-by-class self::C::S* s) → void
     return super.{self::A::method}<self::C::method::T*>(s);
 }
 class D<S extends core::Object* = dynamic> extends self::A<self::D::S*> implements self::B<self::D::S*> {
   synthetic constructor •() → self::D<self::D::S*>*
     : super self::A::•()
     ;
-  forwarding-stub method method<generic-covariant-impl T extends self::D::S*>(covariant generic-covariant-impl self::D::S* s) → void
+  forwarding-stub method method<covariant-by-class T extends self::D::S*>(covariant-by-declaration covariant-by-class self::D::S* s) → void
     return super.{self::A::method}<self::D::method::T*>(s);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.expect b/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.expect
index ab69e1b..3a5d2de 100644
--- a/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.expect
@@ -50,7 +50,7 @@
   synthetic constructor •() → self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin
     : super self::RenderSliver::•()
     ;
-  forwarding-stub method handleEvent(invalid-type event, covariant invalid-type entry) → void
+  forwarding-stub method handleEvent(invalid-type event, covariant-by-declaration invalid-type entry) → void
     return super.{self::RenderSliver::handleEvent}(event, entry);
 }
 abstract class _RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin&RenderSliverHelpers extends self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin /*isAnonymousMixin*/  {
@@ -92,7 +92,7 @@
   synthetic constructor •() → mai::RenderObject
     : super core::Object::•()
     ;
-  method handleEvent(invalid-type event, covariant invalid-type entry) → void {}
+  method handleEvent(invalid-type event, covariant-by-declaration invalid-type entry) → void {}
 }
 abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
 }
diff --git a/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.outline.expect
index bac955b..7fdf300 100644
--- a/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.outline.expect
@@ -45,7 +45,7 @@
   synthetic constructor •() → self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin
     : super self::RenderSliver::•()
     ;
-  forwarding-stub method handleEvent(invalid-type event, covariant invalid-type entry) → void
+  forwarding-stub method handleEvent(invalid-type event, covariant-by-declaration invalid-type entry) → void
     return super.{self::RenderSliver::handleEvent}(event, entry);
 }
 abstract class _RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin&RenderSliverHelpers extends self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin /*isAnonymousMixin*/  {
@@ -78,7 +78,7 @@
 abstract class RenderObject extends core::Object {
   synthetic constructor •() → mai::RenderObject
     ;
-  method handleEvent(invalid-type event, covariant invalid-type entry) → void
+  method handleEvent(invalid-type event, covariant-by-declaration invalid-type entry) → void
     ;
 }
 abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.transformed.expect
index 89640c3..04e18c9 100644
--- a/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/crashes/crash_05/main.dart.weak.transformed.expect
@@ -50,7 +50,7 @@
   synthetic constructor •() → self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin
     : super self::RenderSliver::•()
     ;
-  forwarding-stub method handleEvent(invalid-type event, covariant invalid-type entry) → void
+  forwarding-stub method handleEvent(invalid-type event, covariant-by-declaration invalid-type entry) → void
     return super.{self::RenderSliver::handleEvent}(event, entry);
 }
 abstract class _RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin&RenderSliverHelpers extends self::_RenderSliverSingleBoxAdapter&RenderSliver&RenderObjectWithChildMixin /*isAnonymousMixin*/  {
@@ -92,7 +92,7 @@
   synthetic constructor •() → mai::RenderObject
     : super core::Object::•()
     ;
-  method handleEvent(invalid-type event, covariant invalid-type entry) → void {}
+  method handleEvent(invalid-type event, covariant-by-declaration invalid-type entry) → void {}
 }
 abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
 }
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
index e32bbfb..183d7ef 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
@@ -98,20 +98,6 @@
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:93:3: Error: '_name' is already declared in this scope.
-//   _name,
-//   ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of '_name' is implied by this definition.
-// enum AnotherEnum {
-//      ^^^^^^^^^^^
-//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: 'index' is already declared in this scope.
-//   index,
-//   ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'index' is implied by this definition.
-// enum AnotherEnum {
-//      ^^^^^^^^^^^
-//
 // pkg/front_end/testcases/general/duplicated_declarations.dart:95:3: Error: 'toString' is already declared in this scope.
 //   toString,
 //   ^^^^^^^^
@@ -306,6 +292,13 @@
 // class Sub extends C {
 //                   ^
 //
+// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: Can't declare a member that conflicts with an inherited one.
+//   index,
+//   ^^^^^
+// sdk/lib/core/enum.dart:74:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
 // pkg/front_end/testcases/general/duplicated_declarations.dart:34:3: Error: Can't use 'main' because it is declared more than once.
 //   main();
 //   ^
@@ -345,14 +338,6 @@
 //   m() => super.m();
 //                ^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:104:38: Error: Can't use '_name' because it is declared more than once.
-//     "AnotherEnum._name": AnotherEnum._name,
-//                                      ^^^^^
-//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:105:38: Error: Can't use 'index' because it is declared more than once.
-//     "AnotherEnum.index": AnotherEnum.index,
-//                                      ^^^^^
-//
 // pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
 //     "AnotherEnum.toString": AnotherEnum.toString,
 //                                         ^^^^^^^^
@@ -495,16 +480,16 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Enum#4 extends core::Object implements core::Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  final field core::int* index;
-  final field core::String* _name;
+class Enum#4 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
   static const field core::List<self::Enum#4*>* values = #C4;
   static const field self::Enum#4* a = #C3;
-  const constructor •(core::int* index, core::String* _name) → self::Enum#4*
-    : self::Enum#4::index = index, self::Enum#4::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::Enum#4*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Enum#4::_name}{core::String*};
+    return "Enum#4.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -515,18 +500,18 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Enum#3 extends core::Object implements core::Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  final field core::int* index;
-  final field core::String* _name;
+class Enum#3 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
   static const field core::List<self::Enum#3*>* values = #C12;
   static const field self::Enum#3* a = #C5;
   static const field self::Enum#3* b = #C8;
   static const field self::Enum#3* c = #C11;
-  const constructor •(core::int* index, core::String* _name) → self::Enum#3*
-    : self::Enum#3::index = index, self::Enum#3::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::Enum#3*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Enum#3::_name}{core::String*};
+    return "Enum#3.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -537,18 +522,18 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Enum#2 extends core::Object implements core::Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  final field core::int* index;
-  final field core::String* _name;
+class Enum#2 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
   static const field core::List<self::Enum#2*>* values = #C17;
   static const field self::Enum#2* Enum = #C14;
   static const field self::Enum#2* a = #C15;
   static const field self::Enum#2* b = #C16;
-  const constructor •(core::int* index, core::String* _name) → self::Enum#2*
-    : self::Enum#2::index = index, self::Enum#2::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::Enum#2*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Enum#2::_name}{core::String*};
+    return "Enum#2.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -559,18 +544,18 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Enum#1 extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class Enum#1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum#1*>* values = #C21;
   static const field self::Enum#1* a = #C18;
   static const field self::Enum#1* b = #C19;
   static const field self::Enum#1* c = #C20;
-  const constructor •(core::int* index, core::String* _name) → self::Enum#1*
-    : self::Enum#1::index = index, self::Enum#1::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::Enum#1*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Enum#1::_name}{core::String*};
+    return "Enum#1.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -581,18 +566,18 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class Enum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum*>* values = #C25;
   static const field self::Enum* Enum = #C22;
   static const field self::Enum* a = #C23;
   static const field self::Enum* b = #C24;
-  const constructor •(core::int* index, core::String* _name) → self::Enum*
-    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::Enum*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Enum::_name}{core::String*};
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -603,18 +588,19 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class AnotherEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
-  static const field core::List<self::AnotherEnum*>* values = #C32;
-  static const field self::AnotherEnum* a = #C27;
-  static const field self::AnotherEnum* b = #C29;
-  static const field self::AnotherEnum* c = #C31;
-  const constructor •(core::int* index, core::String* _name) → self::AnotherEnum*
-    : self::AnotherEnum::index = index, self::AnotherEnum::_name = _name, super core::Object::•()
+class AnotherEnum extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::AnotherEnum*>* values = #C35;
+  static const field self::AnotherEnum* a = #C26;
+  static const field self::AnotherEnum* b = #C27;
+  static const field self::AnotherEnum* c = #C28;
+  static const field self::AnotherEnum* _name = #C31;
+  static const field self::AnotherEnum* index = #C34;
+  const constructor •(core::int* index, core::String* name) → self::AnotherEnum*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::AnotherEnum::_name}{core::String*};
+    return "AnotherEnum.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -648,11 +634,7 @@
     ^";
 }
 static method useAnotherEnum() → dynamic {
-  <core::String*, core::Object*>{"AnotherEnum.a": #C27, "AnotherEnum.b": #C29, "AnotherEnum.c": #C31, "AnotherEnum._name": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:104:38: Error: Can't use '_name' because it is declared more than once.
-    \"AnotherEnum._name\": AnotherEnum._name,
-                                     ^^^^^", "AnotherEnum.index": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:105:38: Error: Can't use 'index' because it is declared more than once.
-    \"AnotherEnum.index\": AnotherEnum.index,
-                                     ^^^^^", "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
+  <core::String*, core::Object*>{"AnotherEnum.a": #C26, "AnotherEnum.b": #C27, "AnotherEnum.c": #C28, "AnotherEnum._name": #C31, "AnotherEnum.index": #C34, "AnotherEnum.toString": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:106:41: Error: Can't use 'toString' because it is declared more than once.
     \"AnotherEnum.toString\": AnotherEnum.toString,
                                         ^^^^^^^^", "AnotherEnum.values": invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:107:39: Error: Can't use 'values' because it is declared more than once.
     \"AnotherEnum.values\": AnotherEnum.values,
@@ -665,18 +647,18 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Enum.a"
+  #C2 = "a"
   #C3 = self::Enum#4 {index:#C1, _name:#C2}
   #C4 = <self::Enum#4*>[#C3]
   #C5 = self::Enum#3 {index:#C1, _name:#C2}
   #C6 = 1
-  #C7 = "Enum.b"
+  #C7 = "b"
   #C8 = self::Enum#3 {index:#C6, _name:#C7}
   #C9 = 2
-  #C10 = "Enum.c"
+  #C10 = "c"
   #C11 = self::Enum#3 {index:#C9, _name:#C10}
   #C12 = <self::Enum#3*>[#C5, #C8, #C11]
-  #C13 = "Enum.Enum"
+  #C13 = "Enum"
   #C14 = self::Enum#2 {index:#C1, _name:#C13}
   #C15 = self::Enum#2 {index:#C6, _name:#C2}
   #C16 = self::Enum#2 {index:#C9, _name:#C7}
@@ -689,19 +671,23 @@
   #C23 = self::Enum {index:#C6, _name:#C2}
   #C24 = self::Enum {index:#C9, _name:#C7}
   #C25 = <self::Enum*>[#C22, #C23, #C24]
-  #C26 = "AnotherEnum.a"
-  #C27 = self::AnotherEnum {index:#C1, _name:#C26}
-  #C28 = "AnotherEnum.b"
-  #C29 = self::AnotherEnum {index:#C6, _name:#C28}
-  #C30 = "AnotherEnum.c"
-  #C31 = self::AnotherEnum {index:#C9, _name:#C30}
-  #C32 = <self::AnotherEnum*>[#C27, #C29, #C31]
+  #C26 = self::AnotherEnum {index:#C1, _name:#C2}
+  #C27 = self::AnotherEnum {index:#C6, _name:#C7}
+  #C28 = self::AnotherEnum {index:#C9, _name:#C10}
+  #C29 = 3
+  #C30 = "_name"
+  #C31 = self::AnotherEnum {index:#C29, _name:#C30}
+  #C32 = 4
+  #C33 = "index"
+  #C34 = self::AnotherEnum {index:#C32, _name:#C33}
+  #C35 = <self::AnotherEnum*>[#C26, #C27, #C28, #C31, #C34]
 }
 
 
 Constructor coverage from constants:
 org-dartlang-testcase:///duplicated_declarations.dart:
 - Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:83:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:76:6)
 - AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:89:6)
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
index 287add3..aaa7492 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
@@ -98,20 +98,6 @@
 // enum Enum {
 //      ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_declarations.dart:93:3: Error: '_name' is already declared in this scope.
-//   _name,
-//   ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of '_name' is implied by this definition.
-// enum AnotherEnum {
-//      ^^^^^^^^^^^
-//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: 'index' is already declared in this scope.
-//   index,
-//   ^^^^^
-// pkg/front_end/testcases/general/duplicated_declarations.dart:89:6: Context: Previous declaration of 'index' is implied by this definition.
-// enum AnotherEnum {
-//      ^^^^^^^^^^^
-//
 // pkg/front_end/testcases/general/duplicated_declarations.dart:95:3: Error: 'toString' is already declared in this scope.
 //   toString,
 //   ^^^^^^^^
@@ -306,6 +292,13 @@
 // class Sub extends C {
 //                   ^
 //
+// pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: Can't declare a member that conflicts with an inherited one.
+//   index,
+//   ^^^^^
+// sdk/lib/core/enum.dart:74:13: Context: This is the inherited member.
+//   final int index;
+//             ^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -419,16 +412,16 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Enum#4 extends core::Object implements core::Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  final field core::int* index;
-  final field core::String* _name;
+class Enum#4 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
   static const field core::List<self::Enum#4*>* values = const <self::Enum#4*>[self::Enum#4::a];
-  static const field self::Enum#4* a = const self::Enum#4::•(0, "Enum.a");
-  const constructor •(core::int* index, core::String* _name) → self::Enum#4*
-    : self::Enum#4::index = index, self::Enum#4::_name = _name, super core::Object::•()
+  static const field self::Enum#4* a = const self::Enum#4::•(0, "a");
+  const constructor •(core::int* index, core::String* name) → self::Enum#4*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Enum#4::_name}{core::String*};
+    return "Enum#4.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -439,18 +432,18 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Enum#3 extends core::Object implements core::Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  final field core::int* index;
-  final field core::String* _name;
+class Enum#3 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
   static const field core::List<self::Enum#3*>* values = const <self::Enum#3*>[self::Enum#3::a, self::Enum#3::b, self::Enum#3::c];
-  static const field self::Enum#3* a = const self::Enum#3::•(0, "Enum.a");
-  static const field self::Enum#3* b = const self::Enum#3::•(1, "Enum.b");
-  static const field self::Enum#3* c = const self::Enum#3::•(2, "Enum.c");
-  const constructor •(core::int* index, core::String* _name) → self::Enum#3*
-    : self::Enum#3::index = index, self::Enum#3::_name = _name, super core::Object::•()
+  static const field self::Enum#3* a = const self::Enum#3::•(0, "a");
+  static const field self::Enum#3* b = const self::Enum#3::•(1, "b");
+  static const field self::Enum#3* c = const self::Enum#3::•(2, "c");
+  const constructor •(core::int* index, core::String* name) → self::Enum#3*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Enum#3::_name}{core::String*};
+    return "Enum#3.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -461,18 +454,18 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Enum#2 extends core::Object implements core::Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
-  final field core::int* index;
-  final field core::String* _name;
+class Enum#2 extends core::_Enum /*isEnum*/  { // from org-dartlang-testcase:///duplicated_declarations_part.dart
   static const field core::List<self::Enum#2*>* values = const <self::Enum#2*>[self::Enum#2::Enum, self::Enum#2::a, self::Enum#2::b];
-  static const field self::Enum#2* Enum = const self::Enum#2::•(0, "Enum.Enum");
-  static const field self::Enum#2* a = const self::Enum#2::•(1, "Enum.a");
-  static const field self::Enum#2* b = const self::Enum#2::•(2, "Enum.b");
-  const constructor •(core::int* index, core::String* _name) → self::Enum#2*
-    : self::Enum#2::index = index, self::Enum#2::_name = _name, super core::Object::•()
+  static const field self::Enum#2* Enum = const self::Enum#2::•(0, "Enum");
+  static const field self::Enum#2* a = const self::Enum#2::•(1, "a");
+  static const field self::Enum#2* b = const self::Enum#2::•(2, "b");
+  const constructor •(core::int* index, core::String* name) → self::Enum#2*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Enum#2::_name}{core::String*};
+    return "Enum#2.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -483,18 +476,18 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Enum#1 extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class Enum#1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum#1*>* values = const <self::Enum#1*>[self::Enum#1::a, self::Enum#1::b, self::Enum#1::c];
-  static const field self::Enum#1* a = const self::Enum#1::•(0, "Enum.a");
-  static const field self::Enum#1* b = const self::Enum#1::•(1, "Enum.b");
-  static const field self::Enum#1* c = const self::Enum#1::•(2, "Enum.c");
-  const constructor •(core::int* index, core::String* _name) → self::Enum#1*
-    : self::Enum#1::index = index, self::Enum#1::_name = _name, super core::Object::•()
+  static const field self::Enum#1* a = const self::Enum#1::•(0, "a");
+  static const field self::Enum#1* b = const self::Enum#1::•(1, "b");
+  static const field self::Enum#1* c = const self::Enum#1::•(2, "c");
+  const constructor •(core::int* index, core::String* name) → self::Enum#1*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Enum#1::_name}{core::String*};
+    return "Enum#1.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -505,18 +498,18 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class Enum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum*>* values = const <self::Enum*>[self::Enum::Enum, self::Enum::a, self::Enum::b];
-  static const field self::Enum* Enum = const self::Enum::•(0, "Enum.Enum");
-  static const field self::Enum* a = const self::Enum::•(1, "Enum.a");
-  static const field self::Enum* b = const self::Enum::•(2, "Enum.b");
-  const constructor •(core::int* index, core::String* _name) → self::Enum*
-    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+  static const field self::Enum* Enum = const self::Enum::•(0, "Enum");
+  static const field self::Enum* a = const self::Enum::•(1, "a");
+  static const field self::Enum* b = const self::Enum::•(2, "b");
+  const constructor •(core::int* index, core::String* name) → self::Enum*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Enum::_name}{core::String*};
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -527,18 +520,19 @@
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class AnotherEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
-  static const field core::List<self::AnotherEnum*>* values = const <self::AnotherEnum*>[self::AnotherEnum::a, self::AnotherEnum::b, self::AnotherEnum::c];
-  static const field self::AnotherEnum* a = const self::AnotherEnum::•(0, "AnotherEnum.a");
-  static const field self::AnotherEnum* b = const self::AnotherEnum::•(1, "AnotherEnum.b");
-  static const field self::AnotherEnum* c = const self::AnotherEnum::•(2, "AnotherEnum.c");
-  const constructor •(core::int* index, core::String* _name) → self::AnotherEnum*
-    : self::AnotherEnum::index = index, self::AnotherEnum::_name = _name, super core::Object::•()
+class AnotherEnum extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::AnotherEnum*>* values = const <self::AnotherEnum*>[self::AnotherEnum::a, self::AnotherEnum::b, self::AnotherEnum::c, self::AnotherEnum::_name, self::AnotherEnum::index];
+  static const field self::AnotherEnum* a = const self::AnotherEnum::•(0, "a");
+  static const field self::AnotherEnum* b = const self::AnotherEnum::•(1, "b");
+  static const field self::AnotherEnum* c = const self::AnotherEnum::•(2, "c");
+  static const field self::AnotherEnum* _name = const self::AnotherEnum::•(3, "_name");
+  static const field self::AnotherEnum* index = const self::AnotherEnum::•(4, "index");
+  const constructor •(core::int* index, core::String* name) → self::AnotherEnum*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::AnotherEnum::_name}{core::String*};
+    return "AnotherEnum.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -563,26 +557,28 @@
 
 
 Extra constant evaluation status:
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations_part.dart:86:6 -> ListConstant(const <Enum#4*>[const Enum#4{Enum#4.index: 0, Enum#4._name: "Enum.a"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:87:3 -> InstanceConstant(const Enum#4{Enum#4.index: 0, Enum#4._name: "Enum.a"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations_part.dart:80:6 -> ListConstant(const <Enum#3*>[const Enum#3{Enum#3.index: 0, Enum#3._name: "Enum.a"}, const Enum#3{Enum#3.index: 1, Enum#3._name: "Enum.b"}, const Enum#3{Enum#3.index: 2, Enum#3._name: "Enum.c"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:81:3 -> InstanceConstant(const Enum#3{Enum#3.index: 0, Enum#3._name: "Enum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:82:3 -> InstanceConstant(const Enum#3{Enum#3.index: 1, Enum#3._name: "Enum.b"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:83:3 -> InstanceConstant(const Enum#3{Enum#3.index: 2, Enum#3._name: "Enum.c"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations_part.dart:73:6 -> ListConstant(const <Enum#2*>[const Enum#2{Enum#2.index: 0, Enum#2._name: "Enum.Enum"}, const Enum#2{Enum#2.index: 1, Enum#2._name: "Enum.a"}, const Enum#2{Enum#2.index: 2, Enum#2._name: "Enum.b"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:74:3 -> InstanceConstant(const Enum#2{Enum#2.index: 0, Enum#2._name: "Enum.Enum"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:75:3 -> InstanceConstant(const Enum#2{Enum#2.index: 1, Enum#2._name: "Enum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:77:3 -> InstanceConstant(const Enum#2{Enum#2.index: 2, Enum#2._name: "Enum.b"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:83:6 -> ListConstant(const <Enum#1*>[const Enum#1{Enum#1.index: 0, Enum#1._name: "Enum.a"}, const Enum#1{Enum#1.index: 1, Enum#1._name: "Enum.b"}, const Enum#1{Enum#1.index: 2, Enum#1._name: "Enum.c"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:84:3 -> InstanceConstant(const Enum#1{Enum#1.index: 0, Enum#1._name: "Enum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:85:3 -> InstanceConstant(const Enum#1{Enum#1.index: 1, Enum#1._name: "Enum.b"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:86:3 -> InstanceConstant(const Enum#1{Enum#1.index: 2, Enum#1._name: "Enum.c"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:76:6 -> ListConstant(const <Enum*>[const Enum{Enum.index: 0, Enum._name: "Enum.Enum"}, const Enum{Enum.index: 1, Enum._name: "Enum.a"}, const Enum{Enum.index: 2, Enum._name: "Enum.b"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:77:3 -> InstanceConstant(const Enum{Enum.index: 0, Enum._name: "Enum.Enum"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:78:3 -> InstanceConstant(const Enum{Enum.index: 1, Enum._name: "Enum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:80:3 -> InstanceConstant(const Enum{Enum.index: 2, Enum._name: "Enum.b"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:89:6 -> ListConstant(const <AnotherEnum*>[const AnotherEnum{AnotherEnum.index: 0, AnotherEnum._name: "AnotherEnum.a"}, const AnotherEnum{AnotherEnum.index: 1, AnotherEnum._name: "AnotherEnum.b"}, const AnotherEnum{AnotherEnum.index: 2, AnotherEnum._name: "AnotherEnum.c"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:90:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 0, AnotherEnum._name: "AnotherEnum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:91:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 1, AnotherEnum._name: "AnotherEnum.b"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:92:3 -> InstanceConstant(const AnotherEnum{AnotherEnum.index: 2, AnotherEnum._name: "AnotherEnum.c"})
-Extra constant evaluation: evaluated: 46, effectively constant: 22
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations_part.dart:86:6 -> ListConstant(const <Enum#4*>[const Enum#4{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:87:3 -> InstanceConstant(const Enum#4{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations_part.dart:80:6 -> ListConstant(const <Enum#3*>[const Enum#3{_Enum.index: 0, _Enum._name: "a"}, const Enum#3{_Enum.index: 1, _Enum._name: "b"}, const Enum#3{_Enum.index: 2, _Enum._name: "c"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:81:3 -> InstanceConstant(const Enum#3{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:82:3 -> InstanceConstant(const Enum#3{_Enum.index: 1, _Enum._name: "b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:83:3 -> InstanceConstant(const Enum#3{_Enum.index: 2, _Enum._name: "c"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations_part.dart:73:6 -> ListConstant(const <Enum#2*>[const Enum#2{_Enum.index: 0, _Enum._name: "Enum"}, const Enum#2{_Enum.index: 1, _Enum._name: "a"}, const Enum#2{_Enum.index: 2, _Enum._name: "b"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:74:3 -> InstanceConstant(const Enum#2{_Enum.index: 0, _Enum._name: "Enum"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:75:3 -> InstanceConstant(const Enum#2{_Enum.index: 1, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations_part.dart:77:3 -> InstanceConstant(const Enum#2{_Enum.index: 2, _Enum._name: "b"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:83:6 -> ListConstant(const <Enum#1*>[const Enum#1{_Enum.index: 0, _Enum._name: "a"}, const Enum#1{_Enum.index: 1, _Enum._name: "b"}, const Enum#1{_Enum.index: 2, _Enum._name: "c"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:84:3 -> InstanceConstant(const Enum#1{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:85:3 -> InstanceConstant(const Enum#1{_Enum.index: 1, _Enum._name: "b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:86:3 -> InstanceConstant(const Enum#1{_Enum.index: 2, _Enum._name: "c"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:76:6 -> ListConstant(const <Enum*>[const Enum{_Enum.index: 0, _Enum._name: "Enum"}, const Enum{_Enum.index: 1, _Enum._name: "a"}, const Enum{_Enum.index: 2, _Enum._name: "b"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:77:3 -> InstanceConstant(const Enum{_Enum.index: 0, _Enum._name: "Enum"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:78:3 -> InstanceConstant(const Enum{_Enum.index: 1, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:80:3 -> InstanceConstant(const Enum{_Enum.index: 2, _Enum._name: "b"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///duplicated_declarations.dart:89:6 -> ListConstant(const <AnotherEnum*>[const AnotherEnum{_Enum.index: 0, _Enum._name: "a"}, const AnotherEnum{_Enum.index: 1, _Enum._name: "b"}, const AnotherEnum{_Enum.index: 2, _Enum._name: "c"}, const AnotherEnum{_Enum.index: 3, _Enum._name: "_name"}, const AnotherEnum{_Enum.index: 4, _Enum._name: "index"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:90:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:91:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 1, _Enum._name: "b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:92:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 2, _Enum._name: "c"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:93:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 3, _Enum._name: "_name"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///duplicated_declarations.dart:94:3 -> InstanceConstant(const AnotherEnum{_Enum.index: 4, _Enum._name: "index"})
+Extra constant evaluation: evaluated: 54, effectively constant: 24
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.expect
index 085bed3..5cfbd7c 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class TestMixin<R extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(generic-covariant-impl asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* async {
+  method test(covariant-by-class asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* async {
     final self::TestMixin::R* response = await fetch;
     self::TestMixin::T* result;
     if(response is self::Response<dynamic>*) {
@@ -86,7 +86,7 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin*
     : super core::Object::•()
     ;
-  mixin-super-stub method test(generic-covariant-impl asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>*
+  mixin-super-stub method test(covariant-by-class asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>*
     return super.{self::TestMixin::test}(fetch);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -112,7 +112,7 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin*
     : super core::Object::•()
     ;
-  mixin-super-stub method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>*
+  mixin-super-stub method test(covariant-by-class asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>*
     return super.{self::TestMixin::test}(fetch);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.outline.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.outline.expect
index 098d875..87aedc7 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.outline.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class TestMixin<R extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(generic-covariant-impl asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* async 
+  method test(covariant-by-class asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* async 
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -66,7 +66,7 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin*
     : super core::Object::•()
     ;
-  mixin-super-stub method test(generic-covariant-impl asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>*
+  mixin-super-stub method test(covariant-by-class asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>*
     return super.{self::TestMixin::test}(fetch);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -89,7 +89,7 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin*
     : super core::Object::•()
     ;
-  mixin-super-stub method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>*
+  mixin-super-stub method test(covariant-by-class asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>*
     return super.{self::TestMixin::test}(fetch);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
index c0bd1b7..cae05ae 100644
--- a/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/flutter_issue64155.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 import "dart:_internal" as _in;
 
 abstract class TestMixin<R extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(generic-covariant-impl asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* /* originally async */ {
+  method test(covariant-by-class asy::Future<self::TestMixin::R*>* fetch) → asy::Future<self::TestMixin::T*>* /* originally async */ {
     final asy::_Future<self::TestMixin::T*>* :async_future = new asy::_Future::•<self::TestMixin::T*>();
     core::bool* :is_sync = false;
     FutureOr<self::TestMixin::T*>* :return_value;
@@ -113,7 +113,7 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin*
     : super core::Object::•()
     ;
-  method test(generic-covariant-impl asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>* /* originally async */ {
+  method test(covariant-by-class asy::Future<self::Response<core::String*>*>* fetch) → asy::Future<core::String*>* /* originally async */ {
     final asy::_Future<core::String*>* :async_future = new asy::_Future::•<core::String*>();
     core::bool* :is_sync = false;
     FutureOr<core::String*>* :return_value;
@@ -182,7 +182,7 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin*
     : super core::Object::•()
     ;
-  method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>* /* originally async */ {
+  method test(covariant-by-class asy::Future<self::PagingResponse<core::String*>*>* fetch) → asy::Future<core::String*>* /* originally async */ {
     final asy::_Future<core::String*>* :async_future = new asy::_Future::•<core::String*>();
     core::bool* :is_sync = false;
     FutureOr<core::String*>* :return_value;
diff --git a/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.expect b/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.expect
index 13b9d4e..a80aab5 100644
--- a/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.expect
@@ -19,7 +19,7 @@
   synthetic constructor •() → mai::DynamicDispatchRegistry<mai::DynamicDispatchRegistry::T*>*
     : super core::Object::•()
     ;
-  method register(generic-covariant-impl mai::DynamicDispatchRegistry::T* function) → mai::DynamicDispatchRegistry::T*
+  method register(covariant-by-class mai::DynamicDispatchRegistry::T* function) → mai::DynamicDispatchRegistry::T*
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.outline.expect
index 63c1b76..4049152 100644
--- a/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.outline.expect
@@ -13,7 +13,7 @@
 class DynamicDispatchRegistry<T extends core::Function*> extends core::Object {
   synthetic constructor •() → self2::DynamicDispatchRegistry<self2::DynamicDispatchRegistry::T*>*
     ;
-  method register(generic-covariant-impl self2::DynamicDispatchRegistry::T* function) → self2::DynamicDispatchRegistry::T*
+  method register(covariant-by-class self2::DynamicDispatchRegistry::T* function) → self2::DynamicDispatchRegistry::T*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.transformed.expect
index 13b9d4e..a80aab5 100644
--- a/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/flutter_issue68092/main.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
   synthetic constructor •() → mai::DynamicDispatchRegistry<mai::DynamicDispatchRegistry::T*>*
     : super core::Object::•()
     ;
-  method register(generic-covariant-impl mai::DynamicDispatchRegistry::T* function) → mai::DynamicDispatchRegistry::T*
+  method register(covariant-by-class mai::DynamicDispatchRegistry::T* function) → mai::DynamicDispatchRegistry::T*
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.expect
index 48d2f30..04d5bc5 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.expect
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
-  operator +(covariant core::int* a) → dynamic
+  operator +(covariant-by-declaration core::int* a) → dynamic
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -50,7 +50,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub operator +(covariant dynamic b) → dynamic;
+  abstract forwarding-stub operator +(covariant-by-declaration dynamic b) → dynamic;
 }
 class D extends core::Object {
   synthetic constructor •() → self::D*
@@ -73,7 +73,7 @@
   synthetic constructor •() → self::E*
     : super self::D::•()
     ;
-  forwarding-stub forwarding-semi-stub operator +(covariant core::int* e) → dynamic
+  forwarding-stub forwarding-semi-stub operator +(covariant-by-declaration core::int* e) → dynamic
     return super.{self::D::+}(e);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.outline.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.outline.expect
index 1e2bb90..b2f74cc 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   synthetic constructor •() → self::A*
     ;
-  operator +(covariant core::int* a) → dynamic
+  operator +(covariant-by-declaration core::int* a) → dynamic
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -47,7 +47,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub operator +(covariant dynamic b) → dynamic;
+  abstract forwarding-stub operator +(covariant-by-declaration dynamic b) → dynamic;
 }
 class D extends core::Object {
   synthetic constructor •() → self::D*
@@ -68,7 +68,7 @@
 class E extends self::D {
   synthetic constructor •() → self::E*
     ;
-  forwarding-stub forwarding-semi-stub operator +(covariant core::int* e) → dynamic
+  forwarding-stub forwarding-semi-stub operator +(covariant-by-declaration core::int* e) → dynamic
     return super.{self::D::+}(e);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.transformed.expect b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.transformed.expect
index 48d2f30..04d5bc5 100644
--- a/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/forwarding_stub_for_operator.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
-  operator +(covariant core::int* a) → dynamic
+  operator +(covariant-by-declaration core::int* a) → dynamic
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -50,7 +50,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub operator +(covariant dynamic b) → dynamic;
+  abstract forwarding-stub operator +(covariant-by-declaration dynamic b) → dynamic;
 }
 class D extends core::Object {
   synthetic constructor •() → self::D*
@@ -73,7 +73,7 @@
   synthetic constructor •() → self::E*
     : super self::D::•()
     ;
-  forwarding-stub forwarding-semi-stub operator +(covariant core::int* e) → dynamic
+  forwarding-stub forwarding-semi-stub operator +(covariant-by-declaration core::int* e) → dynamic
     return super.{self::D::+}(e);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.expect b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.expect
index 1208d2b..e38d7f0 100644
--- a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.expect
@@ -167,7 +167,7 @@
 abstract class A extends core::Object {
   field core::int* property4 = null;
   field core::int* property5 = null;
-  covariant field core::String* property6 = null;
+  covariant-by-declaration field core::String* property6 = null;
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.outline.expect
index a903f97..360523b 100644
--- a/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/getter_vs_setter_type.dart.weak.outline.expect
@@ -155,7 +155,7 @@
 abstract class A extends core::Object {
   field core::int* property4;
   field core::int* property5;
-  covariant field core::String* property6;
+  covariant-by-declaration field core::String* property6;
   synthetic constructor •() → self::A*
     ;
   abstract get property1() → core::int*;
diff --git a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.expect b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.expect
index a8b24bc..3fd3297 100644
--- a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.expect
+++ b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
-  abstract method foo(generic-covariant-impl self::A::T* x) → dynamic;
+  abstract method foo(covariant-by-class self::A::T* x) → dynamic;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -53,7 +53,7 @@
   synthetic constructor •() → self::_D&C&B<self::_D&C&B::T*>*
     : super self::C::•()
     ;
-  forwarding-stub method foo(generic-covariant-impl core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
     return super.{self::C::foo}(x);
 }
 class D<T extends core::num*> extends self::_D&C&B<self::D::T*> {
@@ -65,7 +65,7 @@
   synthetic constructor •() → self::E<self::E::T*>*
     : super self::C::•()
     ;
-  forwarding-stub method foo(generic-covariant-impl core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
     return super.{self::C::foo}(x);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.outline.expect b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.outline.expect
index 63349f7..19af3b7 100644
--- a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
-  abstract method foo(generic-covariant-impl self::A::T* x) → dynamic;
+  abstract method foo(covariant-by-class self::A::T* x) → dynamic;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -51,7 +51,7 @@
   synthetic constructor •() → self::_D&C&B<self::_D&C&B::T*>*
     : super self::C::•()
     ;
-  forwarding-stub method foo(generic-covariant-impl core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
     return super.{self::C::foo}(x);
 }
 class D<T extends core::num*> extends self::_D&C&B<self::D::T*> {
@@ -62,7 +62,7 @@
   synthetic constructor •() → self::E<self::E::T*>*
     : super self::C::•()
     ;
-  forwarding-stub method foo(generic-covariant-impl core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
     return super.{self::C::foo}(x);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.transformed.expect b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.transformed.expect
index c1432a4..0d94a2c 100644
--- a/pkg/front_end/testcases/general/implicit_covariance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/implicit_covariance.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
-  abstract method foo(generic-covariant-impl self::A::T* x) → dynamic;
+  abstract method foo(covariant-by-class self::A::T* x) → dynamic;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -53,7 +53,7 @@
   synthetic constructor •() → self::_D&C&B<self::_D&C&B::T*>*
     : super self::C::•()
     ;
-  forwarding-stub method foo(generic-covariant-impl core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
     return super.{self::C::foo}(x);
 }
 class D<T extends core::num*> extends self::_D&C&B<self::D::T*> {
@@ -65,7 +65,7 @@
   synthetic constructor •() → self::E<self::E::T*>*
     : super self::C::•()
     ;
-  forwarding-stub method foo(generic-covariant-impl core::num* x) → dynamic
+  forwarding-stub method foo(covariant-by-class core::num* x) → dynamic
     return super.{self::C::foo}(x);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.expect b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.expect
index 475cdb3..4796a9b 100644
--- a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.expect
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.expect
@@ -173,11 +173,11 @@
   field core::int* field7 = null;
   field core::int* field8 = null;
   field dynamic field9 = null;
-  generic-covariant-impl field self::A::T* field10 = null;
-  generic-covariant-impl field self::A::T* field11 = null;
-  generic-covariant-impl field self::A::T* field12 = null;
-  generic-covariant-impl field self::A::T* field13 = null;
-  generic-covariant-impl field self::A::T* field14 = null;
+  covariant-by-class field self::A::T* field10 = null;
+  covariant-by-class field self::A::T* field11 = null;
+  covariant-by-class field self::A::T* field12 = null;
+  covariant-by-class field self::A::T* field13 = null;
+  covariant-by-class field self::A::T* field14 = null;
   field core::int* field15 = 0;
   field core::int* field16 = null;
   field core::int* field17 = 0;
@@ -206,11 +206,11 @@
   field core::int* field7 = null;
   field core::String* field8 = null;
   field dynamic field9 = null;
-  generic-covariant-impl field self::B::T* field10 = null;
-  generic-covariant-impl field self::B::S* field11 = null;
-  generic-covariant-impl field self::B::T* field12 = null;
-  generic-covariant-impl field self::B::T* field13 = null;
-  generic-covariant-impl field self::B::S* field14 = null;
+  covariant-by-class field self::B::T* field10 = null;
+  covariant-by-class field self::B::S* field11 = null;
+  covariant-by-class field self::B::T* field12 = null;
+  covariant-by-class field self::B::T* field13 = null;
+  covariant-by-class field self::B::S* field14 = null;
   field core::int* field15 = null;
   field core::int* field16 = 0;
   field core::String* field17 = null;
@@ -239,11 +239,11 @@
   field core::int* field7 = 0;
   field invalid-type field8 = 0;
   field dynamic field9;
-  generic-covariant-impl field core::int* field10;
-  generic-covariant-impl field invalid-type field11;
-  generic-covariant-impl field core::int* field12;
-  generic-covariant-impl field core::int* field13 = 0;
-  generic-covariant-impl field core::int* field14;
+  covariant-by-class field core::int* field10;
+  covariant-by-class field invalid-type field11;
+  covariant-by-class field core::int* field12;
+  covariant-by-class field core::int* field13 = 0;
+  covariant-by-class field core::int* field14;
   field core::int* field15;
   field core::int* field16;
   field invalid-type field17;
@@ -272,11 +272,11 @@
   field core::int* field7 = 0;
   field invalid-type field8 = 0;
   field dynamic field9;
-  generic-covariant-impl field self::D::T* field10;
-  generic-covariant-impl field self::D::T* field11;
-  generic-covariant-impl field self::D::T* field12;
-  generic-covariant-impl field self::D::T* field13 = null;
-  generic-covariant-impl field self::D::T* field14;
+  covariant-by-class field self::D::T* field10;
+  covariant-by-class field self::D::T* field11;
+  covariant-by-class field self::D::T* field12;
+  covariant-by-class field self::D::T* field13 = null;
+  covariant-by-class field self::D::T* field14;
   field core::int* field15;
   field core::int* field16;
   field invalid-type field17;
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.outline.expect b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.outline.expect
index bd4c14f..e59bd1f 100644
--- a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.weak.outline.expect
@@ -173,11 +173,11 @@
   field core::int* field7;
   field core::int* field8;
   field dynamic field9;
-  generic-covariant-impl field self::A::T* field10;
-  generic-covariant-impl field self::A::T* field11;
-  generic-covariant-impl field self::A::T* field12;
-  generic-covariant-impl field self::A::T* field13;
-  generic-covariant-impl field self::A::T* field14;
+  covariant-by-class field self::A::T* field10;
+  covariant-by-class field self::A::T* field11;
+  covariant-by-class field self::A::T* field12;
+  covariant-by-class field self::A::T* field13;
+  covariant-by-class field self::A::T* field14;
   field core::int* field15;
   field core::int* field16;
   field core::int* field17;
@@ -205,11 +205,11 @@
   field core::int* field7;
   field core::String* field8;
   field dynamic field9;
-  generic-covariant-impl field self::B::T* field10;
-  generic-covariant-impl field self::B::S* field11;
-  generic-covariant-impl field self::B::T* field12;
-  generic-covariant-impl field self::B::T* field13;
-  generic-covariant-impl field self::B::S* field14;
+  covariant-by-class field self::B::T* field10;
+  covariant-by-class field self::B::S* field11;
+  covariant-by-class field self::B::T* field12;
+  covariant-by-class field self::B::T* field13;
+  covariant-by-class field self::B::S* field14;
   field core::int* field15;
   field core::int* field16;
   field core::String* field17;
@@ -237,11 +237,11 @@
   field core::int* field7;
   field invalid-type field8;
   field dynamic field9;
-  generic-covariant-impl field core::int* field10;
-  generic-covariant-impl field invalid-type field11;
-  generic-covariant-impl field core::int* field12;
-  generic-covariant-impl field core::int* field13;
-  generic-covariant-impl field core::int* field14;
+  covariant-by-class field core::int* field10;
+  covariant-by-class field invalid-type field11;
+  covariant-by-class field core::int* field12;
+  covariant-by-class field core::int* field13;
+  covariant-by-class field core::int* field14;
   field core::int* field15;
   field core::int* field16;
   field invalid-type field17;
@@ -269,11 +269,11 @@
   field core::int* field7;
   field invalid-type field8;
   field dynamic field9;
-  generic-covariant-impl field self::D::T* field10;
-  generic-covariant-impl field self::D::T* field11;
-  generic-covariant-impl field self::D::T* field12;
-  generic-covariant-impl field self::D::T* field13;
-  generic-covariant-impl field self::D::T* field14;
+  covariant-by-class field self::D::T* field10;
+  covariant-by-class field self::D::T* field11;
+  covariant-by-class field self::D::T* field12;
+  covariant-by-class field self::D::T* field13;
+  covariant-by-class field self::D::T* field14;
   field core::int* field15;
   field core::int* field16;
   field invalid-type field17;
diff --git a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.expect b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.expect
index 14a0d6d..68f6ac0 100644
--- a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.expect
+++ b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.expect
@@ -26,7 +26,7 @@
   synthetic constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::A::T* x, core::int* y) → void;
+  abstract method f(covariant-by-class self::A::T* x, core::int* y) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.outline.expect b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.outline.expect
index cef92db..014249d 100644
--- a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.outline.expect
@@ -25,7 +25,7 @@
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
-  abstract method f(generic-covariant-impl self::A::T* x, core::int* y) → void;
+  abstract method f(covariant-by-class self::A::T* x, core::int* y) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.transformed.expect b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.transformed.expect
index 14a0d6d..68f6ac0 100644
--- a/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/interface_covariantInterface_from_class.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
   synthetic constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::A::T* x, core::int* y) → void;
+  abstract method f(covariant-by-class self::A::T* x, core::int* y) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue129167943.dart.weak.expect b/pkg/front_end/testcases/general/issue129167943.dart.weak.expect
index a21207c..dbcaed7 100644
--- a/pkg/front_end/testcases/general/issue129167943.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue129167943.dart.weak.expect
@@ -37,7 +37,7 @@
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
-  abstract method foo(covariant core::int* x) → void;
+  abstract method foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -53,7 +53,7 @@
   synthetic constructor •() → self::D1*
     : super core::Object::•()
     ;
-  abstract method foo(covariant core::int* x) → void;
+  abstract method foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -69,7 +69,7 @@
   synthetic constructor •() → self::D2*
     : super core::Object::•()
     ;
-  method foo(covariant core::int* x) → void {}
+  method foo(covariant-by-declaration core::int* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -95,13 +95,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method foo(covariant core::num* x) → void;
+  abstract forwarding-stub method foo(covariant-by-declaration core::num* x) → void;
 }
 abstract class D4 extends core::Object implements self::A, self::C, self::B {
   synthetic constructor •() → self::D4*
     : super core::Object::•()
     ;
-  abstract method foo(covariant core::int* x) → void;
+  abstract method foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -117,7 +117,7 @@
   synthetic constructor •() → self::D5*
     : super core::Object::•()
     ;
-  abstract method foo(covariant core::num* x) → void;
+  abstract method foo(covariant-by-declaration core::num* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -149,7 +149,7 @@
   synthetic constructor •() → self::G*
     : super core::Object::•()
     ;
-  abstract set foo(covariant core::int* x) → void;
+  abstract set foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -165,7 +165,7 @@
   synthetic constructor •() → self::H1*
     : super core::Object::•()
     ;
-  abstract set foo(covariant core::int* x) → void;
+  abstract set foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -181,7 +181,7 @@
   synthetic constructor •() → self::H2*
     : super core::Object::•()
     ;
-  set foo(covariant core::int* x) → void {}
+  set foo(covariant-by-declaration core::int* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -207,13 +207,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub set foo(covariant core::num* x) → void;
+  abstract forwarding-stub set foo(covariant-by-declaration core::num* x) → void;
 }
 abstract class H4 extends core::Object implements self::A, self::E, self::G {
   synthetic constructor •() → self::H4*
     : super core::Object::•()
     ;
-  abstract set foo(covariant core::int* x) → void;
+  abstract set foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -229,7 +229,7 @@
   synthetic constructor •() → self::H5*
     : super core::Object::•()
     ;
-  abstract set foo(covariant core::num* x) → void;
+  abstract set foo(covariant-by-declaration core::num* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue129167943.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue129167943.dart.weak.outline.expect
index 4a3fad8..6d18c9a 100644
--- a/pkg/front_end/testcases/general/issue129167943.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue129167943.dart.weak.outline.expect
@@ -34,7 +34,7 @@
 abstract class C extends core::Object implements self::B {
   synthetic constructor •() → self::C*
     ;
-  abstract method foo(covariant core::int* x) → void;
+  abstract method foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -49,7 +49,7 @@
 abstract class D1 extends core::Object implements self::A, self::C, self::B {
   synthetic constructor •() → self::D1*
     ;
-  abstract method foo(covariant core::int* x) → void;
+  abstract method foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -64,7 +64,7 @@
 class D2 extends core::Object implements self::A, self::C, self::B {
   synthetic constructor •() → self::D2*
     ;
-  method foo(covariant core::int* x) → void
+  method foo(covariant-by-declaration core::int* x) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -90,12 +90,12 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method foo(covariant core::num* x) → void;
+  abstract forwarding-stub method foo(covariant-by-declaration core::num* x) → void;
 }
 abstract class D4 extends core::Object implements self::A, self::C, self::B {
   synthetic constructor •() → self::D4*
     ;
-  abstract method foo(covariant core::int* x) → void;
+  abstract method foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -110,7 +110,7 @@
 abstract class D5 extends core::Object implements self::A, self::C, self::B {
   synthetic constructor •() → self::D5*
     ;
-  abstract method foo(covariant core::num* x) → void;
+  abstract method foo(covariant-by-declaration core::num* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -140,7 +140,7 @@
 abstract class G extends core::Object implements self::E {
   synthetic constructor •() → self::G*
     ;
-  abstract set foo(covariant core::int* x) → void;
+  abstract set foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -155,7 +155,7 @@
 abstract class H1 extends core::Object implements self::A, self::E, self::G {
   synthetic constructor •() → self::H1*
     ;
-  abstract set foo(covariant core::int* x) → void;
+  abstract set foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -170,7 +170,7 @@
 class H2 extends core::Object implements self::A, self::E, self::G {
   synthetic constructor •() → self::H2*
     ;
-  set foo(covariant core::int* x) → void
+  set foo(covariant-by-declaration core::int* x) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -196,12 +196,12 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub set foo(covariant core::num* x) → void;
+  abstract forwarding-stub set foo(covariant-by-declaration core::num* x) → void;
 }
 abstract class H4 extends core::Object implements self::A, self::E, self::G {
   synthetic constructor •() → self::H4*
     ;
-  abstract set foo(covariant core::int* x) → void;
+  abstract set foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -216,7 +216,7 @@
 abstract class H5 extends core::Object implements self::A, self::E, self::G {
   synthetic constructor •() → self::H5*
     ;
-  abstract set foo(covariant core::num* x) → void;
+  abstract set foo(covariant-by-declaration core::num* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue129167943.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue129167943.dart.weak.transformed.expect
index a21207c..dbcaed7 100644
--- a/pkg/front_end/testcases/general/issue129167943.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue129167943.dart.weak.transformed.expect
@@ -37,7 +37,7 @@
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
-  abstract method foo(covariant core::int* x) → void;
+  abstract method foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -53,7 +53,7 @@
   synthetic constructor •() → self::D1*
     : super core::Object::•()
     ;
-  abstract method foo(covariant core::int* x) → void;
+  abstract method foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -69,7 +69,7 @@
   synthetic constructor •() → self::D2*
     : super core::Object::•()
     ;
-  method foo(covariant core::int* x) → void {}
+  method foo(covariant-by-declaration core::int* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -95,13 +95,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method foo(covariant core::num* x) → void;
+  abstract forwarding-stub method foo(covariant-by-declaration core::num* x) → void;
 }
 abstract class D4 extends core::Object implements self::A, self::C, self::B {
   synthetic constructor •() → self::D4*
     : super core::Object::•()
     ;
-  abstract method foo(covariant core::int* x) → void;
+  abstract method foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -117,7 +117,7 @@
   synthetic constructor •() → self::D5*
     : super core::Object::•()
     ;
-  abstract method foo(covariant core::num* x) → void;
+  abstract method foo(covariant-by-declaration core::num* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -149,7 +149,7 @@
   synthetic constructor •() → self::G*
     : super core::Object::•()
     ;
-  abstract set foo(covariant core::int* x) → void;
+  abstract set foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -165,7 +165,7 @@
   synthetic constructor •() → self::H1*
     : super core::Object::•()
     ;
-  abstract set foo(covariant core::int* x) → void;
+  abstract set foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -181,7 +181,7 @@
   synthetic constructor •() → self::H2*
     : super core::Object::•()
     ;
-  set foo(covariant core::int* x) → void {}
+  set foo(covariant-by-declaration core::int* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -207,13 +207,13 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub set foo(covariant core::num* x) → void;
+  abstract forwarding-stub set foo(covariant-by-declaration core::num* x) → void;
 }
 abstract class H4 extends core::Object implements self::A, self::E, self::G {
   synthetic constructor •() → self::H4*
     : super core::Object::•()
     ;
-  abstract set foo(covariant core::int* x) → void;
+  abstract set foo(covariant-by-declaration core::int* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -229,7 +229,7 @@
   synthetic constructor •() → self::H5*
     : super core::Object::•()
     ;
-  abstract set foo(covariant core::num* x) → void;
+  abstract set foo(covariant-by-declaration core::num* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue34899.dart.weak.expect b/pkg/front_end/testcases/general/issue34899.dart.weak.expect
index 0d6c4cf..c1735e3 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.weak.expect
@@ -5,7 +5,7 @@
 
 class Foo<T extends core::Object* = dynamic> extends core::Object {
   final field () →* asy::Future<dynamic>* quux;
-  generic-covariant-impl field self::Foo::T* t;
+  covariant-by-class field self::Foo::T* t;
   constructor •(() →* asy::Future<dynamic>* quux, self::Foo::T* t) → self::Foo<self::Foo::T*>*
     : self::Foo::quux = quux, self::Foo::t = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/issue34899.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue34899.dart.weak.outline.expect
index ada0c39..d15bcb7 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 
 class Foo<T extends core::Object* = dynamic> extends core::Object {
   final field () →* asy::Future<dynamic>* quux;
-  generic-covariant-impl field self::Foo::T* t;
+  covariant-by-class field self::Foo::T* t;
   constructor •(() →* asy::Future<dynamic>* quux, self::Foo::T* t) → self::Foo<self::Foo::T*>*
     ;
   method call() → asy::Future<self::Foo::T*>*
diff --git a/pkg/front_end/testcases/general/issue34899.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue34899.dart.weak.transformed.expect
index 0d6c4cf..c1735e3 100644
--- a/pkg/front_end/testcases/general/issue34899.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue34899.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 
 class Foo<T extends core::Object* = dynamic> extends core::Object {
   final field () →* asy::Future<dynamic>* quux;
-  generic-covariant-impl field self::Foo::T* t;
+  covariant-by-class field self::Foo::T* t;
   constructor •(() →* asy::Future<dynamic>* quux, self::Foo::T* t) → self::Foo<self::Foo::T*>*
     : self::Foo::quux = quux, self::Foo::t = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/issue39344.dart.weak.expect b/pkg/front_end/testcases/general/issue39344.dart.weak.expect
index 1c006fb..fd2787d 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.weak.expect
@@ -41,7 +41,7 @@
   synthetic constructor •() → self::Class<self::Class::T*>*
     : super core::Object::•()
     ;
-  method method1a(generic-covariant-impl self::Class::T* t) → void {
+  method method1a(covariant-by-class self::Class::T* t) → void {
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
       self::xs = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:19:12: Error: A value of type 'List<T>' can't be assigned to a variable of type 'List<B>'.
@@ -51,7 +51,7 @@
            ^" in ys as{TypeError} core::List<self::B*>*;
     }
   }
-  method method1b(generic-covariant-impl self::Class::T* t) → void {
+  method method1b(covariant-by-class self::Class::T* t) → void {
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
       self::xss = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:31:13: Error: A value of type 'List<List<T>>' can't be assigned to a variable of type 'List<List<B>>'.
@@ -61,7 +61,7 @@
             ^" in yss as{TypeError} core::List<core::List<self::B*>*>*;
     }
   }
-  method method2a(generic-covariant-impl self::Class::T* t) → void {
+  method method2a(covariant-by-class self::Class::T* t) → void {
     dynamic alias;
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = <self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}];
@@ -69,7 +69,7 @@
       self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
-  method method2b(generic-covariant-impl self::Class::T* t) → void {
+  method method2b(covariant-by-class self::Class::T* t) → void {
     dynamic alias;
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = <core::List<self::Class::T*>*>[<self::Class::T*>[t{self::Class::T* & self::B* /* '*' & '*' = '*' */}]];
diff --git a/pkg/front_end/testcases/general/issue39344.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue39344.dart.weak.outline.expect
index 03e1065..49bc2e6 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.weak.outline.expect
@@ -23,13 +23,13 @@
 class Class<T extends self::A*> extends core::Object {
   synthetic constructor •() → self::Class<self::Class::T*>*
     ;
-  method method1a(generic-covariant-impl self::Class::T* t) → void
+  method method1a(covariant-by-class self::Class::T* t) → void
     ;
-  method method1b(generic-covariant-impl self::Class::T* t) → void
+  method method1b(covariant-by-class self::Class::T* t) → void
     ;
-  method method2a(generic-covariant-impl self::Class::T* t) → void
+  method method2a(covariant-by-class self::Class::T* t) → void
     ;
-  method method2b(generic-covariant-impl self::Class::T* t) → void
+  method method2b(covariant-by-class self::Class::T* t) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect
index eecd076..0e2b847 100644
--- a/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue39344.dart.weak.transformed.expect
@@ -41,7 +41,7 @@
   synthetic constructor •() → self::Class<self::Class::T*>*
     : super core::Object::•()
     ;
-  method method1a(generic-covariant-impl self::Class::T* t) → void {
+  method method1a(covariant-by-class self::Class::T* t) → void {
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = core::_GrowableList::_literal1<self::Class::T*>(t{self::Class::T* & self::B* /* '*' & '*' = '*' */});
       self::xs = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:19:12: Error: A value of type 'List<T>' can't be assigned to a variable of type 'List<B>'.
@@ -51,7 +51,7 @@
            ^" in ys as{TypeError} core::List<self::B*>*;
     }
   }
-  method method1b(generic-covariant-impl self::Class::T* t) → void {
+  method method1b(covariant-by-class self::Class::T* t) → void {
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = core::_GrowableList::_literal1<core::List<self::Class::T*>*>(core::_GrowableList::_literal1<self::Class::T*>(t{self::Class::T* & self::B* /* '*' & '*' = '*' */}));
       self::xss = invalid-expression "pkg/front_end/testcases/general/issue39344.dart:31:13: Error: A value of type 'List<List<T>>' can't be assigned to a variable of type 'List<List<B>>'.
@@ -61,7 +61,7 @@
             ^" in yss as{TypeError} core::List<core::List<self::B*>*>*;
     }
   }
-  method method2a(generic-covariant-impl self::Class::T* t) → void {
+  method method2a(covariant-by-class self::Class::T* t) → void {
     dynamic alias;
     if(t is self::B*) {
       core::List<self::Class::T*>* ys = core::_GrowableList::_literal1<self::Class::T*>(t{self::Class::T* & self::B* /* '*' & '*' = '*' */});
@@ -69,7 +69,7 @@
       self::xs = alias as{TypeError,ForDynamic} core::List<self::B*>*;
     }
   }
-  method method2b(generic-covariant-impl self::Class::T* t) → void {
+  method method2b(covariant-by-class self::Class::T* t) → void {
     dynamic alias;
     if(t is self::B*) {
       core::List<core::List<self::Class::T*>*>* yss = core::_GrowableList::_literal1<core::List<self::Class::T*>*>(core::_GrowableList::_literal1<self::Class::T*>(t{self::Class::T* & self::B* /* '*' & '*' = '*' */}));
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.weak.expect b/pkg/front_end/testcases/general/issue41210a.dart.weak.expect
index b5abffb..f270273 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.weak.expect
@@ -35,7 +35,7 @@
   synthetic constructor •() → self::Interface2*
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -109,7 +109,7 @@
   synthetic constructor •() → self::D*
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -142,7 +142,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
diff --git a/pkg/front_end/testcases/general/issue41210a.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41210a.dart.weak.outline.expect
index 406be0d..3333d00 100644
--- a/pkg/front_end/testcases/general/issue41210a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210a.dart.weak.outline.expect
@@ -33,7 +33,7 @@
 abstract class Interface2 extends core::Object {
   synthetic constructor •() → self::Interface2*
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -104,7 +104,7 @@
 abstract class D extends core::Object implements self::Interface, self::Interface2 {
   synthetic constructor •() → self::D*
     ;
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -137,7 +137,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
diff --git a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.expect b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.expect
index 34d1b47..daf4b8e 100644
--- a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::Interface2*
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -68,7 +68,7 @@
   synthetic constructor •() → self::D*
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -101,7 +101,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
diff --git a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.outline.expect
index babe287..0a5819f 100644
--- a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.outline.expect
@@ -20,7 +20,7 @@
 abstract class Interface2 extends core::Object {
   synthetic constructor •() → self::Interface2*
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -64,7 +64,7 @@
 abstract class D extends core::Object implements self::Interface, self::Interface2 {
   synthetic constructor •() → self::D*
     ;
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -97,7 +97,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
diff --git a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.transformed.expect
index bb1ef4a..9d9b4f1 100644
--- a/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue41210a_no_error.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::Interface2*
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -68,7 +68,7 @@
   synthetic constructor •() → self::D*
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -101,7 +101,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.expect
index b2f0c55..bb04fa2 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.expect
@@ -67,7 +67,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
@@ -130,7 +130,7 @@
   synthetic constructor •() → iss::Interface2*
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -186,7 +186,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
 }
 abstract class F extends core::Object implements iss::Interface {
   synthetic constructor •() → iss::F*
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.outline.expect
index 5c63262..3657882 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.dart.weak.outline.expect
@@ -66,7 +66,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
@@ -124,7 +124,7 @@
 abstract class Interface2 extends core::Object {
   synthetic constructor •() → iss::Interface2*
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -178,7 +178,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
 }
 abstract class F extends core::Object implements iss::Interface {
   synthetic constructor •() → iss::F*
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.expect
index 1692897..038d724 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.expect
@@ -67,7 +67,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
@@ -130,7 +130,7 @@
   synthetic constructor •() → iss::Interface2*
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -176,7 +176,7 @@
   synthetic constructor •() → iss::D*
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.outline.expect
index 17ea021..1f7c974 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210.no_link.dart.weak.outline.expect
@@ -66,7 +66,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
@@ -124,7 +124,7 @@
 abstract class Interface2 extends core::Object {
   synthetic constructor •() → iss::Interface2*
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -168,7 +168,7 @@
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
   synthetic constructor •() → iss::D*
     ;
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.expect
index 26a6ec7..9691295 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
@@ -87,7 +87,7 @@
   synthetic constructor •() → iss::Interface2*
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -143,7 +143,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
 }
 abstract class F extends core::Object implements iss::Interface {
   synthetic constructor •() → iss::F*
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.outline.expect
index e89c33b..90aecca 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.outline.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
@@ -84,7 +84,7 @@
 abstract class Interface2 extends core::Object {
   synthetic constructor •() → iss::Interface2*
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -138,7 +138,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
 }
 abstract class F extends core::Object implements iss::Interface {
   synthetic constructor •() → iss::F*
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.transformed.expect
index b06070d..8aae15b 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
@@ -87,7 +87,7 @@
   synthetic constructor •() → iss::Interface2*
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -143,7 +143,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
 }
 abstract class F extends core::Object implements iss::Interface {
   synthetic constructor •() → iss::F*
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.expect
index 004a42d..cf99014 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
@@ -87,7 +87,7 @@
   synthetic constructor •() → iss::Interface2*
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -133,7 +133,7 @@
   synthetic constructor •() → iss::D*
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.outline.expect
index f82c8a7..ac90189 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.outline.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
@@ -84,7 +84,7 @@
 abstract class Interface2 extends core::Object {
   synthetic constructor •() → iss::Interface2*
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -128,7 +128,7 @@
 abstract class D extends core::Object implements iss::Interface, iss::Interface2 {
   synthetic constructor •() → iss::D*
     ;
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.transformed.expect
index f7cf6a9..079856d 100644
--- a/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue41210b/issue41210_no_error.no_link.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_E&Object&A&D*
     : super self::_E&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E&Object&A::method}(i, s: s);
 }
 class E extends self::_E&Object&A&D {
@@ -87,7 +87,7 @@
   synthetic constructor •() → iss::Interface2*
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int* i) → core::String*;
+  abstract method method(covariant-by-declaration core::int* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -133,7 +133,7 @@
   synthetic constructor •() → iss::D*
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num* i) → core::String*;
+  abstract forwarding-stub method method(covariant-by-declaration core::num* i) → core::String*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/general/issue46389.dart.weak.expect b/pkg/front_end/testcases/general/issue46389.dart.weak.expect
index ef8ec02..55be1b7 100644
--- a/pkg/front_end/testcases/general/issue46389.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue46389.dart.weak.expect
@@ -23,22 +23,22 @@
   synthetic constructor •() → self::B<self::B::X%>
     : super core::Object::•()
     ;
-  abstract method foo(generic-covariant-impl self::B::X% x) → self::B::X%;
-  abstract method bar({required generic-covariant-impl self::B::X% x = #C1}) → self::B::X%;
-  abstract set baz(generic-covariant-impl self::B::X% x) → void;
-  abstract set boz(generic-covariant-impl self::B::X% x) → void;
+  abstract method foo(covariant-by-class self::B::X% x) → self::B::X%;
+  abstract method bar({required covariant-by-class self::B::X% x = #C1}) → self::B::X%;
+  abstract set baz(covariant-by-class self::B::X% x) → void;
+  abstract set boz(covariant-by-class self::B::X% x) → void;
 }
 abstract class _C&A&B = self::A with self::B<core::num> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_C&A&B
     : super self::A::•()
     ;
-  forwarding-stub set boz(generic-covariant-impl core::num x) → void
+  forwarding-stub set boz(covariant-by-class core::num x) → void
     return super.{self::A::boz} = x as core::int;
-  forwarding-stub method foo(generic-covariant-impl core::num x) → core::num
+  forwarding-stub method foo(covariant-by-class core::num x) → core::num
     return super.{self::A::foo}(x as core::int);
-  forwarding-stub method bar({required generic-covariant-impl core::num x = #C1}) → core::num
+  forwarding-stub method bar({required covariant-by-class core::num x = #C1}) → core::num
     return super.{self::A::bar}(x: x as core::int);
-  forwarding-stub set baz(generic-covariant-impl core::num x) → void
+  forwarding-stub set baz(covariant-by-class core::num x) → void
     return super.{self::A::baz} = x as core::int;
 }
 class C extends self::_C&A&B {
diff --git a/pkg/front_end/testcases/general/issue46389.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue46389.dart.weak.outline.expect
index c3007c6..8ff791a 100644
--- a/pkg/front_end/testcases/general/issue46389.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue46389.dart.weak.outline.expect
@@ -16,22 +16,22 @@
 abstract class B<X extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::B<self::B::X%>
     ;
-  abstract method foo(generic-covariant-impl self::B::X% x) → self::B::X%;
-  abstract method bar({required generic-covariant-impl self::B::X% x}) → self::B::X%;
-  abstract set baz(generic-covariant-impl self::B::X% x) → void;
-  abstract set boz(generic-covariant-impl self::B::X% x) → void;
+  abstract method foo(covariant-by-class self::B::X% x) → self::B::X%;
+  abstract method bar({required covariant-by-class self::B::X% x}) → self::B::X%;
+  abstract set baz(covariant-by-class self::B::X% x) → void;
+  abstract set boz(covariant-by-class self::B::X% x) → void;
 }
 abstract class _C&A&B = self::A with self::B<core::num> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_C&A&B
     : super self::A::•()
     ;
-  forwarding-stub set boz(generic-covariant-impl core::num x) → void
+  forwarding-stub set boz(covariant-by-class core::num x) → void
     return super.{self::A::boz} = x as core::int;
-  forwarding-stub method foo(generic-covariant-impl core::num x) → core::num
+  forwarding-stub method foo(covariant-by-class core::num x) → core::num
     return super.{self::A::foo}(x as core::int);
-  forwarding-stub method bar({required generic-covariant-impl core::num x}) → core::num
+  forwarding-stub method bar({required covariant-by-class core::num x}) → core::num
     return super.{self::A::bar}(x: x as core::int);
-  forwarding-stub set baz(generic-covariant-impl core::num x) → void
+  forwarding-stub set baz(covariant-by-class core::num x) → void
     return super.{self::A::baz} = x as core::int;
 }
 class C extends self::_C&A&B {
diff --git a/pkg/front_end/testcases/general/issue46389.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46389.dart.weak.transformed.expect
index c3ae0b5..efd3846 100644
--- a/pkg/front_end/testcases/general/issue46389.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue46389.dart.weak.transformed.expect
@@ -23,22 +23,22 @@
   synthetic constructor •() → self::B<self::B::X%>
     : super core::Object::•()
     ;
-  abstract method foo(generic-covariant-impl self::B::X% x) → self::B::X%;
-  abstract method bar({required generic-covariant-impl self::B::X% x = #C1}) → self::B::X%;
-  abstract set baz(generic-covariant-impl self::B::X% x) → void;
-  abstract set boz(generic-covariant-impl self::B::X% x) → void;
+  abstract method foo(covariant-by-class self::B::X% x) → self::B::X%;
+  abstract method bar({required covariant-by-class self::B::X% x = #C1}) → self::B::X%;
+  abstract set baz(covariant-by-class self::B::X% x) → void;
+  abstract set boz(covariant-by-class self::B::X% x) → void;
 }
 abstract class _C&A&B extends self::A implements self::B<core::num> /*isAnonymousMixin,isEliminatedMixin*/  {
   synthetic constructor •() → self::_C&A&B
     : super self::A::•()
     ;
-  set boz(generic-covariant-impl core::num x) → void
+  set boz(covariant-by-class core::num x) → void
     return super.{self::A::boz} = x as core::int;
-  method foo(generic-covariant-impl core::num x) → core::num
+  method foo(covariant-by-class core::num x) → core::num
     return super.{self::A::foo}(x as core::int);
-  method bar({required generic-covariant-impl core::num x = #C1}) → core::num
+  method bar({required covariant-by-class core::num x = #C1}) → core::num
     return super.{self::A::bar}(x: x as core::int);
-  set baz(generic-covariant-impl core::num x) → void
+  set baz(covariant-by-class core::num x) → void
     return super.{self::A::baz} = x as core::int;
 }
 class C extends self::_C&A&B {
diff --git a/pkg/front_end/testcases/general/issue46390.dart.weak.expect b/pkg/front_end/testcases/general/issue46390.dart.weak.expect
index 88b9cff..8c31872 100644
--- a/pkg/front_end/testcases/general/issue46390.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue46390.dart.weak.expect
@@ -15,13 +15,13 @@
   synthetic constructor •() → self::B<self::B::X%>
     : super core::Object::•()
     ;
-  abstract method foo(generic-covariant-impl self::B::X% x) → self::B::X%;
+  abstract method foo(covariant-by-class self::B::X% x) → self::B::X%;
 }
 abstract class _C&A&B = self::A with self::B<core::num> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_C&A&B
     : super self::A::•()
     ;
-  forwarding-stub method foo(generic-covariant-impl core::num x) → core::num
+  forwarding-stub method foo(covariant-by-class core::num x) → core::num
     return super.{self::A::foo}(x);
 }
 class C extends self::_C&A&B {
diff --git a/pkg/front_end/testcases/general/issue46390.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue46390.dart.weak.outline.expect
index 9da1896..d2a9f01 100644
--- a/pkg/front_end/testcases/general/issue46390.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue46390.dart.weak.outline.expect
@@ -11,13 +11,13 @@
 abstract class B<X extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::B<self::B::X%>
     ;
-  abstract method foo(generic-covariant-impl self::B::X% x) → self::B::X%;
+  abstract method foo(covariant-by-class self::B::X% x) → self::B::X%;
 }
 abstract class _C&A&B = self::A with self::B<core::num> /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_C&A&B
     : super self::A::•()
     ;
-  forwarding-stub method foo(generic-covariant-impl core::num x) → core::num
+  forwarding-stub method foo(covariant-by-class core::num x) → core::num
     return super.{self::A::foo}(x);
 }
 class C extends self::_C&A&B {
diff --git a/pkg/front_end/testcases/general/issue46390.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue46390.dart.weak.transformed.expect
index 7ba41a0..6447989 100644
--- a/pkg/front_end/testcases/general/issue46390.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue46390.dart.weak.transformed.expect
@@ -15,13 +15,13 @@
   synthetic constructor •() → self::B<self::B::X%>
     : super core::Object::•()
     ;
-  abstract method foo(generic-covariant-impl self::B::X% x) → self::B::X%;
+  abstract method foo(covariant-by-class self::B::X% x) → self::B::X%;
 }
 abstract class _C&A&B extends self::A implements self::B<core::num> /*isAnonymousMixin,isEliminatedMixin*/  {
   synthetic constructor •() → self::_C&A&B
     : super self::A::•()
     ;
-  method foo(generic-covariant-impl core::num x) → core::num
+  method foo(covariant-by-class core::num x) → core::num
     return super.{self::A::foo}(x);
 }
 class C extends self::_C&A&B {
diff --git a/pkg/front_end/testcases/general/issue47013.dart.weak.expect b/pkg/front_end/testcases/general/issue47013.dart.weak.expect
index 4d8fee3..f555ae6 100644
--- a/pkg/front_end/testcases/general/issue47013.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47013.dart.weak.expect
@@ -12,13 +12,13 @@
   synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num n) → void;
+  abstract method m(covariant-by-declaration core::num n) → void;
 }
 class C extends self::A implements self::I {
   synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  forwarding-stub method m(covariant core::num n) → void
+  forwarding-stub method m(covariant-by-declaration core::num n) → void
     return super.{self::A::m}(n as core::int);
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/general/issue47013.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47013.dart.weak.outline.expect
index 298bdf9..6e93d0c 100644
--- a/pkg/front_end/testcases/general/issue47013.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47013.dart.weak.outline.expect
@@ -11,12 +11,12 @@
 abstract class I extends core::Object {
   synthetic constructor •() → self::I
     ;
-  abstract method m(covariant core::num n) → void;
+  abstract method m(covariant-by-declaration core::num n) → void;
 }
 class C extends self::A implements self::I {
   synthetic constructor •() → self::C
     ;
-  forwarding-stub method m(covariant core::num n) → void
+  forwarding-stub method m(covariant-by-declaration core::num n) → void
     return super.{self::A::m}(n as core::int);
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/general/issue47013.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47013.dart.weak.transformed.expect
index 4d8fee3..f555ae6 100644
--- a/pkg/front_end/testcases/general/issue47013.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47013.dart.weak.transformed.expect
@@ -12,13 +12,13 @@
   synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num n) → void;
+  abstract method m(covariant-by-declaration core::num n) → void;
 }
 class C extends self::A implements self::I {
   synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  forwarding-stub method m(covariant core::num n) → void
+  forwarding-stub method m(covariant-by-declaration core::num n) → void
     return super.{self::A::m}(n as core::int);
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/general/issue47013b.dart.weak.expect b/pkg/front_end/testcases/general/issue47013b.dart.weak.expect
index 752be53..70fa41f 100644
--- a/pkg/front_end/testcases/general/issue47013b.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47013b.dart.weak.expect
@@ -12,14 +12,14 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method m(covariant core::int i) → void
+  forwarding-stub forwarding-semi-stub method m(covariant-by-declaration core::int i) → void
     return super.{self::A::m}(i);
 }
 class C extends self::B {
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method m(covariant core::int i) → void {}
+  method m(covariant-by-declaration core::int i) → void {}
 }
 static method main() → dynamic {
   self::A a = new self::C::•();
diff --git a/pkg/front_end/testcases/general/issue47013b.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47013b.dart.weak.outline.expect
index 917981e..81997e1 100644
--- a/pkg/front_end/testcases/general/issue47013b.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47013b.dart.weak.outline.expect
@@ -11,13 +11,13 @@
 class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  forwarding-stub forwarding-semi-stub method m(covariant core::int i) → void
+  forwarding-stub forwarding-semi-stub method m(covariant-by-declaration core::int i) → void
     return super.{self::A::m}(i);
 }
 class C extends self::B {
   synthetic constructor •() → self::C
     ;
-  method m(covariant core::int i) → void
+  method m(covariant-by-declaration core::int i) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/issue47013b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47013b.dart.weak.transformed.expect
index 752be53..70fa41f 100644
--- a/pkg/front_end/testcases/general/issue47013b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47013b.dart.weak.transformed.expect
@@ -12,14 +12,14 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method m(covariant core::int i) → void
+  forwarding-stub forwarding-semi-stub method m(covariant-by-declaration core::int i) → void
     return super.{self::A::m}(i);
 }
 class C extends self::B {
   synthetic constructor •() → self::C
     : super self::B::•()
     ;
-  method m(covariant core::int i) → void {}
+  method m(covariant-by-declaration core::int i) → void {}
 }
 static method main() → dynamic {
   self::A a = new self::C::•();
diff --git a/pkg/front_end/testcases/general/issue47013c.dart.weak.expect b/pkg/front_end/testcases/general/issue47013c.dart.weak.expect
index 4b15292..e4ef550 100644
--- a/pkg/front_end/testcases/general/issue47013c.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47013c.dart.weak.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method m(covariant self::D d) → void {}
+  method m(covariant-by-declaration self::D d) → void {}
 }
 abstract class B1 extends core::Object {
   synthetic constructor •() → self::B1
diff --git a/pkg/front_end/testcases/general/issue47013c.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47013c.dart.weak.outline.expect
index 52f2d87..cf839b8 100644
--- a/pkg/front_end/testcases/general/issue47013c.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47013c.dart.weak.outline.expect
@@ -17,7 +17,7 @@
 class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  method m(covariant self::D d) → void
+  method m(covariant-by-declaration self::D d) → void
     ;
 }
 abstract class B1 extends core::Object {
diff --git a/pkg/front_end/testcases/general/issue47013c.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47013c.dart.weak.transformed.expect
index 4b15292..e4ef550 100644
--- a/pkg/front_end/testcases/general/issue47013c.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47013c.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  method m(covariant self::D d) → void {}
+  method m(covariant-by-declaration self::D d) → void {}
 }
 abstract class B1 extends core::Object {
   synthetic constructor •() → self::B1
diff --git a/pkg/front_end/testcases/general/issue47013d.dart.weak.expect b/pkg/front_end/testcases/general/issue47013d.dart.weak.expect
index 41c3ad9..7039795 100644
--- a/pkg/front_end/testcases/general/issue47013d.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47013d.dart.weak.expect
@@ -23,7 +23,7 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method m(covariant core::int i, covariant core::num n) → void
+  forwarding-stub forwarding-semi-stub method m(covariant-by-declaration core::int i, covariant-by-declaration core::num n) → void
     return super.{self::A::m}(i, n as core::int);
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/issue47013d.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47013d.dart.weak.outline.expect
index acbd871..f310569 100644
--- a/pkg/front_end/testcases/general/issue47013d.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47013d.dart.weak.outline.expect
@@ -11,7 +11,7 @@
 class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  forwarding-stub forwarding-semi-stub method m(covariant core::int i, covariant core::num n) → void
+  forwarding-stub forwarding-semi-stub method m(covariant-by-declaration core::int i, covariant-by-declaration core::num n) → void
     return super.{self::A::m}(i, n as core::int);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/issue47013d.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47013d.dart.weak.transformed.expect
index 41c3ad9..7039795 100644
--- a/pkg/front_end/testcases/general/issue47013d.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47013d.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  forwarding-stub forwarding-semi-stub method m(covariant core::int i, covariant core::num n) → void
+  forwarding-stub forwarding-semi-stub method m(covariant-by-declaration core::int i, covariant-by-declaration core::num n) → void
     return super.{self::A::m}(i, n as core::int);
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/general/issue47072.dart.weak.expect b/pkg/front_end/testcases/general/issue47072.dart.weak.expect
index c261fd0..54bf6d2 100644
--- a/pkg/front_end/testcases/general/issue47072.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47072.dart.weak.expect
@@ -22,13 +22,13 @@
   synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(covariant self::A a) → void;
+  abstract method f(covariant-by-declaration self::A a) → void;
 }
 class D extends self::C implements self::I {
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  forwarding-stub method f(covariant self::A a) → void
+  forwarding-stub method f(covariant-by-declaration self::A a) → void
     return super.{self::C::f}(a as self::B);
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/general/issue47072.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47072.dart.weak.outline.expect
index 6cd4faf..03fb90e 100644
--- a/pkg/front_end/testcases/general/issue47072.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47072.dart.weak.outline.expect
@@ -19,12 +19,12 @@
 abstract class I extends core::Object {
   synthetic constructor •() → self::I
     ;
-  abstract method f(covariant self::A a) → void;
+  abstract method f(covariant-by-declaration self::A a) → void;
 }
 class D extends self::C implements self::I {
   synthetic constructor •() → self::D
     ;
-  forwarding-stub method f(covariant self::A a) → void
+  forwarding-stub method f(covariant-by-declaration self::A a) → void
     return super.{self::C::f}(a as self::B);
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/general/issue47072.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47072.dart.weak.transformed.expect
index c261fd0..54bf6d2 100644
--- a/pkg/front_end/testcases/general/issue47072.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47072.dart.weak.transformed.expect
@@ -22,13 +22,13 @@
   synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method f(covariant self::A a) → void;
+  abstract method f(covariant-by-declaration self::A a) → void;
 }
 class D extends self::C implements self::I {
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  forwarding-stub method f(covariant self::A a) → void
+  forwarding-stub method f(covariant-by-declaration self::A a) → void
     return super.{self::C::f}(a as self::B);
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
index 16f3460..a1967bf 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 @#C1
-class E extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E*>* values = #C11;
   static const field self::E* E1 = #C4;
   static const field self::E* E2 = #C7;
   static const field self::E* E3 = #C10;
-  const constructor •(core::int* index, core::String* _name) → self::E*
-    : self::E::index = index, self::E::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::E*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::E::_name}{core::String*};
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -31,13 +31,13 @@
 constants  {
   #C1 = null
   #C2 = 0
-  #C3 = "E.E1"
+  #C3 = "E1"
   #C4 = self::E {index:#C2, _name:#C3}
   #C5 = 1
-  #C6 = "E.E2"
+  #C6 = "E2"
   #C7 = self::E {index:#C5, _name:#C6}
   #C8 = 2
-  #C9 = "E.E3"
+  #C9 = "E3"
   #C10 = self::E {index:#C8, _name:#C9}
   #C11 = <self::E*>[#C4, #C7, #C10]
 }
@@ -46,4 +46,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///metadata_enum.dart:
 - E. (from org-dartlang-testcase:///metadata_enum.dart:8:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.outline.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.outline.expect
index 44f4d21..09a1c26 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 @self::a
-class E extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E*>* values = const <self::E*>[self::E::E1, self::E::E2, self::E::E3];
-  static const field self::E* E1 = const self::E::•(0, "E.E1");
-  static const field self::E* E2 = const self::E::•(1, "E.E2");
-  static const field self::E* E3 = const self::E::•(2, "E.E3");
-  const constructor •(core::int* index, core::String* _name) → self::E*
-    : self::E::index = index, self::E::_name = _name, super core::Object::•()
+  static const field self::E* E1 = const self::E::•(0, "E1");
+  static const field self::E* E2 = const self::E::•(1, "E2");
+  static const field self::E* E3 = const self::E::•(2, "E3");
+  const constructor •(core::int* index, core::String* name) → self::E*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::E::_name}{core::String*};
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -32,8 +32,8 @@
 
 Extra constant evaluation status:
 Evaluated: StaticGet @ org-dartlang-testcase:///metadata_enum.dart:7:2 -> NullConstant(null)
-Evaluated: ListLiteral @ org-dartlang-testcase:///metadata_enum.dart:8:6 -> ListConstant(const <E*>[const E{E.index: 0, E._name: "E.E1"}, const E{E.index: 1, E._name: "E.E2"}, const E{E.index: 2, E._name: "E.E3"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///metadata_enum.dart:8:10 -> InstanceConstant(const E{E.index: 0, E._name: "E.E1"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///metadata_enum.dart:8:14 -> InstanceConstant(const E{E.index: 1, E._name: "E.E2"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///metadata_enum.dart:8:18 -> InstanceConstant(const E{E.index: 2, E._name: "E.E3"})
-Extra constant evaluation: evaluated: 9, effectively constant: 5
+Evaluated: ListLiteral @ org-dartlang-testcase:///metadata_enum.dart:8:6 -> ListConstant(const <E*>[const E{_Enum.index: 0, _Enum._name: "E1"}, const E{_Enum.index: 1, _Enum._name: "E2"}, const E{_Enum.index: 2, _Enum._name: "E3"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///metadata_enum.dart:8:10 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "E1"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///metadata_enum.dart:8:14 -> InstanceConstant(const E{_Enum.index: 1, _Enum._name: "E2"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///metadata_enum.dart:8:18 -> InstanceConstant(const E{_Enum.index: 2, _Enum._name: "E3"})
+Extra constant evaluation: evaluated: 10, effectively constant: 5
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
index 16f3460..a1967bf 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 @#C1
-class E extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E*>* values = #C11;
   static const field self::E* E1 = #C4;
   static const field self::E* E2 = #C7;
   static const field self::E* E3 = #C10;
-  const constructor •(core::int* index, core::String* _name) → self::E*
-    : self::E::index = index, self::E::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::E*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::E::_name}{core::String*};
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -31,13 +31,13 @@
 constants  {
   #C1 = null
   #C2 = 0
-  #C3 = "E.E1"
+  #C3 = "E1"
   #C4 = self::E {index:#C2, _name:#C3}
   #C5 = 1
-  #C6 = "E.E2"
+  #C6 = "E2"
   #C7 = self::E {index:#C5, _name:#C6}
   #C8 = 2
-  #C9 = "E.E3"
+  #C9 = "E3"
   #C10 = self::E {index:#C8, _name:#C9}
   #C11 = <self::E*>[#C4, #C7, #C10]
 }
@@ -46,4 +46,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///metadata_enum.dart:
 - E. (from org-dartlang-testcase:///metadata_enum.dart:8:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.expect
index b5abc6f..a99c84b 100644
--- a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.expect
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::X>
     : super core::Object::•()
     ;
-  method f<generic-covariant-impl Y extends self::A::X>(self::A::f::Y y) → void {}
+  method f<covariant-by-class Y extends self::A::X>(self::A::f::Y y) → void {}
 }
 static method expectThrows(() → void f) → dynamic {
   try {
@@ -20,6 +20,6 @@
 static method main() → dynamic {
   self::A<core::num> a = new self::A::•<core::int>();
   self::expectThrows(() → void {
-    <Y extends core::num>(Y) → void f = a.{self::A::f}{<generic-covariant-impl Y extends core::num>(Y) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <generic-covariant-impl Y extends core::num>(Y) → void;
+    <Y extends core::num>(Y) → void f = a.{self::A::f}{<covariant-by-class Y extends core::num>(Y) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <covariant-by-class Y extends core::num>(Y) → void;
   });
 }
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.outline.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.outline.expect
index 18ac6fe..4e04afa 100644
--- a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A<X extends core::num> extends core::Object {
   synthetic constructor •() → self::A<self::A::X>
     ;
-  method f<generic-covariant-impl Y extends self::A::X>(self::A::f::Y y) → void
+  method f<covariant-by-class Y extends self::A::X>(self::A::f::Y y) → void
     ;
 }
 static method expectThrows(() → void f) → dynamic
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.transformed.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.transformed.expect
index b5abc6f..a99c84b 100644
--- a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::X>
     : super core::Object::•()
     ;
-  method f<generic-covariant-impl Y extends self::A::X>(self::A::f::Y y) → void {}
+  method f<covariant-by-class Y extends self::A::X>(self::A::f::Y y) → void {}
 }
 static method expectThrows(() → void f) → dynamic {
   try {
@@ -20,6 +20,6 @@
 static method main() → dynamic {
   self::A<core::num> a = new self::A::•<core::int>();
   self::expectThrows(() → void {
-    <Y extends core::num>(Y) → void f = a.{self::A::f}{<generic-covariant-impl Y extends core::num>(Y) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <generic-covariant-impl Y extends core::num>(Y) → void;
+    <Y extends core::num>(Y) → void f = a.{self::A::f}{<covariant-by-class Y extends core::num>(Y) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} <covariant-by-class Y extends core::num>(Y) → void;
   });
 }
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.expect
index 9be07d6..090dbcd 100644
--- a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::X*>*
     : super core::Object::•()
     ;
-  method f<generic-covariant-impl Y extends self::A::X*>(self::A::f::Y* y) → void {}
+  method f<covariant-by-class Y extends self::A::X*>(self::A::f::Y* y) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -29,7 +29,7 @@
 }
 static method main() → dynamic {
   self::A<core::num*>* a = new self::A::•<core::int*>();
-  <Y extends core::num*>(Y*) →* void f = a.{self::A::f}{<generic-covariant-impl Y extends core::num*>(Y*) →* void};
+  <Y extends core::num*>(Y*) →* void f = a.{self::A::f}{<covariant-by-class Y extends core::num*>(Y*) →* void};
   self::expectThrows(() → Null {
     f<core::double*>(3.14){(core::double*) →* void};
   });
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.outline.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.outline.expect
index 50b76a4..c6b80d2 100644
--- a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A<X extends core::num*> extends core::Object {
   synthetic constructor •() → self::A<self::A::X*>*
     ;
-  method f<generic-covariant-impl Y extends self::A::X*>(self::A::f::Y* y) → void
+  method f<covariant-by-class Y extends self::A::X*>(self::A::f::Y* y) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.transformed.expect
index 9be07d6..090dbcd 100644
--- a/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/method_tearoff_covariant_generic_type_check_opt_out.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::X*>*
     : super core::Object::•()
     ;
-  method f<generic-covariant-impl Y extends self::A::X*>(self::A::f::Y* y) → void {}
+  method f<covariant-by-class Y extends self::A::X*>(self::A::f::Y* y) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -29,7 +29,7 @@
 }
 static method main() → dynamic {
   self::A<core::num*>* a = new self::A::•<core::int*>();
-  <Y extends core::num*>(Y*) →* void f = a.{self::A::f}{<generic-covariant-impl Y extends core::num*>(Y*) →* void};
+  <Y extends core::num*>(Y*) →* void f = a.{self::A::f}{<covariant-by-class Y extends core::num*>(Y*) →* void};
   self::expectThrows(() → Null {
     f<core::double*>(3.14){(core::double*) →* void};
   });
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.expect
index eaf50de..503a71e 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.expect
@@ -13,7 +13,7 @@
   synthetic constructor •() → self::M1*
     : super core::Object::•()
     ;
-  method method(covariant core::int* a, core::int* b) → dynamic {}
+  method method(covariant-by-declaration core::int* a, core::int* b) → dynamic {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -29,7 +29,7 @@
   synthetic constructor •() → self::M2*
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant core::int* b) → dynamic {}
+  method method(core::int* a, covariant-by-declaration core::int* b) → dynamic {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -45,7 +45,7 @@
   const synthetic constructor •() → self::_C&Object&M1*
     : super core::Object::•()
     ;
-  mixin-super-stub method method(covariant core::int* a, core::int* b) → dynamic
+  mixin-super-stub method method(covariant-by-declaration core::int* a, core::int* b) → dynamic
     return super.{self::M1::method}(a, b);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -62,7 +62,7 @@
   const synthetic constructor •() → self::_C&Object&M1&M2*
     : super self::_C&Object&M1::•()
     ;
-  forwarding-stub method method(covariant core::int* a, covariant core::int* b) → dynamic
+  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b) → dynamic
     return super.{self::M2::method}(a, b);
 }
 class C extends self::_C&Object&M1&M2 {
@@ -74,9 +74,9 @@
   synthetic constructor •() → self::Direct*
     : super core::Object::•()
     ;
-  method positional(covariant core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void {}
-  method optional([covariant core::int* a = #C1, core::int* b = #C1, covariant core::int* c = #C1, core::int* d = #C1]) → void {}
-  method named({covariant core::int* a = #C1, core::int* b = #C1, covariant core::int* c = #C1, core::int* d = #C1}) → void {}
+  method positional(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+  method optional([covariant-by-declaration core::int* a = #C1, core::int* b = #C1, covariant-by-declaration core::int* c = #C1, core::int* d = #C1]) → void {}
+  method named({covariant-by-declaration core::int* a = #C1, core::int* b = #C1, covariant-by-declaration core::int* c = #C1, core::int* d = #C1}) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -97,7 +97,7 @@
   synthetic constructor •() → self::Override1*
     : super core::Object::•()
     ;
-  method method(covariant core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -113,19 +113,19 @@
   synthetic constructor •() → self::Override2*
     : super self::Override1::•()
     ;
-  method method(covariant core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
 }
 class Override3 extends self::Override2 {
   synthetic constructor •() → self::Override3*
     : super self::Override2::•()
     ;
-  method method(covariant core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
 }
 abstract class Implement1 extends core::Object {
   synthetic constructor •() → self::Implement1*
     : super core::Object::•()
     ;
-  method method(covariant core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -141,7 +141,7 @@
   synthetic constructor •() → self::Implement2*
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -157,7 +157,7 @@
   synthetic constructor •() → self::Implement3*
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void {}
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -173,7 +173,7 @@
   synthetic constructor •() → self::Implement4*
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant core::int* c, covariant core::int* d, core::int* e) → void {}
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -189,7 +189,7 @@
   synthetic constructor •() → self::Implement5*
     : super core::Object::•()
     ;
-  method method(covariant core::int* a, covariant core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void {}
+  method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -205,7 +205,7 @@
   synthetic constructor •() → self::Interface1*
     : super core::Object::•()
     ;
-  method method(covariant core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -221,7 +221,7 @@
   synthetic constructor •() → self::Interface2*
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -237,7 +237,7 @@
   synthetic constructor •() → self::Mixin1*
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void {}
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -253,7 +253,7 @@
   synthetic constructor •() → self::Mixin2*
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, core::int* c, covariant core::int* d, core::int* e) → void {}
+  method method(core::int* a, core::int* b, core::int* c, covariant-by-declaration core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -269,7 +269,7 @@
   synthetic constructor •() → self::Superclass*
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, core::int* c, core::int* d, covariant core::int* e) → void {}
+  method method(core::int* a, core::int* b, core::int* c, core::int* d, covariant-by-declaration core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -285,21 +285,21 @@
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1*
     : super self::Superclass::•()
     ;
-  forwarding-stub method method(core::int* a, core::int* b, covariant core::int* c, core::int* d, covariant core::int* e) → void
+  forwarding-stub method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, covariant-by-declaration core::int* e) → void
     return super.{self::Mixin1::method}(a, b, c, d, e);
 }
 abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2*
     : super self::_Mixed&Superclass&Mixin1::•()
     ;
-  forwarding-stub method method(core::int* a, core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void
+  forwarding-stub method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::Mixed*
     : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
     ;
-  forwarding-stub method method(covariant core::int* a, covariant core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void
+  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect
index 222ba3a..cb1a866 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.outline.expect
@@ -12,7 +12,7 @@
 class M1 extends core::Object {
   synthetic constructor •() → self::M1*
     ;
-  method method(covariant core::int* a, core::int* b) → dynamic
+  method method(covariant-by-declaration core::int* a, core::int* b) → dynamic
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -28,7 +28,7 @@
 class M2 extends core::Object {
   synthetic constructor •() → self::M2*
     ;
-  method method(core::int* a, covariant core::int* b) → dynamic
+  method method(core::int* a, covariant-by-declaration core::int* b) → dynamic
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -45,7 +45,7 @@
   const synthetic constructor •() → self::_C&Object&M1*
     : super core::Object::•()
     ;
-  mixin-super-stub method method(covariant core::int* a, core::int* b) → dynamic
+  mixin-super-stub method method(covariant-by-declaration core::int* a, core::int* b) → dynamic
     return super.{self::M1::method}(a, b);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -62,7 +62,7 @@
   const synthetic constructor •() → self::_C&Object&M1&M2*
     : super self::_C&Object&M1::•()
     ;
-  forwarding-stub method method(covariant core::int* a, covariant core::int* b) → dynamic
+  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b) → dynamic
     return super.{self::M2::method}(a, b);
 }
 class C extends self::_C&Object&M1&M2 {
@@ -72,11 +72,11 @@
 class Direct extends core::Object {
   synthetic constructor •() → self::Direct*
     ;
-  method positional(covariant core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void
+  method positional(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void
     ;
-  method optional([covariant core::int* a, core::int* b, covariant core::int* c, core::int* d]) → void
+  method optional([covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d]) → void
     ;
-  method named({covariant core::int* a, core::int* b, covariant core::int* c, core::int* d}) → void
+  method named({covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d}) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -96,7 +96,7 @@
 class Override1 extends core::Object {
   synthetic constructor •() → self::Override1*
     ;
-  method method(covariant core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void
+  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -112,19 +112,19 @@
 class Override2 extends self::Override1 {
   synthetic constructor •() → self::Override2*
     ;
-  method method(covariant core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void
+  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void
     ;
 }
 class Override3 extends self::Override2 {
   synthetic constructor •() → self::Override3*
     ;
-  method method(covariant core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void
+  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void
     ;
 }
 abstract class Implement1 extends core::Object {
   synthetic constructor •() → self::Implement1*
     ;
-  method method(covariant core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void
+  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -140,7 +140,7 @@
 class Implement2 extends core::Object {
   synthetic constructor •() → self::Implement2*
     ;
-  method method(core::int* a, covariant core::int* b, core::int* c, core::int* d, core::int* e) → void
+  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -156,7 +156,7 @@
 class Implement3 extends core::Object {
   synthetic constructor •() → self::Implement3*
     ;
-  method method(core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -172,7 +172,7 @@
 class Implement4 extends core::Object implements self::Implement3 {
   synthetic constructor •() → self::Implement4*
     ;
-  method method(core::int* a, core::int* b, covariant core::int* c, covariant core::int* d, core::int* e) → void
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, core::int* e) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -188,7 +188,7 @@
 class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
   synthetic constructor •() → self::Implement5*
     ;
-  method method(covariant core::int* a, covariant core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void
+  method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -204,7 +204,7 @@
 class Interface1 extends core::Object {
   synthetic constructor •() → self::Interface1*
     ;
-  method method(covariant core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void
+  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -220,7 +220,7 @@
 class Interface2 extends core::Object {
   synthetic constructor •() → self::Interface2*
     ;
-  method method(core::int* a, covariant core::int* b, core::int* c, core::int* d, core::int* e) → void
+  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -236,7 +236,7 @@
 class Mixin1 extends core::Object {
   synthetic constructor •() → self::Mixin1*
     ;
-  method method(core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -252,7 +252,7 @@
 class Mixin2 extends core::Object {
   synthetic constructor •() → self::Mixin2*
     ;
-  method method(core::int* a, core::int* b, core::int* c, covariant core::int* d, core::int* e) → void
+  method method(core::int* a, core::int* b, core::int* c, covariant-by-declaration core::int* d, core::int* e) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -268,7 +268,7 @@
 class Superclass extends core::Object {
   synthetic constructor •() → self::Superclass*
     ;
-  method method(core::int* a, core::int* b, core::int* c, core::int* d, covariant core::int* e) → void
+  method method(core::int* a, core::int* b, core::int* c, core::int* d, covariant-by-declaration core::int* e) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -285,20 +285,20 @@
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1*
     : super self::Superclass::•()
     ;
-  forwarding-stub method method(core::int* a, core::int* b, covariant core::int* c, core::int* d, covariant core::int* e) → void
+  forwarding-stub method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, covariant-by-declaration core::int* e) → void
     return super.{self::Mixin1::method}(a, b, c, d, e);
 }
 abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2*
     : super self::_Mixed&Superclass&Mixin1::•()
     ;
-  forwarding-stub method method(core::int* a, core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void
+  forwarding-stub method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::Mixed*
     ;
-  forwarding-stub method method(covariant core::int* a, covariant core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void
+  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.transformed.expect
index 00fb601..29fba4a 100644
--- a/pkg/front_end/testcases/general/mixin_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
   synthetic constructor •() → self::M1*
     : super core::Object::•()
     ;
-  method method(covariant core::int* a, core::int* b) → dynamic {}
+  method method(covariant-by-declaration core::int* a, core::int* b) → dynamic {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -29,7 +29,7 @@
   synthetic constructor •() → self::M2*
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant core::int* b) → dynamic {}
+  method method(core::int* a, covariant-by-declaration core::int* b) → dynamic {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -45,7 +45,7 @@
   const synthetic constructor •() → self::_C&Object&M1*
     : super core::Object::•()
     ;
-  method method(covariant core::int* a, core::int* b) → dynamic {}
+  method method(covariant-by-declaration core::int* a, core::int* b) → dynamic {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -61,7 +61,7 @@
   const synthetic constructor •() → self::_C&Object&M1&M2*
     : super self::_C&Object&M1::•()
     ;
-  method method(covariant core::int* a, covariant core::int* b) → dynamic {}
+  method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b) → dynamic {}
 }
 class C extends self::_C&Object&M1&M2 {
   synthetic constructor •() → self::C*
@@ -72,9 +72,9 @@
   synthetic constructor •() → self::Direct*
     : super core::Object::•()
     ;
-  method positional(covariant core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void {}
-  method optional([covariant core::int* a = #C1, core::int* b = #C1, covariant core::int* c = #C1, core::int* d = #C1]) → void {}
-  method named({covariant core::int* a = #C1, core::int* b = #C1, covariant core::int* c = #C1, core::int* d = #C1}) → void {}
+  method positional(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
+  method optional([covariant-by-declaration core::int* a = #C1, core::int* b = #C1, covariant-by-declaration core::int* c = #C1, core::int* d = #C1]) → void {}
+  method named({covariant-by-declaration core::int* a = #C1, core::int* b = #C1, covariant-by-declaration core::int* c = #C1, core::int* d = #C1}) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -95,7 +95,7 @@
   synthetic constructor •() → self::Override1*
     : super core::Object::•()
     ;
-  method method(covariant core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -111,19 +111,19 @@
   synthetic constructor •() → self::Override2*
     : super self::Override1::•()
     ;
-  method method(covariant core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
 }
 class Override3 extends self::Override2 {
   synthetic constructor •() → self::Override3*
     : super self::Override2::•()
     ;
-  method method(covariant core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
 }
 abstract class Implement1 extends core::Object {
   synthetic constructor •() → self::Implement1*
     : super core::Object::•()
     ;
-  method method(covariant core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -139,7 +139,7 @@
   synthetic constructor •() → self::Implement2*
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -155,7 +155,7 @@
   synthetic constructor •() → self::Implement3*
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void {}
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -171,7 +171,7 @@
   synthetic constructor •() → self::Implement4*
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant core::int* c, covariant core::int* d, core::int* e) → void {}
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -187,7 +187,7 @@
   synthetic constructor •() → self::Implement5*
     : super core::Object::•()
     ;
-  method method(covariant core::int* a, covariant core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void {}
+  method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -203,7 +203,7 @@
   synthetic constructor •() → self::Interface1*
     : super core::Object::•()
     ;
-  method method(covariant core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  method method(covariant-by-declaration core::int* a, core::int* b, core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -219,7 +219,7 @@
   synthetic constructor •() → self::Interface2*
     : super core::Object::•()
     ;
-  method method(core::int* a, covariant core::int* b, core::int* c, core::int* d, core::int* e) → void {}
+  method method(core::int* a, covariant-by-declaration core::int* b, core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -235,7 +235,7 @@
   synthetic constructor •() → self::Mixin1*
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, covariant core::int* c, core::int* d, core::int* e) → void {}
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -251,7 +251,7 @@
   synthetic constructor •() → self::Mixin2*
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, core::int* c, covariant core::int* d, core::int* e) → void {}
+  method method(core::int* a, core::int* b, core::int* c, covariant-by-declaration core::int* d, core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -267,7 +267,7 @@
   synthetic constructor •() → self::Superclass*
     : super core::Object::•()
     ;
-  method method(core::int* a, core::int* b, core::int* c, core::int* d, covariant core::int* e) → void {}
+  method method(core::int* a, core::int* b, core::int* c, core::int* d, covariant-by-declaration core::int* e) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -283,19 +283,19 @@
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1*
     : super self::Superclass::•()
     ;
-  method method(core::int* a, core::int* b, covariant core::int* c, core::int* d, covariant core::int* e) → void {}
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, core::int* d, covariant-by-declaration core::int* e) → void {}
 }
 abstract class _Mixed&Superclass&Mixin1&Mixin2 extends self::_Mixed&Superclass&Mixin1 implements self::Mixin2 /*isAnonymousMixin,isEliminatedMixin*/  {
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2*
     : super self::_Mixed&Superclass&Mixin1::•()
     ;
-  method method(core::int* a, core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void {}
+  method method(core::int* a, core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void {}
 }
 class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::Mixed*
     : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
     ;
-  forwarding-stub method method(covariant core::int* a, covariant core::int* b, covariant core::int* c, covariant core::int* d, covariant core::int* e) → void
+  forwarding-stub method method(covariant-by-declaration core::int* a, covariant-by-declaration core::int* b, covariant-by-declaration core::int* c, covariant-by-declaration core::int* d, covariant-by-declaration core::int* e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.expect
index f97e4ab..8a65e36 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.expect
@@ -10,9 +10,9 @@
     return "Superclass";
   method method2(core::num* argument1, core::num* argument2) → core::String*
     return "Superclass";
-  method method3(core::num* argument1, covariant core::int* argument2) → core::String*
+  method method3(core::num* argument1, covariant-by-declaration core::int* argument2) → core::String*
     return "Superclass";
-  method method4(core::num* argument1, covariant core::num* argument2) → core::String*
+  method method4(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
     return "Superclass";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -31,11 +31,11 @@
     ;
   method method1(core::num* argument1, core::num* argument2) → core::String*
     return "Mixin";
-  method method2(covariant core::int* argument1, core::num* argument2) → core::String*
+  method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
     return "Mixin";
   method method3(core::num* argument1, core::num* argument2) → core::String*
     return "Mixin";
-  method method4(covariant core::int* argument1, core::int* argument2) → core::String*
+  method method4(covariant-by-declaration core::int* argument1, core::int* argument2) → core::String*
     return "Mixin";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -54,11 +54,11 @@
     ;
   mixin-super-stub method method1(core::num* argument1, core::num* argument2) → core::String*
     return super.{self::Mixin::method1}(argument1, argument2);
-  mixin-super-stub method method2(covariant core::int* argument1, core::num* argument2) → core::String*
+  mixin-super-stub method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
     return super.{self::Mixin::method2}(argument1, argument2);
-  forwarding-stub method method3(core::num* argument1, covariant core::num* argument2) → core::String*
+  forwarding-stub method method3(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
     return super.{self::Mixin::method3}(argument1, argument2);
-  forwarding-stub method method4(covariant core::int* argument1, covariant core::int* argument2) → core::String*
+  forwarding-stub method method4(covariant-by-declaration core::int* argument1, covariant-by-declaration core::int* argument2) → core::String*
     return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.outline.expect
index 01e76d1..64d87c4 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.outline.expect
@@ -9,9 +9,9 @@
     ;
   method method2(core::num* argument1, core::num* argument2) → core::String*
     ;
-  method method3(core::num* argument1, covariant core::int* argument2) → core::String*
+  method method3(core::num* argument1, covariant-by-declaration core::int* argument2) → core::String*
     ;
-  method method4(core::num* argument1, covariant core::num* argument2) → core::String*
+  method method4(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -29,11 +29,11 @@
     ;
   method method1(core::num* argument1, core::num* argument2) → core::String*
     ;
-  method method2(covariant core::int* argument1, core::num* argument2) → core::String*
+  method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
     ;
   method method3(core::num* argument1, core::num* argument2) → core::String*
     ;
-  method method4(covariant core::int* argument1, core::int* argument2) → core::String*
+  method method4(covariant-by-declaration core::int* argument1, core::int* argument2) → core::String*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -52,11 +52,11 @@
     ;
   mixin-super-stub method method1(core::num* argument1, core::num* argument2) → core::String*
     return super.{self::Mixin::method1}(argument1, argument2);
-  mixin-super-stub method method2(covariant core::int* argument1, core::num* argument2) → core::String*
+  mixin-super-stub method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
     return super.{self::Mixin::method2}(argument1, argument2);
-  forwarding-stub method method3(core::num* argument1, covariant core::num* argument2) → core::String*
+  forwarding-stub method method3(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
     return super.{self::Mixin::method3}(argument1, argument2);
-  forwarding-stub method method4(covariant core::int* argument1, covariant core::int* argument2) → core::String*
+  forwarding-stub method method4(covariant-by-declaration core::int* argument1, covariant-by-declaration core::int* argument2) → core::String*
     return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
diff --git a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.transformed.expect
index 9dafbb8..11ed4b8 100644
--- a/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_covariant2.dart.weak.transformed.expect
@@ -10,9 +10,9 @@
     return "Superclass";
   method method2(core::num* argument1, core::num* argument2) → core::String*
     return "Superclass";
-  method method3(core::num* argument1, covariant core::int* argument2) → core::String*
+  method method3(core::num* argument1, covariant-by-declaration core::int* argument2) → core::String*
     return "Superclass";
-  method method4(core::num* argument1, covariant core::num* argument2) → core::String*
+  method method4(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
     return "Superclass";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -31,11 +31,11 @@
     ;
   method method1(core::num* argument1, core::num* argument2) → core::String*
     return "Mixin";
-  method method2(covariant core::int* argument1, core::num* argument2) → core::String*
+  method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
     return "Mixin";
   method method3(core::num* argument1, core::num* argument2) → core::String*
     return "Mixin";
-  method method4(covariant core::int* argument1, core::int* argument2) → core::String*
+  method method4(covariant-by-declaration core::int* argument1, core::int* argument2) → core::String*
     return "Mixin";
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -54,11 +54,11 @@
     ;
   method method1(core::num* argument1, core::num* argument2) → core::String*
     return "Mixin";
-  method method2(covariant core::int* argument1, core::num* argument2) → core::String*
+  method method2(covariant-by-declaration core::int* argument1, core::num* argument2) → core::String*
     return "Mixin";
-  method method3(core::num* argument1, covariant core::num* argument2) → core::String*
+  method method3(core::num* argument1, covariant-by-declaration core::num* argument2) → core::String*
     return "Mixin";
-  method method4(covariant core::int* argument1, covariant core::int* argument2) → core::String*
+  method method4(covariant-by-declaration core::int* argument1, covariant-by-declaration core::int* argument2) → core::String*
     return "Mixin";
 }
 class Class extends self::_Class&Superclass&Mixin {
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.expect
index 3587556..df2967e 100644
--- a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.expect
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.expect
@@ -18,11 +18,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends self::A*> extends core::Object {
-  generic-covariant-impl field self::C::T* _field = null;
+  covariant-by-class field self::C::T* _field = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::C::T* x) → dynamic {
+  method foo(covariant-by-class self::C::T* x) → dynamic {
     this.{self::C::_field} = x;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -47,9 +47,9 @@
     ;
   mixin-super-stub get _field() → self::B*
     return super.{self::C::_field};
-  mixin-super-stub set _field(generic-covariant-impl self::B* value) → void
+  mixin-super-stub set _field(covariant-by-class self::B* value) → void
     return super.{self::C::_field} = value;
-  mixin-super-stub method foo(generic-covariant-impl self::B* x) → dynamic
+  mixin-super-stub method foo(covariant-by-class self::B* x) → dynamic
     return super.{self::C::foo}(x);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.outline.expect
index 8b4326c..dec07dd 100644
--- a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.outline.expect
@@ -17,10 +17,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends self::A*> extends core::Object {
-  generic-covariant-impl field self::C::T* _field;
+  covariant-by-class field self::C::T* _field;
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method foo(generic-covariant-impl self::C::T* x) → dynamic
+  method foo(covariant-by-class self::C::T* x) → dynamic
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -43,9 +43,9 @@
     ;
   mixin-super-stub get _field() → self::B*
     return super.{self::C::_field};
-  mixin-super-stub set _field(generic-covariant-impl self::B* value) → void
+  mixin-super-stub set _field(covariant-by-class self::B* value) → void
     return super.{self::C::_field} = value;
-  mixin-super-stub method foo(generic-covariant-impl self::B* x) → dynamic
+  mixin-super-stub method foo(covariant-by-class self::B* x) → dynamic
     return super.{self::C::foo}(x);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.transformed.expect
index 408bf4c..bfba41a 100644
--- a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.weak.transformed.expect
@@ -18,11 +18,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends self::A*> extends core::Object {
-  generic-covariant-impl field self::C::T* _field = null;
+  covariant-by-class field self::C::T* _field = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::C::T* x) → dynamic {
+  method foo(covariant-by-class self::C::T* x) → dynamic {
     this.{self::C::_field} = x;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -42,11 +42,11 @@
     ;
 }
 abstract class _Foo&Object&C extends core::Object implements self::C<self::B*> /*isAnonymousMixin,isEliminatedMixin*/  {
-  generic-covariant-impl field self::B* _field = null;
+  covariant-by-class field self::B* _field = null;
   synthetic constructor •() → self::_Foo&Object&C*
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::B* x) → dynamic {
+  method foo(covariant-by-class self::B* x) → dynamic {
     this.{self::C::_field} = x;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.expect
index 5e6241d..5f06498 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.expect
@@ -3,21 +3,21 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* field1;
-  generic-covariant-impl field () →* self::C::T* field2;
+  covariant-by-class field self::C::T* field1;
+  covariant-by-class field () →* self::C::T* field2;
   field (self::C::T*) →* void field3;
-  generic-covariant-impl field (self::C::T*) →* self::C::T* field4;
-  generic-covariant-impl field () →* () →* self::C::T* field5;
+  covariant-by-class field (self::C::T*) →* self::C::T* field4;
+  covariant-by-class field () →* () →* self::C::T* field5;
   field (() →* self::C::T*) →* void field6;
-  generic-covariant-impl field (() →* self::C::T*) →* self::C::T* field7;
-  generic-covariant-impl field ((self::C::T*) →* void) →* void field8;
-  generic-covariant-impl field ((self::C::T*) →* void) →* self::C::T* field9;
-  generic-covariant-impl field ((self::C::T*) →* self::C::T*) →* void field10;
-  generic-covariant-impl field ((self::C::T*) →* self::C::T*) →* self::C::T* field11;
-  generic-covariant-impl field <S extends self::C::T* = dynamic>() →* S* field12;
-  generic-covariant-impl field <S extends self::C::T* = dynamic>(S*) →* void field13;
-  generic-covariant-impl field <S extends self::C::T* = dynamic>(S*) →* S* field14;
-  generic-covariant-impl field (<S extends self::C::T* = dynamic>() →* S*) →* void field15;
+  covariant-by-class field (() →* self::C::T*) →* self::C::T* field7;
+  covariant-by-class field ((self::C::T*) →* void) →* void field8;
+  covariant-by-class field ((self::C::T*) →* void) →* self::C::T* field9;
+  covariant-by-class field ((self::C::T*) →* self::C::T*) →* void field10;
+  covariant-by-class field ((self::C::T*) →* self::C::T*) →* self::C::T* field11;
+  covariant-by-class field <S extends self::C::T* = dynamic>() →* S* field12;
+  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* void field13;
+  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* S* field14;
+  covariant-by-class field (<S extends self::C::T* = dynamic>() →* S*) →* void field15;
   constructor •(self::C::T* field1) → self::C<self::C::T*>*
     : self::C::field1 = field1, self::C::field2 = () → self::C::T* => field1, self::C::field3 = (self::C::T* t) → Null {}, self::C::field4 = (self::C::T* t) → self::C::T* => t, self::C::field5 = () → () →* self::C::T* => () → self::C::T* => field1, self::C::field6 = (() →* self::C::T* f) → Null {}, self::C::field7 = (() →* self::C::T* f) → self::C::T* => field1, self::C::field8 = ((self::C::T*) →* void f) → Null {}, self::C::field9 = ((self::C::T*) →* void f) → self::C::T* => field1, self::C::field10 = ((self::C::T*) →* self::C::T* f) → Null {}, self::C::field11 = ((self::C::T*) →* self::C::T* f) → self::C::T* => field1, self::C::field12 = <S extends self::C::T*>() → Null => null, self::C::field13 = <S extends self::C::T*>(S* s) → Null {}, self::C::field14 = <S extends self::C::T*>(S* s) → S* => s, self::C::field15 = (<S extends self::C::T*>() →* S* f) → Null {}, super core::Object::•()
     ;
@@ -51,94 +51,94 @@
     return this.{self::C::field14}{<S extends self::C::T* = dynamic>(S*) →* S*};
   get getter15() → (<S extends self::C::T* = dynamic>() →* S*) →* void
     return this.{self::C::field15}{(<S extends self::C::T* = dynamic>() →* S*) →* void};
-  set setter1(generic-covariant-impl self::C::T* value) → void {
+  set setter1(covariant-by-class self::C::T* value) → void {
     this.{self::C::field1} = value;
   }
-  set setter2(generic-covariant-impl () →* self::C::T* value) → void {
+  set setter2(covariant-by-class () →* self::C::T* value) → void {
     this.{self::C::field2} = value;
   }
   set setter3((self::C::T*) →* void value) → void {
     this.{self::C::field3} = value;
   }
-  set setter4(generic-covariant-impl (self::C::T*) →* self::C::T* value) → void {
+  set setter4(covariant-by-class (self::C::T*) →* self::C::T* value) → void {
     this.{self::C::field4} = value;
   }
-  set setter5(generic-covariant-impl () →* () →* self::C::T* value) → void {
+  set setter5(covariant-by-class () →* () →* self::C::T* value) → void {
     this.{self::C::field5} = value;
   }
   set setter6((() →* self::C::T*) →* void value) → void {
     this.{self::C::field6} = value;
   }
-  set setter7(generic-covariant-impl (() →* self::C::T*) →* self::C::T* value) → void {
+  set setter7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void {
     this.{self::C::field7} = value;
   }
-  set setter8(generic-covariant-impl ((self::C::T*) →* void) →* void value) → void {
+  set setter8(covariant-by-class ((self::C::T*) →* void) →* void value) → void {
     this.{self::C::field8} = value;
   }
-  set setter9(generic-covariant-impl ((self::C::T*) →* void) →* self::C::T* value) → void {
+  set setter9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void {
     this.{self::C::field9} = value;
   }
-  set setter10(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* void value) → void {
+  set setter10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void {
     this.{self::C::field10} = value;
   }
-  set setter11(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
+  set setter11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
     this.{self::C::field11} = value;
   }
-  set setter12(generic-covariant-impl <S extends self::C::T* = dynamic>() →* S* value) → void {
+  set setter12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void {
     this.{self::C::field12} = value;
   }
-  set setter13(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* void value) → void {
+  set setter13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void {
     this.{self::C::field13} = value;
   }
-  set setter14(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
+  set setter14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
     this.{self::C::field14} = value;
   }
-  set setter15(generic-covariant-impl (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
+  set setter15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
     this.{self::C::field15} = value;
   }
-  method method1(generic-covariant-impl self::C::T* value) → void {
+  method method1(covariant-by-class self::C::T* value) → void {
     this.{self::C::field1} = value;
   }
-  method method2(generic-covariant-impl () →* self::C::T* value) → void {
+  method method2(covariant-by-class () →* self::C::T* value) → void {
     this.{self::C::field2} = value;
   }
   method method3((self::C::T*) →* void value) → void {
     this.{self::C::field3} = value;
   }
-  method method4(generic-covariant-impl (self::C::T*) →* self::C::T* value) → void {
+  method method4(covariant-by-class (self::C::T*) →* self::C::T* value) → void {
     this.{self::C::field4} = value;
   }
-  method method5(generic-covariant-impl () →* () →* self::C::T* value) → void {
+  method method5(covariant-by-class () →* () →* self::C::T* value) → void {
     this.{self::C::field5} = value;
   }
   method method6((() →* self::C::T*) →* void value) → void {
     this.{self::C::field6} = value;
   }
-  method method7(generic-covariant-impl (() →* self::C::T*) →* self::C::T* value) → void {
+  method method7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void {
     this.{self::C::field7} = value;
   }
-  method method8(generic-covariant-impl ((self::C::T*) →* void) →* void value) → void {
+  method method8(covariant-by-class ((self::C::T*) →* void) →* void value) → void {
     this.{self::C::field8} = value;
   }
-  method method9(generic-covariant-impl ((self::C::T*) →* void) →* self::C::T* value) → void {
+  method method9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void {
     this.{self::C::field9} = value;
   }
-  method method10(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* void value) → void {
+  method method10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void {
     this.{self::C::field10} = value;
   }
-  method method11(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
+  method method11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
     this.{self::C::field11} = value;
   }
-  method method12(generic-covariant-impl <S extends self::C::T* = dynamic>() →* S* value) → void {
+  method method12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void {
     this.{self::C::field12} = value;
   }
-  method method13(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* void value) → void {
+  method method13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void {
     this.{self::C::field13} = value;
   }
-  method method14(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
+  method method14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
     this.{self::C::field14} = value;
   }
-  method method15(generic-covariant-impl (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
+  method method15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
     this.{self::C::field15} = value;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.outline.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.outline.expect
index 8663996..0280a26 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.outline.expect
@@ -3,21 +3,21 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* field1;
-  generic-covariant-impl field () →* self::C::T* field2;
+  covariant-by-class field self::C::T* field1;
+  covariant-by-class field () →* self::C::T* field2;
   field (self::C::T*) →* void field3;
-  generic-covariant-impl field (self::C::T*) →* self::C::T* field4;
-  generic-covariant-impl field () →* () →* self::C::T* field5;
+  covariant-by-class field (self::C::T*) →* self::C::T* field4;
+  covariant-by-class field () →* () →* self::C::T* field5;
   field (() →* self::C::T*) →* void field6;
-  generic-covariant-impl field (() →* self::C::T*) →* self::C::T* field7;
-  generic-covariant-impl field ((self::C::T*) →* void) →* void field8;
-  generic-covariant-impl field ((self::C::T*) →* void) →* self::C::T* field9;
-  generic-covariant-impl field ((self::C::T*) →* self::C::T*) →* void field10;
-  generic-covariant-impl field ((self::C::T*) →* self::C::T*) →* self::C::T* field11;
-  generic-covariant-impl field <S extends self::C::T* = dynamic>() →* S* field12;
-  generic-covariant-impl field <S extends self::C::T* = dynamic>(S*) →* void field13;
-  generic-covariant-impl field <S extends self::C::T* = dynamic>(S*) →* S* field14;
-  generic-covariant-impl field (<S extends self::C::T* = dynamic>() →* S*) →* void field15;
+  covariant-by-class field (() →* self::C::T*) →* self::C::T* field7;
+  covariant-by-class field ((self::C::T*) →* void) →* void field8;
+  covariant-by-class field ((self::C::T*) →* void) →* self::C::T* field9;
+  covariant-by-class field ((self::C::T*) →* self::C::T*) →* void field10;
+  covariant-by-class field ((self::C::T*) →* self::C::T*) →* self::C::T* field11;
+  covariant-by-class field <S extends self::C::T* = dynamic>() →* S* field12;
+  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* void field13;
+  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* S* field14;
+  covariant-by-class field (<S extends self::C::T* = dynamic>() →* S*) →* void field15;
   constructor •(self::C::T* field1) → self::C<self::C::T*>*
     ;
   get getter1() → self::C::T*
@@ -50,65 +50,65 @@
     ;
   get getter15() → (<S extends self::C::T* = dynamic>() →* S*) →* void
     ;
-  set setter1(generic-covariant-impl self::C::T* value) → void
+  set setter1(covariant-by-class self::C::T* value) → void
     ;
-  set setter2(generic-covariant-impl () →* self::C::T* value) → void
+  set setter2(covariant-by-class () →* self::C::T* value) → void
     ;
   set setter3((self::C::T*) →* void value) → void
     ;
-  set setter4(generic-covariant-impl (self::C::T*) →* self::C::T* value) → void
+  set setter4(covariant-by-class (self::C::T*) →* self::C::T* value) → void
     ;
-  set setter5(generic-covariant-impl () →* () →* self::C::T* value) → void
+  set setter5(covariant-by-class () →* () →* self::C::T* value) → void
     ;
   set setter6((() →* self::C::T*) →* void value) → void
     ;
-  set setter7(generic-covariant-impl (() →* self::C::T*) →* self::C::T* value) → void
+  set setter7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void
     ;
-  set setter8(generic-covariant-impl ((self::C::T*) →* void) →* void value) → void
+  set setter8(covariant-by-class ((self::C::T*) →* void) →* void value) → void
     ;
-  set setter9(generic-covariant-impl ((self::C::T*) →* void) →* self::C::T* value) → void
+  set setter9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void
     ;
-  set setter10(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* void value) → void
+  set setter10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void
     ;
-  set setter11(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void
+  set setter11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void
     ;
-  set setter12(generic-covariant-impl <S extends self::C::T* = dynamic>() →* S* value) → void
+  set setter12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void
     ;
-  set setter13(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* void value) → void
+  set setter13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void
     ;
-  set setter14(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* S* value) → void
+  set setter14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void
     ;
-  set setter15(generic-covariant-impl (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void
+  set setter15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void
     ;
-  method method1(generic-covariant-impl self::C::T* value) → void
+  method method1(covariant-by-class self::C::T* value) → void
     ;
-  method method2(generic-covariant-impl () →* self::C::T* value) → void
+  method method2(covariant-by-class () →* self::C::T* value) → void
     ;
   method method3((self::C::T*) →* void value) → void
     ;
-  method method4(generic-covariant-impl (self::C::T*) →* self::C::T* value) → void
+  method method4(covariant-by-class (self::C::T*) →* self::C::T* value) → void
     ;
-  method method5(generic-covariant-impl () →* () →* self::C::T* value) → void
+  method method5(covariant-by-class () →* () →* self::C::T* value) → void
     ;
   method method6((() →* self::C::T*) →* void value) → void
     ;
-  method method7(generic-covariant-impl (() →* self::C::T*) →* self::C::T* value) → void
+  method method7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void
     ;
-  method method8(generic-covariant-impl ((self::C::T*) →* void) →* void value) → void
+  method method8(covariant-by-class ((self::C::T*) →* void) →* void value) → void
     ;
-  method method9(generic-covariant-impl ((self::C::T*) →* void) →* self::C::T* value) → void
+  method method9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void
     ;
-  method method10(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* void value) → void
+  method method10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void
     ;
-  method method11(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void
+  method method11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void
     ;
-  method method12(generic-covariant-impl <S extends self::C::T* = dynamic>() →* S* value) → void
+  method method12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void
     ;
-  method method13(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* void value) → void
+  method method13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void
     ;
-  method method14(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* S* value) → void
+  method method14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void
     ;
-  method method15(generic-covariant-impl (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void
+  method method15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.transformed.expect
index 5e6241d..5f06498 100644
--- a/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/non_covariant_checks.dart.weak.transformed.expect
@@ -3,21 +3,21 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* field1;
-  generic-covariant-impl field () →* self::C::T* field2;
+  covariant-by-class field self::C::T* field1;
+  covariant-by-class field () →* self::C::T* field2;
   field (self::C::T*) →* void field3;
-  generic-covariant-impl field (self::C::T*) →* self::C::T* field4;
-  generic-covariant-impl field () →* () →* self::C::T* field5;
+  covariant-by-class field (self::C::T*) →* self::C::T* field4;
+  covariant-by-class field () →* () →* self::C::T* field5;
   field (() →* self::C::T*) →* void field6;
-  generic-covariant-impl field (() →* self::C::T*) →* self::C::T* field7;
-  generic-covariant-impl field ((self::C::T*) →* void) →* void field8;
-  generic-covariant-impl field ((self::C::T*) →* void) →* self::C::T* field9;
-  generic-covariant-impl field ((self::C::T*) →* self::C::T*) →* void field10;
-  generic-covariant-impl field ((self::C::T*) →* self::C::T*) →* self::C::T* field11;
-  generic-covariant-impl field <S extends self::C::T* = dynamic>() →* S* field12;
-  generic-covariant-impl field <S extends self::C::T* = dynamic>(S*) →* void field13;
-  generic-covariant-impl field <S extends self::C::T* = dynamic>(S*) →* S* field14;
-  generic-covariant-impl field (<S extends self::C::T* = dynamic>() →* S*) →* void field15;
+  covariant-by-class field (() →* self::C::T*) →* self::C::T* field7;
+  covariant-by-class field ((self::C::T*) →* void) →* void field8;
+  covariant-by-class field ((self::C::T*) →* void) →* self::C::T* field9;
+  covariant-by-class field ((self::C::T*) →* self::C::T*) →* void field10;
+  covariant-by-class field ((self::C::T*) →* self::C::T*) →* self::C::T* field11;
+  covariant-by-class field <S extends self::C::T* = dynamic>() →* S* field12;
+  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* void field13;
+  covariant-by-class field <S extends self::C::T* = dynamic>(S*) →* S* field14;
+  covariant-by-class field (<S extends self::C::T* = dynamic>() →* S*) →* void field15;
   constructor •(self::C::T* field1) → self::C<self::C::T*>*
     : self::C::field1 = field1, self::C::field2 = () → self::C::T* => field1, self::C::field3 = (self::C::T* t) → Null {}, self::C::field4 = (self::C::T* t) → self::C::T* => t, self::C::field5 = () → () →* self::C::T* => () → self::C::T* => field1, self::C::field6 = (() →* self::C::T* f) → Null {}, self::C::field7 = (() →* self::C::T* f) → self::C::T* => field1, self::C::field8 = ((self::C::T*) →* void f) → Null {}, self::C::field9 = ((self::C::T*) →* void f) → self::C::T* => field1, self::C::field10 = ((self::C::T*) →* self::C::T* f) → Null {}, self::C::field11 = ((self::C::T*) →* self::C::T* f) → self::C::T* => field1, self::C::field12 = <S extends self::C::T*>() → Null => null, self::C::field13 = <S extends self::C::T*>(S* s) → Null {}, self::C::field14 = <S extends self::C::T*>(S* s) → S* => s, self::C::field15 = (<S extends self::C::T*>() →* S* f) → Null {}, super core::Object::•()
     ;
@@ -51,94 +51,94 @@
     return this.{self::C::field14}{<S extends self::C::T* = dynamic>(S*) →* S*};
   get getter15() → (<S extends self::C::T* = dynamic>() →* S*) →* void
     return this.{self::C::field15}{(<S extends self::C::T* = dynamic>() →* S*) →* void};
-  set setter1(generic-covariant-impl self::C::T* value) → void {
+  set setter1(covariant-by-class self::C::T* value) → void {
     this.{self::C::field1} = value;
   }
-  set setter2(generic-covariant-impl () →* self::C::T* value) → void {
+  set setter2(covariant-by-class () →* self::C::T* value) → void {
     this.{self::C::field2} = value;
   }
   set setter3((self::C::T*) →* void value) → void {
     this.{self::C::field3} = value;
   }
-  set setter4(generic-covariant-impl (self::C::T*) →* self::C::T* value) → void {
+  set setter4(covariant-by-class (self::C::T*) →* self::C::T* value) → void {
     this.{self::C::field4} = value;
   }
-  set setter5(generic-covariant-impl () →* () →* self::C::T* value) → void {
+  set setter5(covariant-by-class () →* () →* self::C::T* value) → void {
     this.{self::C::field5} = value;
   }
   set setter6((() →* self::C::T*) →* void value) → void {
     this.{self::C::field6} = value;
   }
-  set setter7(generic-covariant-impl (() →* self::C::T*) →* self::C::T* value) → void {
+  set setter7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void {
     this.{self::C::field7} = value;
   }
-  set setter8(generic-covariant-impl ((self::C::T*) →* void) →* void value) → void {
+  set setter8(covariant-by-class ((self::C::T*) →* void) →* void value) → void {
     this.{self::C::field8} = value;
   }
-  set setter9(generic-covariant-impl ((self::C::T*) →* void) →* self::C::T* value) → void {
+  set setter9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void {
     this.{self::C::field9} = value;
   }
-  set setter10(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* void value) → void {
+  set setter10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void {
     this.{self::C::field10} = value;
   }
-  set setter11(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
+  set setter11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
     this.{self::C::field11} = value;
   }
-  set setter12(generic-covariant-impl <S extends self::C::T* = dynamic>() →* S* value) → void {
+  set setter12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void {
     this.{self::C::field12} = value;
   }
-  set setter13(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* void value) → void {
+  set setter13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void {
     this.{self::C::field13} = value;
   }
-  set setter14(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
+  set setter14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
     this.{self::C::field14} = value;
   }
-  set setter15(generic-covariant-impl (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
+  set setter15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
     this.{self::C::field15} = value;
   }
-  method method1(generic-covariant-impl self::C::T* value) → void {
+  method method1(covariant-by-class self::C::T* value) → void {
     this.{self::C::field1} = value;
   }
-  method method2(generic-covariant-impl () →* self::C::T* value) → void {
+  method method2(covariant-by-class () →* self::C::T* value) → void {
     this.{self::C::field2} = value;
   }
   method method3((self::C::T*) →* void value) → void {
     this.{self::C::field3} = value;
   }
-  method method4(generic-covariant-impl (self::C::T*) →* self::C::T* value) → void {
+  method method4(covariant-by-class (self::C::T*) →* self::C::T* value) → void {
     this.{self::C::field4} = value;
   }
-  method method5(generic-covariant-impl () →* () →* self::C::T* value) → void {
+  method method5(covariant-by-class () →* () →* self::C::T* value) → void {
     this.{self::C::field5} = value;
   }
   method method6((() →* self::C::T*) →* void value) → void {
     this.{self::C::field6} = value;
   }
-  method method7(generic-covariant-impl (() →* self::C::T*) →* self::C::T* value) → void {
+  method method7(covariant-by-class (() →* self::C::T*) →* self::C::T* value) → void {
     this.{self::C::field7} = value;
   }
-  method method8(generic-covariant-impl ((self::C::T*) →* void) →* void value) → void {
+  method method8(covariant-by-class ((self::C::T*) →* void) →* void value) → void {
     this.{self::C::field8} = value;
   }
-  method method9(generic-covariant-impl ((self::C::T*) →* void) →* self::C::T* value) → void {
+  method method9(covariant-by-class ((self::C::T*) →* void) →* self::C::T* value) → void {
     this.{self::C::field9} = value;
   }
-  method method10(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* void value) → void {
+  method method10(covariant-by-class ((self::C::T*) →* self::C::T*) →* void value) → void {
     this.{self::C::field10} = value;
   }
-  method method11(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
+  method method11(covariant-by-class ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
     this.{self::C::field11} = value;
   }
-  method method12(generic-covariant-impl <S extends self::C::T* = dynamic>() →* S* value) → void {
+  method method12(covariant-by-class <S extends self::C::T* = dynamic>() →* S* value) → void {
     this.{self::C::field12} = value;
   }
-  method method13(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* void value) → void {
+  method method13(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* void value) → void {
     this.{self::C::field13} = value;
   }
-  method method14(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
+  method method14(covariant-by-class <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
     this.{self::C::field14} = value;
   }
-  method method15(generic-covariant-impl (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
+  method method15(covariant-by-class (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
     this.{self::C::field15} = value;
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect
index 643964f..ac4c6e4 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.expect
@@ -19,10 +19,10 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
+  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
 }
 abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → self::D2*
@@ -38,10 +38,10 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
+  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
 }
 class D3 extends core::Object implements nsm::A<core::int*>, nsm::B {
   synthetic constructor •() → self::D3*
@@ -59,13 +59,13 @@
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
+  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
     return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
     return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
     return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
     return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
@@ -84,13 +84,13 @@
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
+  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
     return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
     return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
     return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
     return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
@@ -103,10 +103,10 @@
   synthetic constructor •() → nsm::A<nsm::A::T*>*
     : super core::Object::•()
     ;
-  abstract method _method1(core::int* a, core::int* b, generic-covariant-impl nsm::A::T* c, generic-covariant-impl nsm::A::T* d) → void;
-  abstract method _method2({core::int* a = #C1, core::int* b = #C1, generic-covariant-impl nsm::A::T* c = #C1, generic-covariant-impl nsm::A::T* d = #C1}) → void;
-  abstract method _method3(core::int* a, generic-covariant-impl nsm::A::T* b) → void;
-  abstract method _method4({core::int* a = #C1, generic-covariant-impl nsm::A::T* b = #C1}) → void;
+  abstract method _method1(core::int* a, core::int* b, covariant-by-class nsm::A::T* c, covariant-by-class nsm::A::T* d) → void;
+  abstract method _method2({core::int* a = #C1, core::int* b = #C1, covariant-by-class nsm::A::T* c = #C1, covariant-by-class nsm::A::T* d = #C1}) → void;
+  abstract method _method3(core::int* a, covariant-by-class nsm::A::T* b) → void;
+  abstract method _method4({core::int* a = #C1, covariant-by-class nsm::A::T* b = #C1}) → void;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -122,10 +122,10 @@
   synthetic constructor •() → nsm::B*
     : super core::Object::•()
     ;
-  abstract method _method1(core::int* x, covariant core::int* y, core::int* z, covariant core::int* w) → void;
-  abstract method _method2({core::int* a = #C1, covariant core::int* b = #C1, core::int* c = #C1, covariant core::int* d = #C1}) → void;
-  abstract method _method3(covariant core::int* x, core::int* y) → void;
-  abstract method _method4({covariant core::int* a = #C1, core::int* b = #C1}) → void;
+  abstract method _method1(core::int* x, covariant-by-declaration core::int* y, core::int* z, covariant-by-declaration core::int* w) → void;
+  abstract method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, core::int* c = #C1, covariant-by-declaration core::int* d = #C1}) → void;
+  abstract method _method3(covariant-by-declaration core::int* x, core::int* y) → void;
+  abstract method _method4({covariant-by-declaration core::int* a = #C1, core::int* b = #C1}) → void;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -151,10 +151,10 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
+  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
 }
 abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → nsm::C2*
@@ -170,10 +170,10 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
+  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
 }
 class C3 extends core::Object implements nsm::A<core::int*>, nsm::B {
   synthetic constructor •() → nsm::C3*
@@ -191,13 +191,13 @@
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
+  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
     return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
     return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
     return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
     return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
@@ -216,13 +216,13 @@
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
+  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
     return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
     return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
     return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
     return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
index 1534134..6352cee 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.outline.expect
@@ -18,10 +18,10 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void;
-  abstract forwarding-stub method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void;
+  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
+  abstract forwarding-stub method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void;
 }
 abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → self::D2*
@@ -36,10 +36,10 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void;
-  abstract forwarding-stub method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void;
+  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
+  abstract forwarding-stub method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void;
 }
 class D3 extends core::Object implements nsm::A<core::int*>, nsm::B {
   synthetic constructor •() → self::D3*
@@ -56,13 +56,13 @@
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
+  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
     return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void
+  no-such-method-forwarder method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void
     return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
     return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void
     return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation*) →* dynamic};
 }
 class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
@@ -80,13 +80,13 @@
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
+  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
     return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void
+  no-such-method-forwarder method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void
     return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
     return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void
     return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
@@ -99,10 +99,10 @@
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → nsm::A<nsm::A::T*>*
     ;
-  abstract method _method1(core::int* a, core::int* b, generic-covariant-impl nsm::A::T* c, generic-covariant-impl nsm::A::T* d) → void;
-  abstract method _method2({core::int* a, core::int* b, generic-covariant-impl nsm::A::T* c, generic-covariant-impl nsm::A::T* d}) → void;
-  abstract method _method3(core::int* a, generic-covariant-impl nsm::A::T* b) → void;
-  abstract method _method4({core::int* a, generic-covariant-impl nsm::A::T* b}) → void;
+  abstract method _method1(core::int* a, core::int* b, covariant-by-class nsm::A::T* c, covariant-by-class nsm::A::T* d) → void;
+  abstract method _method2({core::int* a, core::int* b, covariant-by-class nsm::A::T* c, covariant-by-class nsm::A::T* d}) → void;
+  abstract method _method3(core::int* a, covariant-by-class nsm::A::T* b) → void;
+  abstract method _method4({core::int* a, covariant-by-class nsm::A::T* b}) → void;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -117,10 +117,10 @@
 abstract class B extends core::Object {
   synthetic constructor •() → nsm::B*
     ;
-  abstract method _method1(core::int* x, covariant core::int* y, core::int* z, covariant core::int* w) → void;
-  abstract method _method2({core::int* a, covariant core::int* b, core::int* c, covariant core::int* d}) → void;
-  abstract method _method3(covariant core::int* x, core::int* y) → void;
-  abstract method _method4({covariant core::int* a, core::int* b}) → void;
+  abstract method _method1(core::int* x, covariant-by-declaration core::int* y, core::int* z, covariant-by-declaration core::int* w) → void;
+  abstract method _method2({core::int* a, covariant-by-declaration core::int* b, core::int* c, covariant-by-declaration core::int* d}) → void;
+  abstract method _method3(covariant-by-declaration core::int* x, core::int* y) → void;
+  abstract method _method4({covariant-by-declaration core::int* a, core::int* b}) → void;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -145,10 +145,10 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void;
-  abstract forwarding-stub method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void;
+  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
+  abstract forwarding-stub method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void;
 }
 abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → nsm::C2*
@@ -163,10 +163,10 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void;
-  abstract forwarding-stub method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void;
+  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
+  abstract forwarding-stub method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void;
 }
 class C3 extends core::Object implements nsm::A<core::int*>, nsm::B {
   synthetic constructor •() → nsm::C3*
@@ -183,13 +183,13 @@
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
+  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
     return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b, c, d]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void
+  no-such-method-forwarder method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void
     return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
     return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[a, b]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void
     return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation*) →* dynamic};
 }
 class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
@@ -207,13 +207,13 @@
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
+  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
     return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method1, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y, z, w]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d}) → void
+  no-such-method-forwarder method _method2({core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d}) → void
     return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method2, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b, #c: c, #d: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
     return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method3, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x, y]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant core::int* a, generic-covariant-impl core::int* b}) → void
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a, covariant-by-class core::int* b}) → void
     return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#_method4, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#a: a, #b: b}))){(core::Invocation*) →* dynamic};
 }
 
diff --git a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect
index 2afdeb8..60a0535 100644
--- a/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/nsm_covariance.dart.weak.transformed.expect
@@ -19,10 +19,10 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
+  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
 }
 abstract class D2 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → self::D2*
@@ -38,10 +38,10 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
+  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
 }
 class D3 extends core::Object implements nsm::A<core::int*>, nsm::B {
   synthetic constructor •() → self::D3*
@@ -59,13 +59,13 @@
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
+  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
     return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
     return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
     return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
     return this.{self::D3::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 class D4 extends core::Object implements nsm::B, nsm::A<core::int*> {
@@ -84,13 +84,13 @@
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
+  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
     return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C3, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
     return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
     return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
     return this.{self::D4::noSuchMethod}(new core::_InvocationMirror::_withType(#C13, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {}
@@ -103,10 +103,10 @@
   synthetic constructor •() → nsm::A<nsm::A::T*>*
     : super core::Object::•()
     ;
-  abstract method _method1(core::int* a, core::int* b, generic-covariant-impl nsm::A::T* c, generic-covariant-impl nsm::A::T* d) → void;
-  abstract method _method2({core::int* a = #C1, core::int* b = #C1, generic-covariant-impl nsm::A::T* c = #C1, generic-covariant-impl nsm::A::T* d = #C1}) → void;
-  abstract method _method3(core::int* a, generic-covariant-impl nsm::A::T* b) → void;
-  abstract method _method4({core::int* a = #C1, generic-covariant-impl nsm::A::T* b = #C1}) → void;
+  abstract method _method1(core::int* a, core::int* b, covariant-by-class nsm::A::T* c, covariant-by-class nsm::A::T* d) → void;
+  abstract method _method2({core::int* a = #C1, core::int* b = #C1, covariant-by-class nsm::A::T* c = #C1, covariant-by-class nsm::A::T* d = #C1}) → void;
+  abstract method _method3(core::int* a, covariant-by-class nsm::A::T* b) → void;
+  abstract method _method4({core::int* a = #C1, covariant-by-class nsm::A::T* b = #C1}) → void;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -122,10 +122,10 @@
   synthetic constructor •() → nsm::B*
     : super core::Object::•()
     ;
-  abstract method _method1(core::int* x, covariant core::int* y, core::int* z, covariant core::int* w) → void;
-  abstract method _method2({core::int* a = #C1, covariant core::int* b = #C1, core::int* c = #C1, covariant core::int* d = #C1}) → void;
-  abstract method _method3(covariant core::int* x, core::int* y) → void;
-  abstract method _method4({covariant core::int* a = #C1, core::int* b = #C1}) → void;
+  abstract method _method1(core::int* x, covariant-by-declaration core::int* y, core::int* z, covariant-by-declaration core::int* w) → void;
+  abstract method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, core::int* c = #C1, covariant-by-declaration core::int* d = #C1}) → void;
+  abstract method _method3(covariant-by-declaration core::int* x, core::int* y) → void;
+  abstract method _method4({covariant-by-declaration core::int* a = #C1, core::int* b = #C1}) → void;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -151,10 +151,10 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void;
-  abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void;
+  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
 }
 abstract class C2 extends core::Object implements nsm::B, nsm::A<core::int*> {
   synthetic constructor •() → nsm::C2*
@@ -170,10 +170,10 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void;
-  abstract forwarding-stub method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void;
-  abstract forwarding-stub method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void;
-  abstract forwarding-stub method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void;
+  abstract forwarding-stub method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void;
+  abstract forwarding-stub method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void;
+  abstract forwarding-stub method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void;
+  abstract forwarding-stub method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void;
 }
 class C3 extends core::Object implements nsm::A<core::int*>, nsm::B {
   synthetic constructor •() → nsm::C3*
@@ -191,13 +191,13 @@
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* a, covariant core::int* b, generic-covariant-impl core::int* c, covariant generic-covariant-impl core::int* d) → void
+  no-such-method-forwarder method _method1(core::int* a, covariant-by-declaration core::int* b, covariant-by-class core::int* c, covariant-by-declaration covariant-by-class core::int* d) → void
     return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(a, b, c, d)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
     return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant core::int* a, generic-covariant-impl core::int* b) → void
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* a, covariant-by-class core::int* b) → void
     return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(a, b)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
     return this.{nsm::C3::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 class C4 extends core::Object implements nsm::B, nsm::A<core::int*> {
@@ -216,13 +216,13 @@
   abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  no-such-method-forwarder method _method1(core::int* x, covariant core::int* y, generic-covariant-impl core::int* z, covariant generic-covariant-impl core::int* w) → void
+  no-such-method-forwarder method _method1(core::int* x, covariant-by-declaration core::int* y, covariant-by-class core::int* z, covariant-by-declaration covariant-by-class core::int* w) → void
     return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C14, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal4<dynamic>(x, y, z, w)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method2({core::int* a = #C1, covariant core::int* b = #C1, generic-covariant-impl core::int* c = #C1, covariant generic-covariant-impl core::int* d = #C1}) → void
+  no-such-method-forwarder method _method2({core::int* a = #C1, covariant-by-declaration core::int* b = #C1, covariant-by-class core::int* c = #C1, covariant-by-declaration covariant-by-class core::int* d = #C1}) → void
     return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C15, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b, #C10: c, #C11: d}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method3(covariant core::int* x, generic-covariant-impl core::int* y) → void
+  no-such-method-forwarder method _method3(covariant-by-declaration core::int* x, covariant-by-class core::int* y) → void
     return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C16, 0, #C4, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal2<dynamic>(x, y)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder method _method4({covariant core::int* a = #C1, generic-covariant-impl core::int* b = #C1}) → void
+  no-such-method-forwarder method _method4({covariant-by-declaration core::int* a = #C1, covariant-by-class core::int* b = #C1}) → void
     return this.{nsm::C4::noSuchMethod}(new core::_InvocationMirror::_withType(#C17, 0, #C4, #C7, core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: a, #C9: b}))){(core::Invocation*) →* dynamic};
 }
 
diff --git a/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.expect b/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.expect
index bafec9d..7426716 100644
--- a/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.expect
@@ -9,11 +9,11 @@
     ;
 }
 class Class<E extends self::Element?> extends core::Object {
-  generic-covariant-impl field self::Class::E? element;
+  covariant-by-class field self::Class::E? element;
   constructor •(self::Class::E? element) → self::Class<self::Class::E%>
     : self::Class::element = element, super core::Object::•()
     ;
-  method setElement(generic-covariant-impl self::Class::E? element) → void {
+  method setElement(covariant-by-class self::Class::E? element) → void {
     if(!(this.{self::Class::element}{self::Class::E?} =={core::Object::==}{(core::Object) → core::bool} element)) {
       this.{self::Class::element} = element;
       core::Set<self::Element> elements = col::LinkedHashSet::•<self::Element>();
diff --git a/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.outline.expect
index b66e3a9..a03631c 100644
--- a/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.outline.expect
@@ -7,10 +7,10 @@
     ;
 }
 class Class<E extends self::Element?> extends core::Object {
-  generic-covariant-impl field self::Class::E? element;
+  covariant-by-class field self::Class::E? element;
   constructor •(self::Class::E? element) → self::Class<self::Class::E%>
     ;
-  method setElement(generic-covariant-impl self::Class::E? element) → void
+  method setElement(covariant-by-class self::Class::E? element) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.transformed.expect
index 89db16d..3580a9b 100644
--- a/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/null_check_type_variable_type.dart.weak.transformed.expect
@@ -9,11 +9,11 @@
     ;
 }
 class Class<E extends self::Element?> extends core::Object {
-  generic-covariant-impl field self::Class::E? element;
+  covariant-by-class field self::Class::E? element;
   constructor •(self::Class::E? element) → self::Class<self::Class::E%>
     : self::Class::element = element, super core::Object::•()
     ;
-  method setElement(generic-covariant-impl self::Class::E? element) → void {
+  method setElement(covariant-by-class self::Class::E? element) → void {
     if(!(this.{self::Class::element}{self::Class::E?} =={core::Object::==}{(core::Object) → core::bool} element)) {
       this.{self::Class::element} = element;
       core::Set<self::Element> elements = new col::_CompactLinkedHashSet::•<self::Element>();
diff --git a/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.weak.expect b/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.weak.expect
index 47a92fc..14fa421 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.weak.expect
@@ -48,12 +48,12 @@
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
-  set x1(covariant self::A* value) → void {}
+  set x1(covariant-by-declaration self::A* value) → void {}
   set x2(self::A* value) → void {}
-  set x3(covariant self::A* value) → void {}
+  set x3(covariant-by-declaration self::A* value) → void {}
   set x4(self::A* value) → void {}
-  set x5(covariant self::A* value) → void {}
-  set x6(covariant self::B* value) → void {}
+  set x5(covariant-by-declaration self::A* value) → void {}
+  set x6(covariant-by-declaration self::B* value) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -69,11 +69,11 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  set x1(covariant self::B* value) → void {}
-  set x2(covariant self::B* value) → void {}
-  set x3(covariant self::B* value) → void {}
+  set x1(covariant-by-declaration self::B* value) → void {}
+  set x2(covariant-by-declaration self::B* value) → void {}
+  set x3(covariant-by-declaration self::B* value) → void {}
   set x4(self::B* value) → void {}
-  set x5(covariant core::String* value) → void {}
-  set x6(covariant self::A* value) → void {}
+  set x5(covariant-by-declaration core::String* value) → void {}
+  set x6(covariant-by-declaration self::A* value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.weak.outline.expect
index 1012ac6..504c4ce 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.weak.outline.expect
@@ -45,17 +45,17 @@
 class C extends core::Object {
   synthetic constructor •() → self::C*
     ;
-  set x1(covariant self::A* value) → void
+  set x1(covariant-by-declaration self::A* value) → void
     ;
   set x2(self::A* value) → void
     ;
-  set x3(covariant self::A* value) → void
+  set x3(covariant-by-declaration self::A* value) → void
     ;
   set x4(self::A* value) → void
     ;
-  set x5(covariant self::A* value) → void
+  set x5(covariant-by-declaration self::A* value) → void
     ;
-  set x6(covariant self::B* value) → void
+  set x6(covariant-by-declaration self::B* value) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -71,17 +71,17 @@
 class D extends self::C {
   synthetic constructor •() → self::D*
     ;
-  set x1(covariant self::B* value) → void
+  set x1(covariant-by-declaration self::B* value) → void
     ;
-  set x2(covariant self::B* value) → void
+  set x2(covariant-by-declaration self::B* value) → void
     ;
-  set x3(covariant self::B* value) → void
+  set x3(covariant-by-declaration self::B* value) → void
     ;
   set x4(self::B* value) → void
     ;
-  set x5(covariant core::String* value) → void
+  set x5(covariant-by-declaration core::String* value) → void
     ;
-  set x6(covariant self::A* value) → void
+  set x6(covariant-by-declaration self::A* value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.expect b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.expect
index 65a02b5..54a4764 100644
--- a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(generic-covariant-impl core::Map<self::A::T*, self::A::f::U*>* m) → void {}
+  method f<U extends core::Object* = dynamic>(covariant-by-class core::Map<self::A::T*, self::A::f::U*>* m) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,6 +22,6 @@
   synthetic constructor •() → self::B*
     : super self::A::•()
     ;
-  method f<V extends core::Object* = dynamic>(generic-covariant-impl core::Map<core::String*, self::B::f::V*>* m) → void {}
+  method f<V extends core::Object* = dynamic>(covariant-by-class core::Map<core::String*, self::B::f::V*>* m) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.outline.expect
index b90d84e..cf3b6b2 100644
--- a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::A<self::A::T*>*
     ;
-  method f<U extends core::Object* = dynamic>(generic-covariant-impl core::Map<self::A::T*, self::A::f::U*>* m) → void
+  method f<U extends core::Object* = dynamic>(covariant-by-class core::Map<self::A::T*, self::A::f::U*>* m) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -21,7 +21,7 @@
 class B extends self::A<core::String*> {
   synthetic constructor •() → self::B*
     ;
-  method f<V extends core::Object* = dynamic>(generic-covariant-impl core::Map<core::String*, self::B::f::V*>* m) → void
+  method f<V extends core::Object* = dynamic>(covariant-by-class core::Map<core::String*, self::B::f::V*>* m) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.transformed.expect b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.transformed.expect
index 65a02b5..54a4764 100644
--- a/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/override_check_two_substitutions.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
-  method f<U extends core::Object* = dynamic>(generic-covariant-impl core::Map<self::A::T*, self::A::f::U*>* m) → void {}
+  method f<U extends core::Object* = dynamic>(covariant-by-class core::Map<self::A::T*, self::A::f::U*>* m) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,6 +22,6 @@
   synthetic constructor •() → self::B*
     : super self::A::•()
     ;
-  method f<V extends core::Object* = dynamic>(generic-covariant-impl core::Map<core::String*, self::B::f::V*>* m) → void {}
+  method f<V extends core::Object* = dynamic>(covariant-by-class core::Map<core::String*, self::B::f::V*>* m) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.expect b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.expect
index 737d41c..ceabd22 100644
--- a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.expect
+++ b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.expect
@@ -48,12 +48,12 @@
   synthetic constructor •() → self::C*
     : super core::Object::•()
     ;
-  method f1(covariant self::A* x) → void {}
+  method f1(covariant-by-declaration self::A* x) → void {}
   method f2(self::A* x) → void {}
-  method f3(covariant self::A* x) → void {}
+  method f3(covariant-by-declaration self::A* x) → void {}
   method f4(self::A* x) → void {}
-  method f5(covariant self::A* x) → void {}
-  method f6(covariant self::B* x) → void {}
+  method f5(covariant-by-declaration self::A* x) → void {}
+  method f6(covariant-by-declaration self::B* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -69,11 +69,11 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  method f1(covariant self::B* x) → void {}
-  method f2(covariant self::B* x) → void {}
-  method f3(covariant self::B* x) → void {}
+  method f1(covariant-by-declaration self::B* x) → void {}
+  method f2(covariant-by-declaration self::B* x) → void {}
+  method f3(covariant-by-declaration self::B* x) → void {}
   method f4(self::B* x) → void {}
-  method f5(covariant core::String* x) → void {}
-  method f6(covariant self::A* x) → void {}
+  method f5(covariant-by-declaration core::String* x) → void {}
+  method f6(covariant-by-declaration self::A* x) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.outline.expect b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.outline.expect
index 5efc80c..4d18123 100644
--- a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.weak.outline.expect
@@ -45,17 +45,17 @@
 class C extends core::Object {
   synthetic constructor •() → self::C*
     ;
-  method f1(covariant self::A* x) → void
+  method f1(covariant-by-declaration self::A* x) → void
     ;
   method f2(self::A* x) → void
     ;
-  method f3(covariant self::A* x) → void
+  method f3(covariant-by-declaration self::A* x) → void
     ;
   method f4(self::A* x) → void
     ;
-  method f5(covariant self::A* x) → void
+  method f5(covariant-by-declaration self::A* x) → void
     ;
-  method f6(covariant self::B* x) → void
+  method f6(covariant-by-declaration self::B* x) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -71,17 +71,17 @@
 class D extends self::C {
   synthetic constructor •() → self::D*
     ;
-  method f1(covariant self::B* x) → void
+  method f1(covariant-by-declaration self::B* x) → void
     ;
-  method f2(covariant self::B* x) → void
+  method f2(covariant-by-declaration self::B* x) → void
     ;
-  method f3(covariant self::B* x) → void
+  method f3(covariant-by-declaration self::B* x) → void
     ;
   method f4(self::B* x) → void
     ;
-  method f5(covariant core::String* x) → void
+  method f5(covariant-by-declaration core::String* x) → void
     ;
-  method f6(covariant self::A* x) → void
+  method f6(covariant-by-declaration self::A* x) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/promoted_access.dart.weak.expect b/pkg/front_end/testcases/general/promoted_access.dart.weak.expect
index 5baecb1..7439751 100644
--- a/pkg/front_end/testcases/general/promoted_access.dart.weak.expect
+++ b/pkg/front_end/testcases/general/promoted_access.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Class<self::Class::T*>*
     : super core::Object::•()
     ;
-  method method(generic-covariant-impl self::Class::T* o) → dynamic {
+  method method(covariant-by-class self::Class::T* o) → dynamic {
     if(o is self::Class<dynamic>*) {
       o{self::Class::T* & self::Class<dynamic>* /* '*' & '*' = '*' */}.{self::Class::method}(null){(dynamic) →* dynamic};
     }
diff --git a/pkg/front_end/testcases/general/promoted_access.dart.weak.outline.expect b/pkg/front_end/testcases/general/promoted_access.dart.weak.outline.expect
index 0b52249..c14fd6b 100644
--- a/pkg/front_end/testcases/general/promoted_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/promoted_access.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class Class<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::Class<self::Class::T*>*
     ;
-  method method(generic-covariant-impl self::Class::T* o) → dynamic
+  method method(covariant-by-class self::Class::T* o) → dynamic
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/promoted_access.dart.weak.transformed.expect b/pkg/front_end/testcases/general/promoted_access.dart.weak.transformed.expect
index 5baecb1..7439751 100644
--- a/pkg/front_end/testcases/general/promoted_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/promoted_access.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Class<self::Class::T*>*
     : super core::Object::•()
     ;
-  method method(generic-covariant-impl self::Class::T* o) → dynamic {
+  method method(covariant-by-class self::Class::T* o) → dynamic {
     if(o is self::Class<dynamic>*) {
       o{self::Class::T* & self::Class<dynamic>* /* '*' & '*' = '*' */}.{self::Class::method}(null){(dynamic) →* dynamic};
     }
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
index f2aaee2..e5a7448 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.expect
@@ -33,7 +33,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::_X<self::A::T*>* x;
+  covariant-by-class field self::_X<self::A::T*>* x;
   constructor •(self::_X<self::A::T*>* x) → self::A<self::A::T*>*
     : self::A::x = x, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
index aed68b9..55c2b59 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.outline.expect
@@ -33,7 +33,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::_X<self::A::T*>* x;
+  covariant-by-class field self::_X<self::A::T*>* x;
   constructor •(self::_X<self::A::T*>* x) → self::A<self::A::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
index f2aaee2..e5a7448 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::_X<self::A::T*>* x;
+  covariant-by-class field self::_X<self::A::T*>* x;
   constructor •(self::_X<self::A::T*>* x) → self::A<self::A::T*>*
     : self::A::x = x, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.expect
index 6324f0a..a539f39 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.expect
@@ -18,7 +18,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Foo<T extends self::X*> extends core::Object {
-  generic-covariant-impl field self::Foo::T* x;
+  covariant-by-class field self::Foo::T* x;
   constructor fromX(self::X* _init) → self::Foo<self::Foo::T*>*
     : this self::Foo::_internal(x: _init as{TypeError} self::Foo::T*)
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.outline.expect
index b816f4d..9c7ccb9 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.outline.expect
@@ -17,7 +17,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Foo<T extends self::X*> extends core::Object {
-  generic-covariant-impl field self::Foo::T* x;
+  covariant-by-class field self::Foo::T* x;
   constructor fromX(self::X* _init) → self::Foo<self::Foo::T*>*
     ;
   constructor fromT(self::Foo::T* _init) → self::Foo<self::Foo::T*>*
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.transformed.expect
index 6324f0a..a539f39 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.weak.transformed.expect
@@ -18,7 +18,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Foo<T extends self::X*> extends core::Object {
-  generic-covariant-impl field self::Foo::T* x;
+  covariant-by-class field self::Foo::T* x;
   constructor fromX(self::X* _init) → self::Foo<self::Foo::T*>*
     : this self::Foo::_internal(x: _init as{TypeError} self::Foo::T*)
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.expect
index 0375d90..6c401a6 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class Foo<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::Foo::T* x;
+  covariant-by-class field self::Foo::T* x;
   constructor from(core::String* _init) → self::Foo<self::Foo::T*>*
     : this self::Foo::_internal(x: invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'String' can't be assigned to the parameter type 'T'.
   Foo.from(String _init) : this._internal(x: _init);
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect
index 4702554..1126f00 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::Foo::T* x;
+  covariant-by-class field self::Foo::T* x;
   constructor from(core::String* _init) → self::Foo<self::Foo::T*>*
     ;
   constructor _internal({self::Foo::T* x}) → self::Foo<self::Foo::T*>*
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.transformed.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.transformed.expect
index 0375d90..6c401a6 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class Foo<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::Foo::T* x;
+  covariant-by-class field self::Foo::T* x;
   constructor from(core::String* _init) → self::Foo<self::Foo::T*>*
     : this self::Foo::_internal(x: invalid-expression "pkg/front_end/testcases/general/redirecting_initializer_arguments_test.dart:12:46: Error: The argument type 'String' can't be assigned to the parameter type 'T'.
   Foo.from(String _init) : this._internal(x: _init);
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.expect
index e1e3ce5..7131789 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.expect
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.expect
@@ -31,14 +31,14 @@
     : super core::Iterable::•()
     ;
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
+  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* toElement) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
   abstract member-signature method where((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::where
   abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::C::whereType::T*>*; -> core::Iterable::whereType
   abstract member-signature method expand<T extends core::Object* = dynamic>((core::Object*) →* core::Iterable<self::C::expand::T*>* toElements) → core::Iterable<self::C::expand::T*>*; -> core::Iterable::expand
   abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
   abstract member-signature method forEach((core::Object*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(generic-covariant-impl (core::Object*, core::Object*) →* core::Object* combine) → core::Object*; -> core::Iterable::reduce
+  abstract member-signature method reduce(covariant-by-class (core::Object*, core::Object*) →* core::Object* combine) → core::Object*; -> core::Iterable::reduce
   abstract member-signature method fold<T extends core::Object* = dynamic>(self::C::fold::T* initialValue, (self::C::fold::T*, core::Object*) →* self::C::fold::T* combine) → self::C::fold::T*; -> core::Iterable::fold
   abstract member-signature method every((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::every
   abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
@@ -52,9 +52,9 @@
   abstract member-signature method takeWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::takeWhile
   abstract member-signature method skip(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::skip
   abstract member-signature method skipWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::Object*) →* core::bool* test, {generic-covariant-impl () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::Object*) →* core::bool* test, {generic-covariant-impl () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::Object*) →* core::bool* test, {generic-covariant-impl () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::singleWhere
+  abstract member-signature method firstWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::firstWhere
+  abstract member-signature method lastWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::lastWhere
+  abstract member-signature method singleWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::singleWhere
   abstract member-signature method elementAt(core::int* index) → core::Object*; -> core::Iterable::elementAt
   abstract member-signature method toString() → core::String*; -> core::Iterable::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.outline.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.outline.expect
index 43d09ff..3c5b61f 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.outline.expect
@@ -23,14 +23,14 @@
   synthetic constructor •() → self::C*
     ;
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
+  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* toElement) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
   abstract member-signature method where((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::where
   abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::C::whereType::T*>*; -> core::Iterable::whereType
   abstract member-signature method expand<T extends core::Object* = dynamic>((core::Object*) →* core::Iterable<self::C::expand::T*>* toElements) → core::Iterable<self::C::expand::T*>*; -> core::Iterable::expand
   abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
   abstract member-signature method forEach((core::Object*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(generic-covariant-impl (core::Object*, core::Object*) →* core::Object* combine) → core::Object*; -> core::Iterable::reduce
+  abstract member-signature method reduce(covariant-by-class (core::Object*, core::Object*) →* core::Object* combine) → core::Object*; -> core::Iterable::reduce
   abstract member-signature method fold<T extends core::Object* = dynamic>(self::C::fold::T* initialValue, (self::C::fold::T*, core::Object*) →* self::C::fold::T* combine) → self::C::fold::T*; -> core::Iterable::fold
   abstract member-signature method every((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::every
   abstract member-signature method join([core::String* separator]) → core::String*; -> core::Iterable::join
@@ -44,9 +44,9 @@
   abstract member-signature method takeWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::takeWhile
   abstract member-signature method skip(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::skip
   abstract member-signature method skipWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::Object*) →* core::bool* test, {generic-covariant-impl () →* core::Object* orElse}) → core::Object*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::Object*) →* core::bool* test, {generic-covariant-impl () →* core::Object* orElse}) → core::Object*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::Object*) →* core::bool* test, {generic-covariant-impl () →* core::Object* orElse}) → core::Object*; -> core::Iterable::singleWhere
+  abstract member-signature method firstWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse}) → core::Object*; -> core::Iterable::firstWhere
+  abstract member-signature method lastWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse}) → core::Object*; -> core::Iterable::lastWhere
+  abstract member-signature method singleWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse}) → core::Object*; -> core::Iterable::singleWhere
   abstract member-signature method elementAt(core::int* index) → core::Object*; -> core::Iterable::elementAt
   abstract member-signature method toString() → core::String*; -> core::Iterable::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.transformed.expect b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.transformed.expect
index e1e3ce5..7131789 100644
--- a/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/sdk_diagnostic.dart.weak.transformed.expect
@@ -31,14 +31,14 @@
     : super core::Iterable::•()
     ;
   abstract member-signature method cast<R extends core::Object* = dynamic>() → core::Iterable<self::C::cast::R*>*; -> core::Iterable::cast
-  abstract member-signature method followedBy(generic-covariant-impl core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
+  abstract member-signature method followedBy(covariant-by-class core::Iterable<core::Object*>* other) → core::Iterable<core::Object*>*; -> core::Iterable::followedBy
   abstract member-signature method map<T extends core::Object* = dynamic>((core::Object*) →* self::C::map::T* toElement) → core::Iterable<self::C::map::T*>*; -> core::Iterable::map
   abstract member-signature method where((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::where
   abstract member-signature method whereType<T extends core::Object* = dynamic>() → core::Iterable<self::C::whereType::T*>*; -> core::Iterable::whereType
   abstract member-signature method expand<T extends core::Object* = dynamic>((core::Object*) →* core::Iterable<self::C::expand::T*>* toElements) → core::Iterable<self::C::expand::T*>*; -> core::Iterable::expand
   abstract member-signature method contains(core::Object* element) → core::bool*; -> core::Iterable::contains
   abstract member-signature method forEach((core::Object*) →* void action) → void; -> core::Iterable::forEach
-  abstract member-signature method reduce(generic-covariant-impl (core::Object*, core::Object*) →* core::Object* combine) → core::Object*; -> core::Iterable::reduce
+  abstract member-signature method reduce(covariant-by-class (core::Object*, core::Object*) →* core::Object* combine) → core::Object*; -> core::Iterable::reduce
   abstract member-signature method fold<T extends core::Object* = dynamic>(self::C::fold::T* initialValue, (self::C::fold::T*, core::Object*) →* self::C::fold::T* combine) → self::C::fold::T*; -> core::Iterable::fold
   abstract member-signature method every((core::Object*) →* core::bool* test) → core::bool*; -> core::Iterable::every
   abstract member-signature method join([core::String* separator = #C1]) → core::String*; -> core::Iterable::join
@@ -52,9 +52,9 @@
   abstract member-signature method takeWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::takeWhile
   abstract member-signature method skip(core::int* count) → core::Iterable<core::Object*>*; -> core::Iterable::skip
   abstract member-signature method skipWhile((core::Object*) →* core::bool* test) → core::Iterable<core::Object*>*; -> core::Iterable::skipWhile
-  abstract member-signature method firstWhere((core::Object*) →* core::bool* test, {generic-covariant-impl () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::firstWhere
-  abstract member-signature method lastWhere((core::Object*) →* core::bool* test, {generic-covariant-impl () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::lastWhere
-  abstract member-signature method singleWhere((core::Object*) →* core::bool* test, {generic-covariant-impl () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::singleWhere
+  abstract member-signature method firstWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::firstWhere
+  abstract member-signature method lastWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::lastWhere
+  abstract member-signature method singleWhere((core::Object*) →* core::bool* test, {covariant-by-class () →* core::Object* orElse = #C3}) → core::Object*; -> core::Iterable::singleWhere
   abstract member-signature method elementAt(core::int* index) → core::Object*; -> core::Iterable::elementAt
   abstract member-signature method toString() → core::String*; -> core::Iterable::toString
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.expect
index be8f096..9153148 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.expect
@@ -29,14 +29,14 @@
   synthetic constructor •() → self::Class*
     : super self::SuperClass::•()
     ;
-  forwarding-stub forwarding-semi-stub set setter(covariant core::int* o) → void
+  forwarding-stub forwarding-semi-stub set setter(covariant-by-declaration core::int* o) → void
     return super.{self::SuperClass::setter} = o;
 }
 class SubClass extends self::Class {
   synthetic constructor •() → self::SubClass*
     : super self::Class::•()
     ;
-  set setter(covariant core::int* o) → void {
+  set setter(covariant-by-declaration core::int* o) → void {
     super.{self::Class::setter} = invalid-expression "pkg/front_end/testcases/general/super_set_covariant.dart:18:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     super.setter = '\$o';
                        ^" in "${o}" as{TypeError} core::int*;
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.outline.expect
index 550fdb5..7500961 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.outline.expect
@@ -21,13 +21,13 @@
 abstract class Class extends self::SuperClass {
   synthetic constructor •() → self::Class*
     ;
-  forwarding-stub forwarding-semi-stub set setter(covariant core::int* o) → void
+  forwarding-stub forwarding-semi-stub set setter(covariant-by-declaration core::int* o) → void
     return super.{self::SuperClass::setter} = o;
 }
 class SubClass extends self::Class {
   synthetic constructor •() → self::SubClass*
     ;
-  set setter(covariant core::int* o) → void
+  set setter(covariant-by-declaration core::int* o) → void
     ;
 }
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.transformed.expect
index be8f096..9153148 100644
--- a/pkg/front_end/testcases/general/super_set_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/super_set_covariant.dart.weak.transformed.expect
@@ -29,14 +29,14 @@
   synthetic constructor •() → self::Class*
     : super self::SuperClass::•()
     ;
-  forwarding-stub forwarding-semi-stub set setter(covariant core::int* o) → void
+  forwarding-stub forwarding-semi-stub set setter(covariant-by-declaration core::int* o) → void
     return super.{self::SuperClass::setter} = o;
 }
 class SubClass extends self::Class {
   synthetic constructor •() → self::SubClass*
     : super self::Class::•()
     ;
-  set setter(covariant core::int* o) → void {
+  set setter(covariant-by-declaration core::int* o) → void {
     super.{self::Class::setter} = invalid-expression "pkg/front_end/testcases/general/super_set_covariant.dart:18:24: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
     super.setter = '\$o';
                        ^" in "${o}" as{TypeError} core::int*;
diff --git a/pkg/front_end/testcases/general/this_field_call.dart.weak.expect b/pkg/front_end/testcases/general/this_field_call.dart.weak.expect
index 4acba29..1156174 100644
--- a/pkg/front_end/testcases/general/this_field_call.dart.weak.expect
+++ b/pkg/front_end/testcases/general/this_field_call.dart.weak.expect
@@ -7,7 +7,7 @@
   constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
     : self::A::f = f, super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::A::T* x) → dynamic
+  method foo(covariant-by-class self::A::T* x) → dynamic
     return let final self::A::T* #t1 = x in this.{self::A::f}{(self::A::T*) →* void}(#t1){(self::A::T*) →* void};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/this_field_call.dart.weak.outline.expect b/pkg/front_end/testcases/general/this_field_call.dart.weak.outline.expect
index 7e7c14b..5ef3cd8 100644
--- a/pkg/front_end/testcases/general/this_field_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/this_field_call.dart.weak.outline.expect
@@ -6,7 +6,7 @@
   field (self::A::T*) →* void f;
   constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
     ;
-  method foo(generic-covariant-impl self::A::T* x) → dynamic
+  method foo(covariant-by-class self::A::T* x) → dynamic
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/this_field_call.dart.weak.transformed.expect b/pkg/front_end/testcases/general/this_field_call.dart.weak.transformed.expect
index 4acba29..1156174 100644
--- a/pkg/front_end/testcases/general/this_field_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/this_field_call.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
   constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
     : self::A::f = f, super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::A::T* x) → dynamic
+  method foo(covariant-by-class self::A::T* x) → dynamic
     return let final self::A::T* #t1 = x in this.{self::A::f}{(self::A::T*) →* void}(#t1){(self::A::T*) →* void};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect
index 9c945b5..c281ff0 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.expect
@@ -11,8 +11,8 @@
 import "dart:core" as core;
 
 class DynamicClass<T extends dynamic, S extends self::DynamicClass::T* = dynamic> extends core::Object {
-  generic-covariant-impl field self::DynamicClass::T* field1;
-  generic-covariant-impl field self::DynamicClass::T* field2;
+  covariant-by-class field self::DynamicClass::T* field1;
+  covariant-by-class field self::DynamicClass::T* field2;
   constructor •(self::DynamicClass::T* field1, self::DynamicClass::T* field2) → self::DynamicClass<self::DynamicClass::T*, self::DynamicClass::S*>*
     : self::DynamicClass::field1 = field1, self::DynamicClass::field2 = field2, super core::Object::•()
     ;
@@ -30,8 +30,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NumClass<T extends core::num*, S extends self::NumClass::T* = core::num*> extends core::Object {
-  generic-covariant-impl field self::NumClass::T* field1;
-  generic-covariant-impl field self::NumClass::S* field2;
+  covariant-by-class field self::NumClass::T* field1;
+  covariant-by-class field self::NumClass::S* field2;
   constructor •(self::NumClass::T* field1, self::NumClass::S* field2) → self::NumClass<self::NumClass::T*, self::NumClass::S*>*
     : self::NumClass::field1 = field1, self::NumClass::field2 = field2, super core::Object::•()
     ;
@@ -54,12 +54,12 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class<X5 extends self::Class::X4* = core::int*, X4 extends self::Class::X3* = core::int*, X3 extends self::Class::X2* = core::int*, X2 extends self::Class::X1* = core::int*, X1 extends self::Class::X0* = core::int*, X0 extends core::int*> extends core::Object {
-  generic-covariant-impl field self::Class::X0* field0 = null;
-  generic-covariant-impl field self::Class::X1* field1 = null;
-  generic-covariant-impl field self::Class::X2* field2 = null;
-  generic-covariant-impl field self::Class::X3* field3 = null;
-  generic-covariant-impl field self::Class::X4* field4 = null;
-  generic-covariant-impl field self::Class::X5* field5 = null;
+  covariant-by-class field self::Class::X0* field0 = null;
+  covariant-by-class field self::Class::X1* field1 = null;
+  covariant-by-class field self::Class::X2* field2 = null;
+  covariant-by-class field self::Class::X3* field3 = null;
+  covariant-by-class field self::Class::X4* field4 = null;
+  covariant-by-class field self::Class::X5* field5 = null;
   synthetic constructor •() → self::Class<self::Class::X5*, self::Class::X4*, self::Class::X3*, self::Class::X2*, self::Class::X1*, self::Class::X0*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.outline.expect
index b02e918..adae324 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.outline.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 class DynamicClass<T extends dynamic, S extends self::DynamicClass::T* = dynamic> extends core::Object {
-  generic-covariant-impl field self::DynamicClass::T* field1;
-  generic-covariant-impl field self::DynamicClass::T* field2;
+  covariant-by-class field self::DynamicClass::T* field1;
+  covariant-by-class field self::DynamicClass::T* field2;
   constructor •(self::DynamicClass::T* field1, self::DynamicClass::T* field2) → self::DynamicClass<self::DynamicClass::T*, self::DynamicClass::S*>*
     ;
   method method() → dynamic
@@ -21,8 +21,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NumClass<T extends core::num*, S extends self::NumClass::T* = core::num*> extends core::Object {
-  generic-covariant-impl field self::NumClass::T* field1;
-  generic-covariant-impl field self::NumClass::S* field2;
+  covariant-by-class field self::NumClass::T* field1;
+  covariant-by-class field self::NumClass::S* field2;
   constructor •(self::NumClass::T* field1, self::NumClass::S* field2) → self::NumClass<self::NumClass::T*, self::NumClass::S*>*
     ;
   method method1() → core::num*
@@ -41,12 +41,12 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class<X5 extends self::Class::X4* = core::int*, X4 extends self::Class::X3* = core::int*, X3 extends self::Class::X2* = core::int*, X2 extends self::Class::X1* = core::int*, X1 extends self::Class::X0* = core::int*, X0 extends core::int*> extends core::Object {
-  generic-covariant-impl field self::Class::X0* field0;
-  generic-covariant-impl field self::Class::X1* field1;
-  generic-covariant-impl field self::Class::X2* field2;
-  generic-covariant-impl field self::Class::X3* field3;
-  generic-covariant-impl field self::Class::X4* field4;
-  generic-covariant-impl field self::Class::X5* field5;
+  covariant-by-class field self::Class::X0* field0;
+  covariant-by-class field self::Class::X1* field1;
+  covariant-by-class field self::Class::X2* field2;
+  covariant-by-class field self::Class::X3* field3;
+  covariant-by-class field self::Class::X4* field4;
+  covariant-by-class field self::Class::X5* field5;
   synthetic constructor •() → self::Class<self::Class::X5*, self::Class::X4*, self::Class::X3*, self::Class::X2*, self::Class::X1*, self::Class::X0*>*
     ;
   method method() → dynamic
diff --git a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect
index ec59314..05cc13b 100644
--- a/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_bound_access.dart.weak.transformed.expect
@@ -11,8 +11,8 @@
 import "dart:core" as core;
 
 class DynamicClass<T extends dynamic, S extends self::DynamicClass::T* = dynamic> extends core::Object {
-  generic-covariant-impl field self::DynamicClass::T* field1;
-  generic-covariant-impl field self::DynamicClass::T* field2;
+  covariant-by-class field self::DynamicClass::T* field1;
+  covariant-by-class field self::DynamicClass::T* field2;
   constructor •(self::DynamicClass::T* field1, self::DynamicClass::T* field2) → self::DynamicClass<self::DynamicClass::T*, self::DynamicClass::S*>*
     : self::DynamicClass::field1 = field1, self::DynamicClass::field2 = field2, super core::Object::•()
     ;
@@ -30,8 +30,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class NumClass<T extends core::num*, S extends self::NumClass::T* = core::num*> extends core::Object {
-  generic-covariant-impl field self::NumClass::T* field1;
-  generic-covariant-impl field self::NumClass::S* field2;
+  covariant-by-class field self::NumClass::T* field1;
+  covariant-by-class field self::NumClass::S* field2;
   constructor •(self::NumClass::T* field1, self::NumClass::S* field2) → self::NumClass<self::NumClass::T*, self::NumClass::S*>*
     : self::NumClass::field1 = field1, self::NumClass::field2 = field2, super core::Object::•()
     ;
@@ -54,12 +54,12 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class<X5 extends self::Class::X4* = core::int*, X4 extends self::Class::X3* = core::int*, X3 extends self::Class::X2* = core::int*, X2 extends self::Class::X1* = core::int*, X1 extends self::Class::X0* = core::int*, X0 extends core::int*> extends core::Object {
-  generic-covariant-impl field self::Class::X0* field0 = null;
-  generic-covariant-impl field self::Class::X1* field1 = null;
-  generic-covariant-impl field self::Class::X2* field2 = null;
-  generic-covariant-impl field self::Class::X3* field3 = null;
-  generic-covariant-impl field self::Class::X4* field4 = null;
-  generic-covariant-impl field self::Class::X5* field5 = null;
+  covariant-by-class field self::Class::X0* field0 = null;
+  covariant-by-class field self::Class::X1* field1 = null;
+  covariant-by-class field self::Class::X2* field2 = null;
+  covariant-by-class field self::Class::X3* field3 = null;
+  covariant-by-class field self::Class::X4* field4 = null;
+  covariant-by-class field self::Class::X5* field5 = null;
   synthetic constructor •() → self::Class<self::Class::X5*, self::Class::X4*, self::Class::X3*, self::Class::X2*, self::Class::X1*, self::Class::X0*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.expect b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.expect
index 031bf41..47d6412f 100644
--- a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.expect
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.expect
@@ -28,7 +28,7 @@
     ;
 }
 class D<P extends core::Object* = dynamic, Q extends core::Object* = dynamic> extends self::C<core::int*, self::D::Q*, self::D::P*> {
-  generic-covariant-impl field core::Map<self::D::P*, self::D::Q*>* foo;
+  covariant-by-class field core::Map<self::D::P*, self::D::Q*>* foo;
   constructor •(dynamic tt) → self::D<self::D::P*, self::D::Q*>*
     : self::D::foo = tt as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*, super self::C::•()
     ;
@@ -58,7 +58,7 @@
 class E<P extends core::String*> extends core::Object {
   static factory •<P extends core::String*>() → self::E<self::E::•::P*>*
     return null;
-  method foo6<generic-covariant-impl T extends self::E::P*, U extends core::List<self::E::foo6::T*>* = core::List<self::E::P*>*>(core::Map<self::E::foo6::T*, self::E::foo6::U*>* map) → void {}
+  method foo6<covariant-by-class T extends self::E::P*, U extends core::List<self::E::foo6::T*>* = core::List<self::E::P*>*>(core::Map<self::E::foo6::T*, self::E::foo6::U*>* map) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -74,8 +74,8 @@
   synthetic constructor •() → self::F<self::F::T*>*
     : super core::Object::•()
     ;
-  abstract method foo7<generic-covariant-impl Q extends self::F::T*>(self::F::foo7::Q* a, covariant core::num* b, generic-covariant-impl self::F::T* c) → void;
-  abstract method foo8<generic-covariant-impl Q extends self::F::T*>(self::F::foo8::Q* a, covariant core::num* b, generic-covariant-impl self::F::T* c) → void;
+  abstract method foo7<covariant-by-class Q extends self::F::T*>(self::F::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
+  abstract method foo8<covariant-by-class Q extends self::F::T*>(self::F::foo8::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -91,7 +91,7 @@
   synthetic constructor •() → self::G<self::G::T*>*
     : super core::Object::•()
     ;
-  method foo7<generic-covariant-impl Q extends self::G::T*>(self::G::foo7::Q* a, core::int* b, generic-covariant-impl self::G::T* c) → void {}
+  method foo7<covariant-by-class Q extends self::G::T*>(self::G::foo7::Q* a, core::int* b, covariant-by-class self::G::T* c) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -107,8 +107,8 @@
   synthetic constructor •() → self::H<self::H::T*>*
     : super self::G::•()
     ;
-  method foo8<generic-covariant-impl Q extends self::H::T*>(self::H::foo8::Q* a, covariant core::int* b, generic-covariant-impl self::H::T* c) → void {}
-  forwarding-stub method foo7<generic-covariant-impl Q extends self::H::T*>(self::H::foo7::Q* a, covariant core::num* b, generic-covariant-impl self::H::T* c) → void
+  method foo8<covariant-by-class Q extends self::H::T*>(self::H::foo8::Q* a, covariant-by-declaration core::int* b, covariant-by-class self::H::T* c) → void {}
+  forwarding-stub method foo7<covariant-by-class Q extends self::H::T*>(self::H::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::H::T* c) → void
     return super.{self::G::foo7}<self::H::foo7::Q*>(a, b as core::int*, c);
 }
 static field core::List<core::Iterable<dynamic>*>* globalVar;
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.outline.expect b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.outline.expect
index 042641e..1f5d785 100644
--- a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.outline.expect
@@ -25,7 +25,7 @@
     ;
 }
 class D<P extends core::Object* = dynamic, Q extends core::Object* = dynamic> extends self::C<core::int*, self::D::Q*, self::D::P*> {
-  generic-covariant-impl field core::Map<self::D::P*, self::D::Q*>* foo;
+  covariant-by-class field core::Map<self::D::P*, self::D::Q*>* foo;
   constructor •(dynamic tt) → self::D<self::D::P*, self::D::Q*>*
     ;
   method foo2(dynamic y) → dynamic
@@ -38,7 +38,7 @@
 class E<P extends core::String*> extends core::Object {
   static factory •<P extends core::String*>() → self::E<self::E::•::P*>*
     ;
-  method foo6<generic-covariant-impl T extends self::E::P*, U extends core::List<self::E::foo6::T*>* = core::List<self::E::P*>*>(core::Map<self::E::foo6::T*, self::E::foo6::U*>* map) → void
+  method foo6<covariant-by-class T extends self::E::P*, U extends core::List<self::E::foo6::T*>* = core::List<self::E::P*>*>(core::Map<self::E::foo6::T*, self::E::foo6::U*>* map) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -54,8 +54,8 @@
 abstract class F<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::F<self::F::T*>*
     ;
-  abstract method foo7<generic-covariant-impl Q extends self::F::T*>(self::F::foo7::Q* a, covariant core::num* b, generic-covariant-impl self::F::T* c) → void;
-  abstract method foo8<generic-covariant-impl Q extends self::F::T*>(self::F::foo8::Q* a, covariant core::num* b, generic-covariant-impl self::F::T* c) → void;
+  abstract method foo7<covariant-by-class Q extends self::F::T*>(self::F::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
+  abstract method foo8<covariant-by-class Q extends self::F::T*>(self::F::foo8::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -70,7 +70,7 @@
 class G<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::G<self::G::T*>*
     ;
-  method foo7<generic-covariant-impl Q extends self::G::T*>(self::G::foo7::Q* a, core::int* b, generic-covariant-impl self::G::T* c) → void
+  method foo7<covariant-by-class Q extends self::G::T*>(self::G::foo7::Q* a, core::int* b, covariant-by-class self::G::T* c) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -86,9 +86,9 @@
 class H<T extends core::Object* = dynamic> extends self::G<self::H::T*> implements self::F<self::H::T*> {
   synthetic constructor •() → self::H<self::H::T*>*
     ;
-  method foo8<generic-covariant-impl Q extends self::H::T*>(self::H::foo8::Q* a, covariant core::int* b, generic-covariant-impl self::H::T* c) → void
+  method foo8<covariant-by-class Q extends self::H::T*>(self::H::foo8::Q* a, covariant-by-declaration core::int* b, covariant-by-class self::H::T* c) → void
     ;
-  forwarding-stub method foo7<generic-covariant-impl Q extends self::H::T*>(self::H::foo7::Q* a, covariant core::num* b, generic-covariant-impl self::H::T* c) → void
+  forwarding-stub method foo7<covariant-by-class Q extends self::H::T*>(self::H::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::H::T* c) → void
     return super.{self::G::foo7}<self::H::foo7::Q*>(a, b as core::int*, c);
 }
 static field core::List<core::Iterable<dynamic>*>* globalVar;
diff --git a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.transformed.expect b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.transformed.expect
index 11d9dea..96a4931 100644
--- a/pkg/front_end/testcases/general/vm_type_ops.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/vm_type_ops.dart.weak.transformed.expect
@@ -28,7 +28,7 @@
     ;
 }
 class D<P extends core::Object* = dynamic, Q extends core::Object* = dynamic> extends self::C<core::int*, self::D::Q*, self::D::P*> {
-  generic-covariant-impl field core::Map<self::D::P*, self::D::Q*>* foo;
+  covariant-by-class field core::Map<self::D::P*, self::D::Q*>* foo;
   constructor •(dynamic tt) → self::D<self::D::P*, self::D::Q*>*
     : self::D::foo = tt as{TypeError,ForDynamic} core::Map<self::D::P*, self::D::Q*>*, super self::C::•()
     ;
@@ -58,7 +58,7 @@
 class E<P extends core::String*> extends core::Object {
   static factory •<P extends core::String*>() → self::E<self::E::•::P*>*
     return null;
-  method foo6<generic-covariant-impl T extends self::E::P*, U extends core::List<self::E::foo6::T*>* = core::List<self::E::P*>*>(core::Map<self::E::foo6::T*, self::E::foo6::U*>* map) → void {}
+  method foo6<covariant-by-class T extends self::E::P*, U extends core::List<self::E::foo6::T*>* = core::List<self::E::P*>*>(core::Map<self::E::foo6::T*, self::E::foo6::U*>* map) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -74,8 +74,8 @@
   synthetic constructor •() → self::F<self::F::T*>*
     : super core::Object::•()
     ;
-  abstract method foo7<generic-covariant-impl Q extends self::F::T*>(self::F::foo7::Q* a, covariant core::num* b, generic-covariant-impl self::F::T* c) → void;
-  abstract method foo8<generic-covariant-impl Q extends self::F::T*>(self::F::foo8::Q* a, covariant core::num* b, generic-covariant-impl self::F::T* c) → void;
+  abstract method foo7<covariant-by-class Q extends self::F::T*>(self::F::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
+  abstract method foo8<covariant-by-class Q extends self::F::T*>(self::F::foo8::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::F::T* c) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -91,7 +91,7 @@
   synthetic constructor •() → self::G<self::G::T*>*
     : super core::Object::•()
     ;
-  method foo7<generic-covariant-impl Q extends self::G::T*>(self::G::foo7::Q* a, core::int* b, generic-covariant-impl self::G::T* c) → void {}
+  method foo7<covariant-by-class Q extends self::G::T*>(self::G::foo7::Q* a, core::int* b, covariant-by-class self::G::T* c) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -107,8 +107,8 @@
   synthetic constructor •() → self::H<self::H::T*>*
     : super self::G::•()
     ;
-  method foo8<generic-covariant-impl Q extends self::H::T*>(self::H::foo8::Q* a, covariant core::int* b, generic-covariant-impl self::H::T* c) → void {}
-  forwarding-stub method foo7<generic-covariant-impl Q extends self::H::T*>(self::H::foo7::Q* a, covariant core::num* b, generic-covariant-impl self::H::T* c) → void
+  method foo8<covariant-by-class Q extends self::H::T*>(self::H::foo8::Q* a, covariant-by-declaration core::int* b, covariant-by-class self::H::T* c) → void {}
+  forwarding-stub method foo7<covariant-by-class Q extends self::H::T*>(self::H::foo7::Q* a, covariant-by-declaration core::num* b, covariant-by-class self::H::T* c) → void
     return super.{self::G::foo7}<self::H::foo7::Q*>(a, b as core::int*, c);
 }
 static field core::List<core::Iterable<dynamic>*>* globalVar;
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.expect
index a45bc9f..68cbb20 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → stu::Qux*
     : super core::Object::•()
     ;
-  method handleEvent(covariant stu2::EvenFileB* entry) → void {}
+  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -43,13 +43,13 @@
   synthetic constructor •() → stu::Baz*
     : super stu::Qux::•()
     ;
-  method handleEvent(covariant stu::EvenFileBPrime* entry) → void {}
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void {}
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
   synthetic constructor •() → stu::Foo*
     : super stu::Baz::•()
     ;
-  abstract member-signature method handleEvent(covariant stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.outline.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.outline.expect
index c556a30..b35d702 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 abstract class Qux extends core::Object implements stu2::EventFileA {
   synthetic constructor •() → stu::Qux*
     ;
-  method handleEvent(covariant stu2::EvenFileB* entry) → void
+  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -41,13 +41,13 @@
 abstract class Baz extends stu::Qux {
   synthetic constructor •() → stu::Baz*
     ;
-  method handleEvent(covariant stu::EvenFileBPrime* entry) → void
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void
     ;
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
   synthetic constructor •() → stu::Foo*
     ;
-  abstract member-signature method handleEvent(covariant stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.transformed.expect
index a45bc9f..68cbb20 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → stu::Qux*
     : super core::Object::•()
     ;
-  method handleEvent(covariant stu2::EvenFileB* entry) → void {}
+  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -43,13 +43,13 @@
   synthetic constructor •() → stu::Baz*
     : super stu::Qux::•()
     ;
-  method handleEvent(covariant stu::EvenFileBPrime* entry) → void {}
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void {}
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
   synthetic constructor •() → stu::Foo*
     : super stu::Baz::•()
     ;
-  abstract member-signature method handleEvent(covariant stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.expect
index a45bc9f..68cbb20 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → stu::Qux*
     : super core::Object::•()
     ;
-  method handleEvent(covariant stu2::EvenFileB* entry) → void {}
+  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -43,13 +43,13 @@
   synthetic constructor •() → stu::Baz*
     : super stu::Qux::•()
     ;
-  method handleEvent(covariant stu::EvenFileBPrime* entry) → void {}
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void {}
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
   synthetic constructor •() → stu::Foo*
     : super stu::Baz::•()
     ;
-  abstract member-signature method handleEvent(covariant stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.outline.expect
index c556a30..b35d702 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 abstract class Qux extends core::Object implements stu2::EventFileA {
   synthetic constructor •() → stu::Qux*
     ;
-  method handleEvent(covariant stu2::EvenFileB* entry) → void
+  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -41,13 +41,13 @@
 abstract class Baz extends stu::Qux {
   synthetic constructor •() → stu::Baz*
     ;
-  method handleEvent(covariant stu::EvenFileBPrime* entry) → void
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void
     ;
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
   synthetic constructor •() → stu::Foo*
     ;
-  abstract member-signature method handleEvent(covariant stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
 }
 
 library;
diff --git a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.transformed.expect
index a45bc9f..68cbb20 100644
--- a/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/with_dependencies/stub_or_not/stub_or_not.no_link.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → stu::Qux*
     : super core::Object::•()
     ;
-  method handleEvent(covariant stu2::EvenFileB* entry) → void {}
+  method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -43,13 +43,13 @@
   synthetic constructor •() → stu::Baz*
     : super stu::Qux::•()
     ;
-  method handleEvent(covariant stu::EvenFileBPrime* entry) → void {}
+  method handleEvent(covariant-by-declaration stu::EvenFileBPrime* entry) → void {}
 }
 abstract class Foo extends stu::Baz implements stu::Qux {
   synthetic constructor •() → stu::Foo*
     : super stu::Baz::•()
     ;
-  abstract member-signature method handleEvent(covariant stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
+  abstract member-signature method handleEvent(covariant-by-declaration stu2::EvenFileB* entry) → void; -> stu::Qux::handleEvent
 }
 
 library;
diff --git a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.expect b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.expect
index 5469618..c46c847 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.expect
@@ -7,7 +7,7 @@
   constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
     : self::A::f = f, super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::A::T* x) → dynamic
+  method foo(covariant-by-class self::A::T* x) → dynamic
     return let final self::A::T* #t1 = x in this.{self::A::f}(#t1){(self::A::T*) →* void};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.outline.expect b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.outline.expect
index 7e7c14b..5ef3cd8 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.outline.expect
@@ -6,7 +6,7 @@
   field (self::A::T*) →* void f;
   constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
     ;
-  method foo(generic-covariant-impl self::A::T* x) → dynamic
+  method foo(covariant-by-class self::A::T* x) → dynamic
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.transformed.expect b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.transformed.expect
index 5469618..c46c847 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/this_field_call.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
   constructor •((self::A::T*) →* void f) → self::A<self::A::T*>*
     : self::A::f = f, super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::A::T* x) → dynamic
+  method foo(covariant-by-class self::A::T* x) → dynamic
     return let final self::A::T* #t1 = x in this.{self::A::f}(#t1){(self::A::T*) →* void};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/incremental/dart2js_late.yaml b/pkg/front_end/testcases/incremental/dart2js_late.yaml
index c596da3..9473131 100644
--- a/pkg/front_end/testcases/incremental/dart2js_late.yaml
+++ b/pkg/front_end/testcases/incremental/dart2js_late.yaml
@@ -23,7 +23,6 @@
 
   - entry: late_statics.dart
     worldType: updated
-    errors: true # (currently?) dart2js changes the interface and doesn't have the setter anymore. dartbug.com/45854
     expectInitializeFromDill: false
     invalidate:
       - late_statics.dart
diff --git a/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.1.expect b/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.1.expect
index d186e96..09dadea 100644
--- a/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.1.expect
@@ -4,12 +4,16 @@
   import "org-dartlang-test:///late_statics_lib.dart" as lib;
 
   static method testUninitializedNonFinalTopLevelField() → void {
-    dart.core::print(lat2::a.{_late_helper::_Cell::readField}<dart.core::int>(){() → dart.core::int});
-    lat2::a.{_late_helper::_Cell::value} = 42;
-    dart.core::print(lat2::a.{_late_helper::_Cell::readField}<dart.core::int>(){() → dart.core::int});
+    dart.core::print(lat2::a);
+    lat2::a = 42;
+    dart.core::print(lat2::a);
   }
 }
 library from "org-dartlang-test:///late_statics_lib.dart" as lat2 {
 
-  static final field _late_helper::_Cell a = new _late_helper::_Cell::named("a");
+  static final field _late_helper::_Cell _#a = new _late_helper::_Cell::named("a");
+  static get a() → dart.core::int
+    return lat2::_#a.{_late_helper::_Cell::readField}<dart.core::int>(){() → dart.core::int};
+  static set a(dart.core::int value) → void
+    return lat2::_#a.{_late_helper::_Cell::value} = value;
 }
diff --git a/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.2.expect b/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.2.expect
index e6cc8ab..09dadea 100644
--- a/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/dart2js_late.yaml.world.2.expect
@@ -1,22 +1,19 @@
 main = <No Member>;
 library from "org-dartlang-test:///late_statics.dart" as lat {
-//
-// Problems in library:
-//
-// org-dartlang-test:///late_statics.dart:4:7: Error: Setter not found: 'a'.
-//   lib.a = 42;
-//       ^
-//
 
   import "org-dartlang-test:///late_statics_lib.dart" as lib;
 
   static method testUninitializedNonFinalTopLevelField() → void {
     dart.core::print(lat2::a);
-    invalid-expression "org-dartlang-test:///late_statics.dart:4:7: Error: Setter not found: 'a'.\n  lib.a = 42;\n      ^";
+    lat2::a = 42;
     dart.core::print(lat2::a);
   }
 }
 library from "org-dartlang-test:///late_statics_lib.dart" as lat2 {
 
-  static final field _late_helper::_Cell a = new _late_helper::_Cell::named("a");
+  static final field _late_helper::_Cell _#a = new _late_helper::_Cell::named("a");
+  static get a() → dart.core::int
+    return lat2::_#a.{_late_helper::_Cell::readField}<dart.core::int>(){() → dart.core::int};
+  static set a(dart.core::int value) → void
+    return lat2::_#a.{_late_helper::_Cell::value} = value;
 }
diff --git a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.1.expect
index 15ee75b..4ae1498 100644
--- a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.1.expect
@@ -5,7 +5,7 @@
 
   abstract class AfterLayoutMixin<T extends fra::StatefulWidget*> extends fra::State<aft::AfterLayoutMixin::T*> /*isMixinDeclaration*/  {
     abstract member-signature get _widget() → aft::AfterLayoutMixin::T*; -> fra::State::_widget
-    abstract member-signature set _widget(generic-covariant-impl aft::AfterLayoutMixin::T* value) → void; -> fra::State::_widget
+    abstract member-signature set _widget(covariant-by-class aft::AfterLayoutMixin::T* value) → void; -> fra::State::_widget
     abstract member-signature method toString() → dart.core::String*; -> fra::_State&Object&Diagnosticable::toString
     abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
     abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
@@ -28,7 +28,7 @@
       return super.{fra::Diagnosticable::toString}();
   }
   abstract class State<T extends fra::StatefulWidget> extends fra::_State&Object&Diagnosticable {
-    generic-covariant-impl field fra::State::T? _widget = null;
+    covariant-by-class field fra::State::T? _widget = null;
     synthetic constructor •() → fra::State<fra::State::T>
       : super fra::_State&Object&Diagnosticable::•()
       ;
@@ -76,7 +76,7 @@
       : super fra::State::•()
       ;
     abstract member-signature get _widget() → main::HotReloadIssue*; -> fra::State::_widget
-    abstract member-signature set _widget(generic-covariant-impl main::HotReloadIssue* value) → void; -> fra::State::_widget
+    abstract member-signature set _widget(covariant-by-class main::HotReloadIssue* value) → void; -> fra::State::_widget
     abstract member-signature method toString() → dart.core::String*; -> fra::_State&Object&Diagnosticable::toString
     abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
     abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
diff --git a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.2.expect
index 4ba21fd..cd64084 100644
--- a/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_issue_66122.yaml.world.2.expect
@@ -5,7 +5,7 @@
 
   abstract class AfterLayoutMixin<T extends fra::StatefulWidget*> extends fra::State<aft::AfterLayoutMixin::T*> /*isMixinDeclaration*/  {
     abstract member-signature get _widget() → aft::AfterLayoutMixin::T*; -> fra::State::_widget
-    abstract member-signature set _widget(generic-covariant-impl aft::AfterLayoutMixin::T* value) → void; -> fra::State::_widget
+    abstract member-signature set _widget(covariant-by-class aft::AfterLayoutMixin::T* value) → void; -> fra::State::_widget
     abstract member-signature method toString() → dart.core::String*; -> fra::_State&Object&Diagnosticable::toString
     abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
     abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
@@ -28,7 +28,7 @@
       return super.{fra::Diagnosticable::toString}();
   }
   abstract class State<T extends fra::StatefulWidget> extends fra::_State&Object&Diagnosticable {
-    generic-covariant-impl field fra::State::T? _widget = null;
+    covariant-by-class field fra::State::T? _widget = null;
     synthetic constructor •() → fra::State<fra::State::T>
       : super fra::_State&Object&Diagnosticable::•()
       ;
@@ -76,7 +76,7 @@
       : super fra::State::•()
       ;
     abstract member-signature get _widget() → main::HotReloadIssue*; -> fra::State::_widget
-    abstract member-signature set _widget(generic-covariant-impl main::HotReloadIssue* value) → void; -> fra::State::_widget
+    abstract member-signature set _widget(covariant-by-class main::HotReloadIssue* value) → void; -> fra::State::_widget
     abstract member-signature method toString() → dart.core::String*; -> fra::Diagnosticable::toString
     abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
     abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
diff --git a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.1.expect
index 2c5d2fd..d8273a9 100644
--- a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.1.expect
@@ -41,7 +41,7 @@
     synthetic constructor •() → lib::Baz*
       : super dart.core::Object::•()
       ;
-    method hello(covariant lib::FooEntry* entry) → void {}
+    method hello(covariant-by-declaration lib::FooEntry* entry) → void {}
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -59,13 +59,13 @@
     synthetic constructor •() → lib::Qux*
       : super lib::Baz::•()
       ;
-    method hello(covariant lib::BarEntry* entry) → void {}
+    method hello(covariant-by-declaration lib::BarEntry* entry) → void {}
   }
   abstract class _Quux&Qux&MyMixin extends lib::Qux implements lib::MyMixin /*isAnonymousMixin,isEliminatedMixin*/  {
     synthetic constructor •() → lib::_Quux&Qux&MyMixin*
       : super lib::Qux::•()
       ;
-    abstract member-signature method hello(covariant lib::FooEntry* entry) → void; -> lib::Baz::hello
+    abstract member-signature method hello(covariant-by-declaration lib::FooEntry* entry) → void; -> lib::Baz::hello
   }
   class Quux extends lib::_Quux&Qux&MyMixin {
     synthetic constructor •() → lib::Quux*
diff --git a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.2.expect
index 8d427f03..65c8b9e 100644
--- a/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_mixin_failure_1.yaml.world.2.expect
@@ -41,7 +41,7 @@
     synthetic constructor •() → lib::Baz*
       : super dart.core::Object::•()
       ;
-    method hello(covariant lib::FooEntry* entry) → void {}
+    method hello(covariant-by-declaration lib::FooEntry* entry) → void {}
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -59,13 +59,13 @@
     synthetic constructor •() → lib::Qux*
       : super lib::Baz::•()
       ;
-    method hello(covariant lib::BarEntry* entry) → void {}
+    method hello(covariant-by-declaration lib::BarEntry* entry) → void {}
   }
   abstract class _Quux&Qux&MyMixin extends lib::Qux implements lib::MyMixin /*isAnonymousMixin,isEliminatedMixin*/  {
     synthetic constructor •() → lib::_Quux&Qux&MyMixin*
       : super lib::Qux::•()
       ;
-    abstract member-signature method hello(covariant lib::FooEntry* entry) → void; -> lib::Baz::hello
+    abstract member-signature method hello(covariant-by-declaration lib::FooEntry* entry) → void; -> lib::Baz::hello
   }
   class Quux extends lib::_Quux&Qux&MyMixin {
     synthetic constructor •() → lib::Quux*
diff --git a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.1.expect b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.1.expect
index 9ba33da..c0afa98 100644
--- a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.1.expect
@@ -13,7 +13,7 @@
     synthetic constructor •() → mai2::SuperClass*
       : super dart.core::Object::•()
       ;
-    method method(covariant dart.core::int* i) → void {}
+    method method(covariant-by-declaration dart.core::int* i) → void {}
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -45,7 +45,7 @@
     synthetic constructor •() → mai2::_Class&SuperClass&Mixin*
       : super mai2::SuperClass::•()
       ;
-    forwarding-stub method method(covariant dart.core::num* i) → void
+    forwarding-stub method method(covariant-by-declaration dart.core::num* i) → void
       return super.{mai2::Mixin::method}(i);
   }
   class Class extends mai2::_Class&SuperClass&Mixin {
diff --git a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.2.expect b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.2.expect
index 19afe72..533b853 100644
--- a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.2.expect
@@ -14,7 +14,7 @@
     synthetic constructor •() → mai2::SuperClass*
       : super dart.core::Object::•()
       ;
-    method method(covariant dart.core::int* i) → void {}
+    method method(covariant-by-declaration dart.core::int* i) → void {}
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -46,7 +46,7 @@
     synthetic constructor •() → mai2::_Class&SuperClass&Mixin*
       : super mai2::SuperClass::•()
       ;
-    forwarding-stub method method(covariant dart.core::num* i) → void
+    forwarding-stub method method(covariant-by-declaration dart.core::num* i) → void
       return super.{mai2::Mixin::method}(i);
   }
   class Class extends mai2::_Class&SuperClass&Mixin {
diff --git a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.3.expect b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.3.expect
index 9ba33da..c0afa98 100644
--- a/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/mixin_application_declares.yaml.world.3.expect
@@ -13,7 +13,7 @@
     synthetic constructor •() → mai2::SuperClass*
       : super dart.core::Object::•()
       ;
-    method method(covariant dart.core::int* i) → void {}
+    method method(covariant-by-declaration dart.core::int* i) → void {}
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -45,7 +45,7 @@
     synthetic constructor •() → mai2::_Class&SuperClass&Mixin*
       : super mai2::SuperClass::•()
       ;
-    forwarding-stub method method(covariant dart.core::num* i) → void
+    forwarding-stub method method(covariant-by-declaration dart.core::num* i) → void
       return super.{mai2::Mixin::method}(i);
   }
   class Class extends mai2::_Class&SuperClass&Mixin {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.1.expect
index 36909df..7dd08b9 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.1.expect
@@ -5,7 +5,7 @@
     synthetic constructor •() → lib1::A<lib1::A::T*>*
       : super dart.core::Object::•()
       ;
-    method foo(generic-covariant-impl lib1::A::T* t) → dynamic {
+    method foo(covariant-by-class lib1::A::T* t) → dynamic {
       dart.core::print("foo T ${t}");
     }
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
@@ -46,7 +46,7 @@
     synthetic constructor •() → main::C*
       : super lib1::B::•()
       ;
-    forwarding-stub method foo(generic-covariant-impl dart.core::int* t) → dynamic
+    forwarding-stub method foo(covariant-by-class dart.core::int* t) → dynamic
       return super.{lib1::B::foo}(t);
   }
   static method main() → dynamic {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.2.expect
index ad37dd1..4096374 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_15.yaml.world.2.expect
@@ -5,7 +5,7 @@
     synthetic constructor •() → lib1::A<lib1::A::T*>*
       : super dart.core::Object::•()
       ;
-    method foo(generic-covariant-impl lib1::A::T* t) → dynamic {
+    method foo(covariant-by-class lib1::A::T* t) → dynamic {
       dart.core::print("foo T ${t}");
     }
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
@@ -46,7 +46,7 @@
     synthetic constructor •() → main::C*
       : super lib1::B::•()
       ;
-    forwarding-stub method foo(generic-covariant-impl dart.core::int* t) → dynamic
+    forwarding-stub method foo(covariant-by-class dart.core::int* t) → dynamic
       return super.{lib1::B::foo}(t);
   }
   static method main() → dynamic {
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect
index f919f21..8d83ce0 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.1.expect
@@ -30,19 +30,19 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class CompilationStrategy extends dart.core::Object implements dart.core::Enum /*isEnum*/  {
-    final field dart.core::int* index;
-    final field dart.core::String* _name;
+  class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
     static const field dart.core::List<main::CompilationStrategy*>* values = #C14;
     static const field main::CompilationStrategy* direct = #C4;
     static const field main::CompilationStrategy* toKernel = #C7;
     static const field main::CompilationStrategy* toData = #C10;
     static const field main::CompilationStrategy* fromData = #C13;
-    const constructor •(dart.core::int* index, dart.core::String* _name) → main::CompilationStrategy*
-      : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
+    const constructor •(dart.core::int* index, dart.core::String* name) → main::CompilationStrategy*
+      : super dart.core::_Enum::•(index, name)
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name}{dart.core::String*};
+      return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
+    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
+    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -63,16 +63,16 @@
 constants  {
   #C1 = dart.core::_Override {}
   #C2 = 0
-  #C3 = "CompilationStrategy.direct"
+  #C3 = "direct"
   #C4 = main::CompilationStrategy {index:#C2, _name:#C3}
   #C5 = 1
-  #C6 = "CompilationStrategy.toKernel"
+  #C6 = "toKernel"
   #C7 = main::CompilationStrategy {index:#C5, _name:#C6}
   #C8 = 2
-  #C9 = "CompilationStrategy.toData"
+  #C9 = "toData"
   #C10 = main::CompilationStrategy {index:#C8, _name:#C9}
   #C11 = 3
-  #C12 = "CompilationStrategy.fromData"
+  #C12 = "fromData"
   #C13 = main::CompilationStrategy {index:#C11, _name:#C12}
   #C14 = <main::CompilationStrategy*>[#C4, #C7, #C10, #C13]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect
index 0b4afaf..fb4d5d2 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_2.yaml.world.2.expect
@@ -30,19 +30,19 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class CompilationStrategy extends dart.core::Object implements dart.core::Enum /*isEnum*/  {
-    final field dart.core::int* index;
-    final field dart.core::String* _name;
+  class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
     static const field dart.core::List<main::CompilationStrategy*>* values = #C14;
     static const field main::CompilationStrategy* direct = #C4;
     static const field main::CompilationStrategy* toKernel = #C7;
     static const field main::CompilationStrategy* toData = #C10;
     static const field main::CompilationStrategy* fromData = #C13;
-    const constructor •(dart.core::int* index, dart.core::String* _name) → main::CompilationStrategy*
-      : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
+    const constructor •(dart.core::int* index, dart.core::String* name) → main::CompilationStrategy*
+      : super dart.core::_Enum::•(index, name)
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name}{dart.core::String*};
+      return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
+    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
+    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -63,16 +63,16 @@
 constants  {
   #C1 = dart.core::_Override {}
   #C2 = 0
-  #C3 = "CompilationStrategy.direct"
+  #C3 = "direct"
   #C4 = main::CompilationStrategy {index:#C2, _name:#C3}
   #C5 = 1
-  #C6 = "CompilationStrategy.toKernel"
+  #C6 = "toKernel"
   #C7 = main::CompilationStrategy {index:#C5, _name:#C6}
   #C8 = 2
-  #C9 = "CompilationStrategy.toData"
+  #C9 = "toData"
   #C10 = main::CompilationStrategy {index:#C8, _name:#C9}
   #C11 = 3
-  #C12 = "CompilationStrategy.fromData"
+  #C12 = "fromData"
   #C13 = main::CompilationStrategy {index:#C11, _name:#C12}
   #C14 = <main::CompilationStrategy*>[#C4, #C7, #C10, #C13]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect
index e32d117..985ec21 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect
@@ -10,13 +10,13 @@
     abstract member-signature get length() → dart.core::int*; -> dart.core::List::length
     abstract member-signature set length(dart.core::int* newLength) → void; -> dart.core::List::length
     abstract member-signature operator [](dart.core::int* index) → dart.core::int*; -> dart.core::List::[]
-    abstract member-signature operator []=(dart.core::int* index, generic-covariant-impl dart.core::int* value) → void; -> dart.core::List::[]=
+    abstract member-signature operator []=(dart.core::int* index, covariant-by-class dart.core::int* value) → void; -> dart.core::List::[]=
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first() → dart.core::int* {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
       return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
     }
-    set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first(generic-covariant-impl dart.core::int* value) → void {
+    set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first(covariant-by-class dart.core::int* value) → void {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
       this.{dart.core::List::[]=}(0, value){(dart.core::int, dart.core::int*) → void};
@@ -26,7 +26,7 @@
         throw dart._internal::IterableElementError::noElement();
       return this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*};
     }
-    set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last(generic-covariant-impl dart.core::int* value) → void {
+    set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last(covariant-by-class dart.core::int* value) → void {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
       this.{dart.core::List::[]=}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}, value){(dart.core::int, dart.core::int*) → void};
@@ -35,7 +35,7 @@
       return new dart._internal::ListIterator::•<dart.core::int*>(this);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ elementAt(dart.core::int index) → dart.core::int*
       return this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int*};
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(generic-covariant-impl dart.core::Iterable<dart.core::int*> other) → dart.core::Iterable<dart.core::int*>
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(covariant-by-class dart.core::Iterable<dart.core::int*> other) → dart.core::Iterable<dart.core::int*>
       return dart._internal::FollowedByIterable::firstEfficient<dart.core::int*>(this, other);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ forEach((dart.core::int*) → void action) → void {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
@@ -91,7 +91,7 @@
       }
       return false;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ firstWhere((dart.core::int*) → dart.core::bool test, {generic-covariant-impl () →? dart.core::int* orElse = #C2}) → dart.core::int* {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ firstWhere((dart.core::int*) → dart.core::bool test, {covariant-by-class () →? dart.core::int* orElse = #C2}) → dart.core::int* {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
         dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
@@ -105,7 +105,7 @@
         return orElse{() → dart.core::int*}(){() → dart.core::int*};
       throw dart._internal::IterableElementError::noElement();
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastWhere((dart.core::int*) → dart.core::bool test, {generic-covariant-impl () →? dart.core::int* orElse = #C2}) → dart.core::int* {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastWhere((dart.core::int*) → dart.core::bool test, {covariant-by-class () →? dart.core::int* orElse = #C2}) → dart.core::int* {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
         dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
@@ -119,7 +119,7 @@
         return orElse{() → dart.core::int*}(){() → dart.core::int*};
       throw dart._internal::IterableElementError::noElement();
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ singleWhere((dart.core::int*) → dart.core::bool test, {generic-covariant-impl () →? dart.core::int* orElse = #C2}) → dart.core::int* {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ singleWhere((dart.core::int*) → dart.core::bool test, {covariant-by-class () →? dart.core::int* orElse = #C2}) → dart.core::int* {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       late dart.core::int* match;
       dart.core::bool matchFound = false;
@@ -158,7 +158,7 @@
       return new dart._internal::MappedListIterable::•<dart.core::int*, main::_WithListMixin&Object&ListMixin::map::T%>(this, f);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ expand<T extends dart.core::Object? = dynamic>((dart.core::int*) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%> f) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%>
       return new dart._internal::ExpandIterable::•<dart.core::int*, main::_WithListMixin&Object&ListMixin::expand::T%>(this, f);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reduce(generic-covariant-impl (dart.core::int*, dart.core::int*) → dart.core::int* combine) → dart.core::int* {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reduce(covariant-by-class (dart.core::int*, dart.core::int*) → dart.core::int* combine) → dart.core::int* {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       if(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
@@ -209,10 +209,10 @@
       }
       return result;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ add(generic-covariant-impl dart.core::int* element) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ add(covariant-by-class dart.core::int* element) → void {
       this.{dart.core::List::[]=}(let final dart.core::int #t2 = this.{dart.core::List::length}{dart.core::int} in let final dart.core::int #t3 = this.{dart.core::List::length} = #t2.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t2, element){(dart.core::int, dart.core::int*) → void};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ addAll(generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ addAll(covariant-by-class dart.core::Iterable<dart.core::int*> iterable) → void {
       dart.core::int i = this.{dart.core::List::length}{dart.core::int};
       {
         dart.core::Iterator<dart.core::int*> :sync-for-iterator = iterable.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int*>};
@@ -301,7 +301,7 @@
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ asMap() → dart.core::Map<dart.core::int, dart.core::int*> {
       return new dart._internal::ListMapView::•<dart.core::int*>(this);
     }
-    operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(generic-covariant-impl dart.core::List<dart.core::int*> other) → dart.core::List<dart.core::int*>
+    operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(covariant-by-class dart.core::List<dart.core::int*> other) → dart.core::List<dart.core::int*>
       return block {
         final dart.core::List<dart.core::int*> #t5 = dart.core::List::of<dart.core::int*>(this);
         #t5.{dart.core::List::addAll}{Invariant}(other){(dart.core::Iterable<dart.core::int*>) → void};
@@ -324,14 +324,14 @@
         this.{dart.collection::ListMixin::_closeGap}(start, end){(dart.core::int, dart.core::int) → void};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fillRange(dart.core::int start, dart.core::int end, [generic-covariant-impl dart.core::int? fill = #C2]) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fillRange(dart.core::int start, dart.core::int end, [covariant-by-class dart.core::int? fill = #C2]) → void {
       dart.core::int* value = let dart.core::int? #t6 = fill in #t6 == null ?{dart.core::int*} #t6 : #t6{dart.core::int*};
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       for (dart.core::int i = start; i.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
         this.{dart.core::List::[]=}(i, value){(dart.core::int, dart.core::int*) → void};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setRange(dart.core::int start, dart.core::int end, generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable, [dart.core::int skipCount = #C7]) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setRange(dart.core::int start, dart.core::int end, covariant-by-class dart.core::Iterable<dart.core::int*> iterable, [dart.core::int skipCount = #C7]) → void {
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       dart.core::int length = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
       if(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
@@ -361,7 +361,7 @@
         }
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ replaceRange(dart.core::int start, dart.core::int end, generic-covariant-impl dart.core::Iterable<dart.core::int*> newContents) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ replaceRange(dart.core::int start, dart.core::int end, covariant-by-class dart.core::Iterable<dart.core::int*> newContents) → void {
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       if(start =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
         this.{dart.collection::ListMixin::addAll}(newContents){(dart.core::Iterable<dart.core::int*>) → void};
@@ -411,7 +411,7 @@
           this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
         }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexOf(generic-covariant-impl dart.core::Object? element, [dart.core::int start = #C7]) → dart.core::int {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexOf(covariant-by-class dart.core::Object? element, [dart.core::int start = #C7]) → dart.core::int {
       if(start.{dart.core::num::<}(0){(dart.core::num) → dart.core::bool})
         start = 0;
       for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
@@ -429,7 +429,7 @@
       }
       return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexOf(generic-covariant-impl dart.core::Object? element, [dart.core::int? start = #C2]) → dart.core::int {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexOf(covariant-by-class dart.core::Object? element, [dart.core::int? start = #C2]) → dart.core::int {
       if(start == null || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool})
         start = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
       if(start{dart.core::int} == null)
@@ -451,7 +451,7 @@
       }
       return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insert(dart.core::int index, generic-covariant-impl dart.core::int* element) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insert(dart.core::int index, covariant-by-class dart.core::int* element) → void {
       dart._internal::checkNotNullable<dart.core::int>(index, "index");
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       dart.core::RangeError::checkValueInInterval(index, 0, length, "index");
@@ -466,7 +466,7 @@
       this.{dart.collection::ListMixin::_closeGap}(index, index.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}){(dart.core::int, dart.core::int) → void};
       return result;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insertAll(dart.core::int index, generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insertAll(dart.core::int index, covariant-by-class dart.core::Iterable<dart.core::int*> iterable) → void {
       dart.core::RangeError::checkValueInInterval(index, 0, this.{dart.core::List::length}{dart.core::int}, "index");
       if(index =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
         this.{dart.collection::ListMixin::addAll}(iterable){(dart.core::Iterable<dart.core::int*>) → void};
@@ -493,7 +493,7 @@
       }
       this.{dart.collection::ListMixin::setAll}(index, iterable){(dart.core::int, dart.core::Iterable<dart.core::int*>) → void};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setAll(dart.core::int index, generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setAll(dart.core::int index, covariant-by-class dart.core::Iterable<dart.core::int*> iterable) → void {
       if(iterable is{ForNonNullableByDefault} dart.core::List<dynamic>) {
         this.{dart.collection::ListMixin::setRange}(index, index.{dart.core::num::+}(iterable.{dart.core::Iterable::length}{dart.core::int}){(dart.core::num) → dart.core::int}, iterable){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
       }
@@ -533,7 +533,7 @@
       ;
     operator [](dart.core::int* index) → dart.core::int*
       return index;
-    operator []=(dart.core::int* index, generic-covariant-impl dart.core::int* value) → void
+    operator []=(dart.core::int* index, covariant-by-class dart.core::int* value) → void
       return null;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect
index e32d117..985ec21 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect
@@ -10,13 +10,13 @@
     abstract member-signature get length() → dart.core::int*; -> dart.core::List::length
     abstract member-signature set length(dart.core::int* newLength) → void; -> dart.core::List::length
     abstract member-signature operator [](dart.core::int* index) → dart.core::int*; -> dart.core::List::[]
-    abstract member-signature operator []=(dart.core::int* index, generic-covariant-impl dart.core::int* value) → void; -> dart.core::List::[]=
+    abstract member-signature operator []=(dart.core::int* index, covariant-by-class dart.core::int* value) → void; -> dart.core::List::[]=
     get /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first() → dart.core::int* {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
       return this.{dart.core::List::[]}(0){(dart.core::int) → dart.core::int*};
     }
-    set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first(generic-covariant-impl dart.core::int* value) → void {
+    set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ first(covariant-by-class dart.core::int* value) → void {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
       this.{dart.core::List::[]=}(0, value){(dart.core::int, dart.core::int*) → void};
@@ -26,7 +26,7 @@
         throw dart._internal::IterableElementError::noElement();
       return this.{dart.core::List::[]}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}){(dart.core::int) → dart.core::int*};
     }
-    set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last(generic-covariant-impl dart.core::int* value) → void {
+    set /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ last(covariant-by-class dart.core::int* value) → void {
       if(this.{dart.core::List::length}{dart.core::int} =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
       this.{dart.core::List::[]=}(this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}, value){(dart.core::int, dart.core::int*) → void};
@@ -35,7 +35,7 @@
       return new dart._internal::ListIterator::•<dart.core::int*>(this);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ elementAt(dart.core::int index) → dart.core::int*
       return this.{dart.core::List::[]}(index){(dart.core::int) → dart.core::int*};
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(generic-covariant-impl dart.core::Iterable<dart.core::int*> other) → dart.core::Iterable<dart.core::int*>
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ followedBy(covariant-by-class dart.core::Iterable<dart.core::int*> other) → dart.core::Iterable<dart.core::int*>
       return dart._internal::FollowedByIterable::firstEfficient<dart.core::int*>(this, other);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ forEach((dart.core::int*) → void action) → void {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
@@ -91,7 +91,7 @@
       }
       return false;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ firstWhere((dart.core::int*) → dart.core::bool test, {generic-covariant-impl () →? dart.core::int* orElse = #C2}) → dart.core::int* {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ firstWhere((dart.core::int*) → dart.core::bool test, {covariant-by-class () →? dart.core::int* orElse = #C2}) → dart.core::int* {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = 0; i.{dart.core::num::<}(length){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
         dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
@@ -105,7 +105,7 @@
         return orElse{() → dart.core::int*}(){() → dart.core::int*};
       throw dart._internal::IterableElementError::noElement();
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastWhere((dart.core::int*) → dart.core::bool test, {generic-covariant-impl () →? dart.core::int* orElse = #C2}) → dart.core::int* {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastWhere((dart.core::int*) → dart.core::bool test, {covariant-by-class () →? dart.core::int* orElse = #C2}) → dart.core::int* {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       for (dart.core::int i = length.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}; i.{dart.core::num::>=}(0){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::-}(1){(dart.core::num) → dart.core::int}) {
         dart.core::int* element = this.{dart.core::List::[]}(i){(dart.core::int) → dart.core::int*};
@@ -119,7 +119,7 @@
         return orElse{() → dart.core::int*}(){() → dart.core::int*};
       throw dart._internal::IterableElementError::noElement();
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ singleWhere((dart.core::int*) → dart.core::bool test, {generic-covariant-impl () →? dart.core::int* orElse = #C2}) → dart.core::int* {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ singleWhere((dart.core::int*) → dart.core::bool test, {covariant-by-class () →? dart.core::int* orElse = #C2}) → dart.core::int* {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       late dart.core::int* match;
       dart.core::bool matchFound = false;
@@ -158,7 +158,7 @@
       return new dart._internal::MappedListIterable::•<dart.core::int*, main::_WithListMixin&Object&ListMixin::map::T%>(this, f);
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ expand<T extends dart.core::Object? = dynamic>((dart.core::int*) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%> f) → dart.core::Iterable<main::_WithListMixin&Object&ListMixin::expand::T%>
       return new dart._internal::ExpandIterable::•<dart.core::int*, main::_WithListMixin&Object&ListMixin::expand::T%>(this, f);
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reduce(generic-covariant-impl (dart.core::int*, dart.core::int*) → dart.core::int* combine) → dart.core::int* {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ reduce(covariant-by-class (dart.core::int*, dart.core::int*) → dart.core::int* combine) → dart.core::int* {
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       if(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
         throw dart._internal::IterableElementError::noElement();
@@ -209,10 +209,10 @@
       }
       return result;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ add(generic-covariant-impl dart.core::int* element) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ add(covariant-by-class dart.core::int* element) → void {
       this.{dart.core::List::[]=}(let final dart.core::int #t2 = this.{dart.core::List::length}{dart.core::int} in let final dart.core::int #t3 = this.{dart.core::List::length} = #t2.{dart.core::num::+}(1){(dart.core::num) → dart.core::int} in #t2, element){(dart.core::int, dart.core::int*) → void};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ addAll(generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ addAll(covariant-by-class dart.core::Iterable<dart.core::int*> iterable) → void {
       dart.core::int i = this.{dart.core::List::length}{dart.core::int};
       {
         dart.core::Iterator<dart.core::int*> :sync-for-iterator = iterable.{dart.core::Iterable::iterator}{dart.core::Iterator<dart.core::int*>};
@@ -301,7 +301,7 @@
     method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ asMap() → dart.core::Map<dart.core::int, dart.core::int*> {
       return new dart._internal::ListMapView::•<dart.core::int*>(this);
     }
-    operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(generic-covariant-impl dart.core::List<dart.core::int*> other) → dart.core::List<dart.core::int*>
+    operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(covariant-by-class dart.core::List<dart.core::int*> other) → dart.core::List<dart.core::int*>
       return block {
         final dart.core::List<dart.core::int*> #t5 = dart.core::List::of<dart.core::int*>(this);
         #t5.{dart.core::List::addAll}{Invariant}(other){(dart.core::Iterable<dart.core::int*>) → void};
@@ -324,14 +324,14 @@
         this.{dart.collection::ListMixin::_closeGap}(start, end){(dart.core::int, dart.core::int) → void};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fillRange(dart.core::int start, dart.core::int end, [generic-covariant-impl dart.core::int? fill = #C2]) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ fillRange(dart.core::int start, dart.core::int end, [covariant-by-class dart.core::int? fill = #C2]) → void {
       dart.core::int* value = let dart.core::int? #t6 = fill in #t6 == null ?{dart.core::int*} #t6 : #t6{dart.core::int*};
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       for (dart.core::int i = start; i.{dart.core::num::<}(end){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
         this.{dart.core::List::[]=}(i, value){(dart.core::int, dart.core::int*) → void};
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setRange(dart.core::int start, dart.core::int end, generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable, [dart.core::int skipCount = #C7]) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setRange(dart.core::int start, dart.core::int end, covariant-by-class dart.core::Iterable<dart.core::int*> iterable, [dart.core::int skipCount = #C7]) → void {
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       dart.core::int length = end.{dart.core::num::-}(start){(dart.core::num) → dart.core::int};
       if(length =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} 0)
@@ -361,7 +361,7 @@
         }
       }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ replaceRange(dart.core::int start, dart.core::int end, generic-covariant-impl dart.core::Iterable<dart.core::int*> newContents) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ replaceRange(dart.core::int start, dart.core::int end, covariant-by-class dart.core::Iterable<dart.core::int*> newContents) → void {
       dart.core::RangeError::checkValidRange(start, end, this.{dart.core::List::length}{dart.core::int});
       if(start =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
         this.{dart.collection::ListMixin::addAll}(newContents){(dart.core::Iterable<dart.core::int*>) → void};
@@ -411,7 +411,7 @@
           this.{dart.collection::ListMixin::setRange}(start, insertEnd, newContents){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
         }
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexOf(generic-covariant-impl dart.core::Object? element, [dart.core::int start = #C7]) → dart.core::int {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ indexOf(covariant-by-class dart.core::Object? element, [dart.core::int start = #C7]) → dart.core::int {
       if(start.{dart.core::num::<}(0){(dart.core::num) → dart.core::bool})
         start = 0;
       for (dart.core::int i = start; i.{dart.core::num::<}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool}; i = i.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}) {
@@ -429,7 +429,7 @@
       }
       return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexOf(generic-covariant-impl dart.core::Object? element, [dart.core::int? start = #C2]) → dart.core::int {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ lastIndexOf(covariant-by-class dart.core::Object? element, [dart.core::int? start = #C2]) → dart.core::int {
       if(start == null || start{dart.core::int}.{dart.core::num::>=}(this.{dart.core::List::length}{dart.core::int}){(dart.core::num) → dart.core::bool})
         start = this.{dart.core::List::length}{dart.core::int}.{dart.core::num::-}(1){(dart.core::num) → dart.core::int};
       if(start{dart.core::int} == null)
@@ -451,7 +451,7 @@
       }
       return 1.{dart.core::int::unary-}(){() → dart.core::int};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insert(dart.core::int index, generic-covariant-impl dart.core::int* element) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insert(dart.core::int index, covariant-by-class dart.core::int* element) → void {
       dart._internal::checkNotNullable<dart.core::int>(index, "index");
       dart.core::int length = this.{dart.core::List::length}{dart.core::int};
       dart.core::RangeError::checkValueInInterval(index, 0, length, "index");
@@ -466,7 +466,7 @@
       this.{dart.collection::ListMixin::_closeGap}(index, index.{dart.core::num::+}(1){(dart.core::num) → dart.core::int}){(dart.core::int, dart.core::int) → void};
       return result;
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insertAll(dart.core::int index, generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insertAll(dart.core::int index, covariant-by-class dart.core::Iterable<dart.core::int*> iterable) → void {
       dart.core::RangeError::checkValueInInterval(index, 0, this.{dart.core::List::length}{dart.core::int}, "index");
       if(index =={dart.core::num::==}{(dart.core::Object) → dart.core::bool} this.{dart.core::List::length}{dart.core::int}) {
         this.{dart.collection::ListMixin::addAll}(iterable){(dart.core::Iterable<dart.core::int*>) → void};
@@ -493,7 +493,7 @@
       }
       this.{dart.collection::ListMixin::setAll}(index, iterable){(dart.core::int, dart.core::Iterable<dart.core::int*>) → void};
     }
-    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setAll(dart.core::int index, generic-covariant-impl dart.core::Iterable<dart.core::int*> iterable) → void {
+    method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ setAll(dart.core::int index, covariant-by-class dart.core::Iterable<dart.core::int*> iterable) → void {
       if(iterable is{ForNonNullableByDefault} dart.core::List<dynamic>) {
         this.{dart.collection::ListMixin::setRange}(index, index.{dart.core::num::+}(iterable.{dart.core::Iterable::length}{dart.core::int}){(dart.core::num) → dart.core::int}, iterable){(dart.core::int, dart.core::int, dart.core::Iterable<dart.core::int*>, [dart.core::int]) → void};
       }
@@ -533,7 +533,7 @@
       ;
     operator [](dart.core::int* index) → dart.core::int*
       return index;
-    operator []=(dart.core::int* index, generic-covariant-impl dart.core::int* value) → void
+    operator []=(dart.core::int* index, covariant-by-class dart.core::int* value) → void
       return null;
   }
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
index ec42b23..9a2c561 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.1.expect
@@ -37,19 +37,19 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class CompilationStrategy extends dart.core::Object implements dart.core::Enum /*isEnum*/  {
-    final field dart.core::int* index;
-    final field dart.core::String* _name;
+  class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
     static const field dart.core::List<main::CompilationStrategy*>* values = #C14;
     static const field main::CompilationStrategy* direct = #C4;
     static const field main::CompilationStrategy* toKernel = #C7;
     static const field main::CompilationStrategy* toData = #C10;
     static const field main::CompilationStrategy* fromData = #C13;
-    const constructor •(dart.core::int* index, dart.core::String* _name) → main::CompilationStrategy*
-      : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
+    const constructor •(dart.core::int* index, dart.core::String* name) → main::CompilationStrategy*
+      : super dart.core::_Enum::•(index, name)
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name}{dart.core::String*};
+      return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
+    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
+    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -70,16 +70,16 @@
 constants  {
   #C1 = dart.core::_Override {}
   #C2 = 0
-  #C3 = "CompilationStrategy.direct"
+  #C3 = "direct"
   #C4 = main::CompilationStrategy {index:#C2, _name:#C3}
   #C5 = 1
-  #C6 = "CompilationStrategy.toKernel"
+  #C6 = "toKernel"
   #C7 = main::CompilationStrategy {index:#C5, _name:#C6}
   #C8 = 2
-  #C9 = "CompilationStrategy.toData"
+  #C9 = "toData"
   #C10 = main::CompilationStrategy {index:#C8, _name:#C9}
   #C11 = 3
-  #C12 = "CompilationStrategy.fromData"
+  #C12 = "fromData"
   #C13 = main::CompilationStrategy {index:#C11, _name:#C12}
   #C14 = <main::CompilationStrategy*>[#C4, #C7, #C10, #C13]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
index 4b4156c..f7c5aab 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.2.expect
@@ -37,19 +37,19 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class CompilationStrategy extends dart.core::Object implements dart.core::Enum /*isEnum*/  {
-    final field dart.core::int* index;
-    final field dart.core::String* _name;
+  class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
     static const field dart.core::List<main::CompilationStrategy*>* values = #C14;
     static const field main::CompilationStrategy* direct = #C4;
     static const field main::CompilationStrategy* toKernel = #C7;
     static const field main::CompilationStrategy* toData = #C10;
     static const field main::CompilationStrategy* fromData = #C13;
-    const constructor •(dart.core::int* index, dart.core::String* _name) → main::CompilationStrategy*
-      : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
+    const constructor •(dart.core::int* index, dart.core::String* name) → main::CompilationStrategy*
+      : super dart.core::_Enum::•(index, name)
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name}{dart.core::String*};
+      return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
+    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
+    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -70,16 +70,16 @@
 constants  {
   #C1 = dart.core::_Override {}
   #C2 = 0
-  #C3 = "CompilationStrategy.direct"
+  #C3 = "direct"
   #C4 = main::CompilationStrategy {index:#C2, _name:#C3}
   #C5 = 1
-  #C6 = "CompilationStrategy.toKernel"
+  #C6 = "toKernel"
   #C7 = main::CompilationStrategy {index:#C5, _name:#C6}
   #C8 = 2
-  #C9 = "CompilationStrategy.toData"
+  #C9 = "toData"
   #C10 = main::CompilationStrategy {index:#C8, _name:#C9}
   #C11 = 3
-  #C12 = "CompilationStrategy.fromData"
+  #C12 = "fromData"
   #C13 = main::CompilationStrategy {index:#C11, _name:#C12}
   #C14 = <main::CompilationStrategy*>[#C4, #C7, #C10, #C13]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect
index de577dd..8d5b971 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_6.yaml.world.3.expect
@@ -30,19 +30,19 @@
     abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
     abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
   }
-  class CompilationStrategy extends dart.core::Object implements dart.core::Enum /*isEnum*/  {
-    final field dart.core::int* index;
-    final field dart.core::String* _name;
+  class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
     static const field dart.core::List<main::CompilationStrategy*>* values = #C14;
     static const field main::CompilationStrategy* direct = #C4;
     static const field main::CompilationStrategy* toKernel = #C7;
     static const field main::CompilationStrategy* toData = #C10;
     static const field main::CompilationStrategy* fromData = #C13;
-    const constructor •(dart.core::int* index, dart.core::String* _name) → main::CompilationStrategy*
-      : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
+    const constructor •(dart.core::int* index, dart.core::String* name) → main::CompilationStrategy*
+      : super dart.core::_Enum::•(index, name)
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name}{dart.core::String*};
+      return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
+    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
+    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -63,16 +63,16 @@
 constants  {
   #C1 = dart.core::_Override {}
   #C2 = 0
-  #C3 = "CompilationStrategy.direct"
+  #C3 = "direct"
   #C4 = main::CompilationStrategy {index:#C2, _name:#C3}
   #C5 = 1
-  #C6 = "CompilationStrategy.toKernel"
+  #C6 = "toKernel"
   #C7 = main::CompilationStrategy {index:#C5, _name:#C6}
   #C8 = 2
-  #C9 = "CompilationStrategy.toData"
+  #C9 = "toData"
   #C10 = main::CompilationStrategy {index:#C8, _name:#C9}
   #C11 = 3
-  #C12 = "CompilationStrategy.fromData"
+  #C12 = "fromData"
   #C13 = main::CompilationStrategy {index:#C11, _name:#C12}
   #C14 = <main::CompilationStrategy*>[#C4, #C7, #C10, #C13]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect
index 73cad31..a3acf52 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.1.expect
@@ -42,9 +42,7 @@
     }
   }
   @#C1
-  class CompilationStrategy extends dart.core::Object implements dart.core::Enum /*isEnum*/  {
-    final field dart.core::int* index;
-    final field dart.core::String* _name;
+  class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
     static const field dart.core::List<main::CompilationStrategy*>* values = #C15;
     @#C1
     static const field main::CompilationStrategy* direct = #C5;
@@ -54,11 +52,13 @@
     static const field main::CompilationStrategy* toData = #C11;
     @#C1
     static const field main::CompilationStrategy* fromData = #C14;
-    const constructor •(dart.core::int* index, dart.core::String* _name) → main::CompilationStrategy*
-      : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
+    const constructor •(dart.core::int* index, dart.core::String* name) → main::CompilationStrategy*
+      : super dart.core::_Enum::•(index, name)
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name}{dart.core::String*};
+      return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
+    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
+    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -82,16 +82,16 @@
   #C1 = "hello"
   #C2 = dart.core::_Override {}
   #C3 = 0
-  #C4 = "CompilationStrategy.direct"
+  #C4 = "direct"
   #C5 = main::CompilationStrategy {index:#C3, _name:#C4}
   #C6 = 1
-  #C7 = "CompilationStrategy.toKernel"
+  #C7 = "toKernel"
   #C8 = main::CompilationStrategy {index:#C6, _name:#C7}
   #C9 = 2
-  #C10 = "CompilationStrategy.toData"
+  #C10 = "toData"
   #C11 = main::CompilationStrategy {index:#C9, _name:#C10}
   #C12 = 3
-  #C13 = "CompilationStrategy.fromData"
+  #C13 = "fromData"
   #C14 = main::CompilationStrategy {index:#C12, _name:#C13}
   #C15 = <main::CompilationStrategy*>[#C5, #C8, #C11, #C14]
 }
diff --git a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect
index 73cad31..a3acf52 100644
--- a/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/no_outline_change_7.yaml.world.2.expect
@@ -42,9 +42,7 @@
     }
   }
   @#C1
-  class CompilationStrategy extends dart.core::Object implements dart.core::Enum /*isEnum*/  {
-    final field dart.core::int* index;
-    final field dart.core::String* _name;
+  class CompilationStrategy extends dart.core::_Enum /*isEnum*/  {
     static const field dart.core::List<main::CompilationStrategy*>* values = #C15;
     @#C1
     static const field main::CompilationStrategy* direct = #C5;
@@ -54,11 +52,13 @@
     static const field main::CompilationStrategy* toData = #C11;
     @#C1
     static const field main::CompilationStrategy* fromData = #C14;
-    const constructor •(dart.core::int* index, dart.core::String* _name) → main::CompilationStrategy*
-      : main::CompilationStrategy::index = index, main::CompilationStrategy::_name = _name, super dart.core::Object::•()
+    const constructor •(dart.core::int* index, dart.core::String* name) → main::CompilationStrategy*
+      : super dart.core::_Enum::•(index, name)
       ;
     method toString() → dart.core::String*
-      return this.{main::CompilationStrategy::_name}{dart.core::String*};
+      return "CompilationStrategy.${this.{dart.core::_Enum::_name}{dart.core::String}}";
+    abstract member-signature get index() → dart.core::int*; -> dart.core::_Enum::index
+    abstract member-signature get _name() → dart.core::String*; -> dart.core::_Enum::_name
     abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
     abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
     abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
@@ -82,16 +82,16 @@
   #C1 = "hello"
   #C2 = dart.core::_Override {}
   #C3 = 0
-  #C4 = "CompilationStrategy.direct"
+  #C4 = "direct"
   #C5 = main::CompilationStrategy {index:#C3, _name:#C4}
   #C6 = 1
-  #C7 = "CompilationStrategy.toKernel"
+  #C7 = "toKernel"
   #C8 = main::CompilationStrategy {index:#C6, _name:#C7}
   #C9 = 2
-  #C10 = "CompilationStrategy.toData"
+  #C10 = "toData"
   #C11 = main::CompilationStrategy {index:#C9, _name:#C10}
   #C12 = 3
-  #C13 = "CompilationStrategy.fromData"
+  #C13 = "fromData"
   #C14 = main::CompilationStrategy {index:#C12, _name:#C13}
   #C15 = <main::CompilationStrategy*>[#C5, #C8, #C11, #C14]
 }
diff --git a/pkg/front_end/testcases/inference/async_await.dart.weak.expect b/pkg/front_end/testcases/inference/async_await.dart.weak.expect
index 3505342..3d172fc 100644
--- a/pkg/front_end/testcases/inference/async_await.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/async_await.dart.weak.expect
@@ -23,7 +23,7 @@
   abstract member-signature method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<core::int*>*; -> asy::Future::catchError
   abstract member-signature method whenComplete(() →* FutureOr<void>* action) → asy::Future<core::int*>*; -> asy::Future::whenComplete
   abstract member-signature method asStream() → asy::Stream<core::int*>*; -> asy::Future::asStream
-  abstract member-signature method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<core::int*>* onTimeout = #C1}) → asy::Future<core::int*>*; -> asy::Future::timeout
+  abstract member-signature method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<core::int*>* onTimeout = #C1}) → asy::Future<core::int*>*; -> asy::Future::timeout
 }
 static method test() → void async {
   core::int* x0;
diff --git a/pkg/front_end/testcases/inference/async_await.dart.weak.outline.expect b/pkg/front_end/testcases/inference/async_await.dart.weak.outline.expect
index f148d78..e82fc2c 100644
--- a/pkg/front_end/testcases/inference/async_await.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/async_await.dart.weak.outline.expect
@@ -22,7 +22,7 @@
   abstract member-signature method catchError(core::Function* onError, {(core::Object*) →* core::bool* test}) → asy::Future<core::int*>*; -> asy::Future::catchError
   abstract member-signature method whenComplete(() →* FutureOr<void>* action) → asy::Future<core::int*>*; -> asy::Future::whenComplete
   abstract member-signature method asStream() → asy::Stream<core::int*>*; -> asy::Future::asStream
-  abstract member-signature method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<core::int*>* onTimeout}) → asy::Future<core::int*>*; -> asy::Future::timeout
+  abstract member-signature method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<core::int*>* onTimeout}) → asy::Future<core::int*>*; -> asy::Future::timeout
 }
 static method test() → void async 
   ;
diff --git a/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect
index d27df25..919ede4 100644
--- a/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/async_await.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
   abstract member-signature method catchError(core::Function* onError, {(core::Object*) →* core::bool* test = #C1}) → asy::Future<core::int*>*; -> asy::Future::catchError
   abstract member-signature method whenComplete(() →* FutureOr<void>* action) → asy::Future<core::int*>*; -> asy::Future::whenComplete
   abstract member-signature method asStream() → asy::Stream<core::int*>*; -> asy::Future::asStream
-  abstract member-signature method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<core::int*>* onTimeout = #C1}) → asy::Future<core::int*>*; -> asy::Future::timeout
+  abstract member-signature method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<core::int*>* onTimeout = #C1}) → asy::Future<core::int*>*; -> asy::Future::timeout
 }
 static method test() → void /* originally async */ {
   final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.expect
index 4b28fa6..36688cc 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P*>*
     : super core::Object::•()
     ;
-  method call([generic-covariant-impl self::ActionDispatcher::P* value = #C1]) → void {}
+  method call([covariant-by-class self::ActionDispatcher::P* value = #C1]) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect
index e16e799..79e8640 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class ActionDispatcher<P extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P*>*
     ;
-  method call([generic-covariant-impl self::ActionDispatcher::P* value]) → void
+  method call([covariant-by-class self::ActionDispatcher::P* value]) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.transformed.expect
index 4b28fa6..36688cc 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::ActionDispatcher<self::ActionDispatcher::P*>*
     : super core::Object::•()
     ;
-  method call([generic-covariant-impl self::ActionDispatcher::P* value = #C1]) → void {}
+  method call([covariant-by-class self::ActionDispatcher::P* value = #C1]) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.expect
index fb5b0b4..1797fc0 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t;
+  covariant-by-class field self::C::T* t;
   constructor •(self::C::T* t) → self::C<self::C::T*>*
     : self::C::t = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.outline.expect
index 64cfd71..887879c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t;
+  covariant-by-class field self::C::T* t;
   constructor •(self::C::T* t) → self::C<self::C::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.transformed.expect
index fb5b0b4..1797fc0 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t;
+  covariant-by-class field self::C::T* t;
   constructor •(self::C::T* t) → self::C<self::C::T*>*
     : self::C::t = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.expect
index 92bc857..32c7a0d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t = null;
+  covariant-by-class field self::C::T* t = null;
   constructor _() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.outline.expect
index 61a4ffe..6553bf2 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t;
+  covariant-by-class field self::C::T* t;
   constructor _() → self::C<self::C::T*>*
     ;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.transformed.expect
index 92bc857..32c7a0d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t = null;
+  covariant-by-class field self::C::T* t = null;
   constructor _() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.expect
index 36785af..ba0e34d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::A<self::A::T*>* f = new self::A::•<self::A::T*>();
+  covariant-by-class field self::A<self::A::T*>* f = new self::A::•<self::A::T*>();
   constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.outline.expect
index 70adc28..72615ce 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::A<self::A::T*>* f;
+  covariant-by-class field self::A<self::A::T*>* f;
   constructor •() → self::A<self::A::T*>*
     ;
   static factory factory<T extends core::Object* = dynamic>() → self::A<self::A::factory::T*>*
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.transformed.expect
index 36785af..ba0e34d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::A<self::A::T*>* f = new self::A::•<self::A::T*>();
+  covariant-by-class field self::A<self::A::T*>* f = new self::A::•<self::A::T*>();
   constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.expect
index a4ae7f6..adf0647 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t = null;
+  covariant-by-class field self::C::T* t = null;
   constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.outline.expect
index 21710da..20b7987 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t;
+  covariant-by-class field self::C::T* t;
   constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.transformed.expect
index d74aad4..dda1a71 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t = null;
+  covariant-by-class field self::C::T* t = null;
   constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.expect
index 5fb66da..c030443 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t = null;
+  covariant-by-class field self::C::T* t = null;
   constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.outline.expect
index 87cc4a8..42a6d2b 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t;
+  covariant-by-class field self::C::T* t;
   constructor •() → self::C<self::C::T*>*
     ;
   static factory named<T extends core::Object* = dynamic>(self::C::named::T* t) → self::C<self::C::named::T*>*
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.transformed.expect
index 5fb66da..c030443 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t = null;
+  covariant-by-class field self::C::T* t = null;
   constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.expect
index 048cb94..b9202f7 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t;
+  covariant-by-class field self::C::T* t;
   constructor •(self::C::T* t) → self::C<self::C::T*>*
     : self::C::t = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.outline.expect
index cb1c5d9..0424549 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t;
+  covariant-by-class field self::C::T* t;
   constructor •(self::C::T* t) → self::C<self::C::T*>*
     ;
   constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.transformed.expect
index 832cd3f..f41db2a 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t;
+  covariant-by-class field self::C::T* t;
   constructor •(self::C::T* t) → self::C<self::C::T*>*
     : self::C::t = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
index e347a7d..ec2714c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.expect
@@ -5,7 +5,7 @@
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T*;
-  abstract set t(generic-covariant-impl self::C::T* x) → void;
+  abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
     return new self::CImpl::•<self::C::•::T*>(t);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  generic-covariant-impl field self::CImpl::T* t;
+  covariant-by-class field self::CImpl::T* t;
   constructor •(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
     : self::CImpl::t = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
index 1056c97..a882ba7 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T*;
-  abstract set t(generic-covariant-impl self::C::T* x) → void;
+  abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
     return new self::CImpl::•<self::C::•::T*>(t);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  generic-covariant-impl field self::CImpl::T* t;
+  covariant-by-class field self::CImpl::T* t;
   constructor •(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
index e347a7d..ec2714c 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T*;
-  abstract set t(generic-covariant-impl self::C::T* x) → void;
+  abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
     return new self::CImpl::•<self::C::•::T*>(t);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  generic-covariant-impl field self::CImpl::T* t;
+  covariant-by-class field self::CImpl::T* t;
   constructor •(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
     : self::CImpl::t = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
index 2f9257b..cf8581d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.expect
@@ -5,7 +5,7 @@
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T*;
-  abstract set t(generic-covariant-impl self::C::T* x) → void;
+  abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
     return self::CImpl::•<self::C::•::T*>(t);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  generic-covariant-impl field self::CImpl::T* t;
+  covariant-by-class field self::CImpl::T* t;
   constructor _(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
     : self::CImpl::t = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
index 6eaaeb2..f2e7522 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T*;
-  abstract set t(generic-covariant-impl self::C::T* x) → void;
+  abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
     return self::CImpl::•<self::C::•::T*>(t);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  generic-covariant-impl field self::CImpl::T* t;
+  covariant-by-class field self::CImpl::T* t;
   constructor _(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
     ;
   static factory •<T extends core::Object* = dynamic>(self::CImpl::•::T* t) → self::CImpl<self::CImpl::•::T*>*
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
index 2f9257b..cf8581d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory_to_factory.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 abstract class C<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self::C::•];
   abstract get t() → self::C::T*;
-  abstract set t(generic-covariant-impl self::C::T* x) → void;
+  abstract set t(covariant-by-class self::C::T* x) → void;
   static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
     return self::CImpl::•<self::C::•::T*>(t);
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -20,7 +20,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
-  generic-covariant-impl field self::CImpl::T* t;
+  covariant-by-class field self::CImpl::T* t;
   constructor _(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
     : self::CImpl::t = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.expect
index 4793404..5ef8772 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.expect
@@ -39,8 +39,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Pair<T extends self::Cloneable<self::Pair::T*>* = self::Cloneable<dynamic>*, U extends self::Cloneable<self::Pair::U*>* = self::Cloneable<dynamic>*> extends core::Object {
-  generic-covariant-impl field self::Pair::T* t;
-  generic-covariant-impl field self::Pair::U* u;
+  covariant-by-class field self::Pair::T* t;
+  covariant-by-class field self::Pair::U* u;
   constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
     : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.outline.expect
index fd4e681..e628b1f 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.outline.expect
@@ -17,8 +17,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Pair<T extends self::Cloneable<self::Pair::T*>* = self::Cloneable<dynamic>*, U extends self::Cloneable<self::Pair::U*>* = self::Cloneable<dynamic>*> extends core::Object {
-  generic-covariant-impl field self::Pair::T* t;
-  generic-covariant-impl field self::Pair::U* u;
+  covariant-by-class field self::Pair::T* t;
+  covariant-by-class field self::Pair::U* u;
   constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
     ;
   constructor _() → self::Pair<self::Pair::T*, self::Pair::U*>*
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.transformed.expect
index 4793404..5ef8772 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.weak.transformed.expect
@@ -39,8 +39,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Pair<T extends self::Cloneable<self::Pair::T*>* = self::Cloneable<dynamic>*, U extends self::Cloneable<self::Pair::U*>* = self::Cloneable<dynamic>*> extends core::Object {
-  generic-covariant-impl field self::Pair::T* t;
-  generic-covariant-impl field self::Pair::U* u;
+  covariant-by-class field self::Pair::T* t;
+  covariant-by-class field self::Pair::U* u;
   constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
     : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.expect
index 2fddef8..f36fcca 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 class Pair<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::Pair::T* t;
-  generic-covariant-impl field self::Pair::U* u;
+  covariant-by-class field self::Pair::T* t;
+  covariant-by-class field self::Pair::U* u;
   constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
     : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.outline.expect
index 600f065..cc30784 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.outline.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 class Pair<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::Pair::T* t;
-  generic-covariant-impl field self::Pair::U* u;
+  covariant-by-class field self::Pair::T* t;
+  covariant-by-class field self::Pair::U* u;
   constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
     ;
   get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.transformed.expect
index 2fddef8..f36fcca 100644
--- a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.weak.transformed.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 class Pair<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::Pair::T* t;
-  generic-covariant-impl field self::Pair::U* u;
+  covariant-by-class field self::Pair::T* t;
+  covariant-by-class field self::Pair::U* u;
   constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
     : self::Pair::t = t, self::Pair::u = u, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.expect
index 012a172..9ecd2a9 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.expect
@@ -4,7 +4,7 @@
 
 typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field (self::A::T*) →* self::A::T* x;
+  covariant-by-class field (self::A::T*) →* self::A::T* x;
   constructor •((self::A::T*) →* self::A::T* x) → self::A<self::A::T*>*
     : self::A::x = x, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.outline.expect
index a35ee68..a40472f 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.outline.expect
@@ -4,7 +4,7 @@
 
 typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field (self::A::T*) →* self::A::T* x;
+  covariant-by-class field (self::A::T*) →* self::A::T* x;
   constructor •((self::A::T*) →* self::A::T* x) → self::A<self::A::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.transformed.expect
index 541ab60..d687121 100644
--- a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 typedef Function2<contravariant S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field (self::A::T*) →* self::A::T* x;
+  covariant-by-class field (self::A::T*) →* self::A::T* x;
   constructor •((self::A::T*) →* self::A::T* x) → self::A<self::A::T*>*
     : self::A::x = x, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.expect
index 0887aa4..e2d0f6d 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.expect
@@ -16,9 +16,9 @@
   abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
   abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
   abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(generic-covariant-impl asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(generic-covariant-impl asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(generic-covariant-impl (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
+  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
+  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
+  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
   abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
   abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
   abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
@@ -39,9 +39,9 @@
   abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
   abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
   abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
+  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
+  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
+  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
   abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
   abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.outline.expect
index 9f2d3d5..8b72842 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.outline.expect
@@ -16,9 +16,9 @@
   abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
   abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
   abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(generic-covariant-impl asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(generic-covariant-impl asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(generic-covariant-impl (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
+  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
+  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
+  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
   abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
   abstract member-signature method join([core::String* separator]) → asy::Future<core::String*>*; -> asy::Stream::join
   abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
@@ -39,9 +39,9 @@
   abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
   abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
   abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
+  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
+  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
+  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
   abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
   abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
index 58aee22..acaf1c5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.weak.transformed.expect
@@ -17,9 +17,9 @@
   abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
   abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
   abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(generic-covariant-impl asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(generic-covariant-impl asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(generic-covariant-impl (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
+  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
+  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
+  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
   abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
   abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
   abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
@@ -40,9 +40,9 @@
   abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
   abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
   abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
+  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
+  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
+  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
   abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
   abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.expect
index f92f047..ef65173 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.expect
@@ -122,8 +122,8 @@
 import "dart:core" as core;
 
 class A<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::S* x;
-  generic-covariant-impl field self::A::T* y;
+  covariant-by-class field self::A::S* x;
+  covariant-by-class field self::A::T* y;
   constructor •(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
     : self::A::x = x, self::A::y = y, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect
index 96e5702..6b90f7f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.outline.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 class A<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::S* x;
-  generic-covariant-impl field self::A::T* y;
+  covariant-by-class field self::A::S* x;
+  covariant-by-class field self::A::T* y;
   constructor •(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
     ;
   constructor named(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.transformed.expect
index 4e5791d..82fa878 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.weak.transformed.expect
@@ -122,8 +122,8 @@
 import "dart:core" as core;
 
 class A<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::S* x;
-  generic-covariant-impl field self::A::T* y;
+  covariant-by-class field self::A::S* x;
+  covariant-by-class field self::A::T* y;
   constructor •(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
     : self::A::x = x, self::A::y = y, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.expect
index 6c7b42a..5951999 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.expect
@@ -43,9 +43,9 @@
   abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
   abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
   abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(generic-covariant-impl asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(generic-covariant-impl asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(generic-covariant-impl (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
+  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
+  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
+  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
   abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
   abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
   abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
@@ -66,9 +66,9 @@
   abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
   abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
   abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
+  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
+  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
+  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
   abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
   abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.outline.expect
index fa0d3a1..b893e24 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.outline.expect
@@ -16,9 +16,9 @@
   abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
   abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
   abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(generic-covariant-impl asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(generic-covariant-impl asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(generic-covariant-impl (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
+  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
+  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
+  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
   abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
   abstract member-signature method join([core::String* separator]) → asy::Future<core::String*>*; -> asy::Stream::join
   abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
@@ -39,9 +39,9 @@
   abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
   abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
   abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
+  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
+  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
+  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
   abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
   abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
index da9eb92..2c8befb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.weak.transformed.expect
@@ -43,9 +43,9 @@
   abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
   abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
   abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(generic-covariant-impl asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(generic-covariant-impl asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(generic-covariant-impl (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
+  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
+  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
+  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
   abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
   abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
   abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
@@ -66,9 +66,9 @@
   abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
   abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
   abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
+  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
+  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
+  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
   abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
   abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.expect
index 79f586d..3472083 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
index fa70fa8..1e5bf1d 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
index ebbb28f..ab96b76 100644
--- a/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
index 8f3643d..caba7e5 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
index 3331b4b..65c689a 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
index 15051a3..bffba5e 100644
--- a/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_2.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
index d9cb030..1efc406 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
index 92505c9..dec6dfa 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
index 368ce6e..37463d1 100644
--- a/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_3.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
index c491abd..eaff2a5 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
index 0d4b044..716cde4 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
index d176677..90f1db4 100644
--- a/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_4.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
index aa3d05d..955cbb3 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
index cd0922d..b9060d8 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
index 318e683..39baeba 100644
--- a/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_5.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
index 75d2f5d..438bfac 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
index 6a4d2fb..f7c82fa 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
index f4dfb05..6a2855eb 100644
--- a/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_6.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect
index fb4378d..816b3ee 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
index 0a27a6a..3a661d0 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
index 5d7a1fe..204dbee 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect
index d864eac8..11b74949 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
index 27a58a7..68bc085 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
index f202144..608046f 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_2.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect
index 11b99b2..11b63b1 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
index eaab4f9..bb3f357 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
index b438010..e32c9fb 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_3.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect
index 83476f3..cc3ada3 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
index 813047c..c9869bc 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
index 82dc7e6..02b3b6b 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_4.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect
index d4f206c..83acf25 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
index 61887ea..c2dff99 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
index 834a83a..e0176fc 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_5.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect
index 57630d1..0c2809d 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
index d6ba05d..4bf3e0c 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
index d4996b3..9fb5822 100644
--- a/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_conditional_6.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect
index 3a30b28..39e82e2 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
index 06ec4a9..3719c43 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
index 2813500..bf8be62 100644
--- a/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_ifNull.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
index 869eafa..ac37ff3 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.expect
@@ -38,7 +38,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
index b978e12..0838a5b 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
index 7d2c4a1..2303412 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.weak.transformed.expect
@@ -38,7 +38,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
index 4df6e43..e071ff7 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.expect
@@ -37,7 +37,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
index 44a136e..244190b 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
index 6d60a7f..085b108 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.weak.transformed.expect
@@ -37,7 +37,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
index 6c6c9b4..c45ca17 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.expect
@@ -37,7 +37,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
index 7c4a996..0096c45 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
index b8c4c7b..9c5d495 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.weak.transformed.expect
@@ -37,7 +37,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method test() → void {
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect
index fbdcf12..dcdc4a1 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* async {
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
index 0da1c68..45d1408 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* async 
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
index 0e7e9a1..2dc93c6 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect
index 60b288f..1c0791d 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* async {
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
index 0756964..6e0c9a1 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* async 
diff --git a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
index 3a793fb..e56689e 100644
--- a/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_async_conditional_2.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static method g1(core::bool* x) → asy::Future<core::int*>* /* originally async */ {
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
index d5fb637..ccef45f 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.expect
@@ -36,7 +36,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
index e7977c8..53ccca1 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
index 03222bb..3145f91 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.weak.transformed.expect
@@ -36,7 +36,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
index f725158..09bd9c2 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
index 0f19da5..f4f33bc 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
index e855582..0bdd40c 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_2.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field self::MyFuture<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
index 85616d6..36b2fa5 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.expect
@@ -36,7 +36,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
index d2c02c7..cd98612 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
index b99e170..925b980 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.weak.transformed.expect
@@ -36,7 +36,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
index 0691134..5ecc3e7 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
index a75836f..57e4893 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.outline.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#asStream, 0, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
index 35fb5f2..e0915b4 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_4.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
   no-such-method-forwarder method asStream() → asy::Stream<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, #C8, core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Stream<self::MyFuture::T*>*;
-  no-such-method-forwarder method timeout(core::Duration* timeLimit, {generic-covariant-impl () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
+  no-such-method-forwarder method timeout(core::Duration* timeLimit, {covariant-by-class () →* FutureOr<self::MyFuture::T*>* onTimeout = #C1}) → asy::Future<self::MyFuture::T*>*
     return this.{self::MyFuture::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onTimeout}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} asy::Future<self::MyFuture::T*>*;
 }
 static field asy::Future<dynamic>* f;
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.expect
index fc573b1..3871d0a 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.expect
@@ -15,7 +15,7 @@
   synthetic constructor •() → self::Foo<self::Foo::T*>*
     : super core::Object::•()
     ;
-  method method<generic-covariant-impl U extends self::Foo::T*>(self::Foo::method::U* u) → self::Foo::method::U*
+  method method<covariant-by-class U extends self::Foo::T*>(self::Foo::method::U* u) → self::Foo::method::U*
     return u;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.outline.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.outline.expect
index 981c3c1..0542c0b 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class Foo<T extends core::Pattern*> extends core::Object {
   synthetic constructor •() → self::Foo<self::Foo::T*>*
     ;
-  method method<generic-covariant-impl U extends self::Foo::T*>(self::Foo::method::U* u) → self::Foo::method::U*
+  method method<covariant-by-class U extends self::Foo::T*>(self::Foo::method::U* u) → self::Foo::method::U*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.expect
index 9529eaa..7b26ea1 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field core::List<self::A::T*>* z = null;
+  covariant-by-class field core::List<self::A::T*>* z = null;
   synthetic constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
   abstract get x() → core::List<self::A::T*>*;
-  abstract set y(generic-covariant-impl core::List<self::A::T*>* value) → void;
+  abstract set y(covariant-by-class core::List<self::A::T*>* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,8 +22,8 @@
 }
 class B extends self::A<core::int*> {
   field core::List<core::int*>* x = null;
-  generic-covariant-impl field core::List<core::int*>* y = null;
-  generic-covariant-impl field core::List<core::int*>* z = null;
+  covariant-by-class field core::List<core::int*>* y = null;
+  covariant-by-class field core::List<core::int*>* z = null;
   synthetic constructor •() → self::B*
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.outline.expect
index 9867698..b7a1c61 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field core::List<self::A::T*>* z;
+  covariant-by-class field core::List<self::A::T*>* z;
   synthetic constructor •() → self::A<self::A::T*>*
     ;
   abstract get x() → core::List<self::A::T*>*;
-  abstract set y(generic-covariant-impl core::List<self::A::T*>* value) → void;
+  abstract set y(covariant-by-class core::List<self::A::T*>* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -21,8 +21,8 @@
 }
 class B extends self::A<core::int*> {
   field core::List<core::int*>* x;
-  generic-covariant-impl field core::List<core::int*>* y;
-  generic-covariant-impl field core::List<core::int*>* z;
+  covariant-by-class field core::List<core::int*>* y;
+  covariant-by-class field core::List<core::int*>* z;
   synthetic constructor •() → self::B*
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.transformed.expect
index 9529eaa..7b26ea1 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.weak.transformed.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field core::List<self::A::T*>* z = null;
+  covariant-by-class field core::List<self::A::T*>* z = null;
   synthetic constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
   abstract get x() → core::List<self::A::T*>*;
-  abstract set y(generic-covariant-impl core::List<self::A::T*>* value) → void;
+  abstract set y(covariant-by-class core::List<self::A::T*>* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,8 +22,8 @@
 }
 class B extends self::A<core::int*> {
   field core::List<core::int*>* x = null;
-  generic-covariant-impl field core::List<core::int*>* y = null;
-  generic-covariant-impl field core::List<core::int*>* z = null;
+  covariant-by-class field core::List<core::int*>* y = null;
+  covariant-by-class field core::List<core::int*>* z = null;
   synthetic constructor •() → self::B*
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.expect b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.expect
index 6755b95..91d941e 100644
--- a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<X extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::X* field = null;
+  covariant-by-class field self::A::X* field = null;
   synthetic constructor •() → self::A<self::A::X*>*
     : super core::Object::•()
     ;
@@ -23,7 +23,7 @@
     : super core::Object::•()
     ;
   abstract get field() → self::B::Y*;
-  abstract set field(generic-covariant-impl self::B::Y* value) → void;
+  abstract set field(covariant-by-class self::B::Y* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -40,7 +40,7 @@
     : super core::Object::•()
     ;
   abstract get field() → core::int*;
-  abstract set field(generic-covariant-impl core::int* value) → void;
+  abstract set field(covariant-by-class core::int* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.outline.expect
index 05d693d..cc52187 100644
--- a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<X extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::X* field;
+  covariant-by-class field self::A::X* field;
   synthetic constructor •() → self::A<self::A::X*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::B<self::B::Y*>*
     ;
   abstract get field() → self::B::Y*;
-  abstract set field(generic-covariant-impl self::B::Y* value) → void;
+  abstract set field(covariant-by-class self::B::Y* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -37,7 +37,7 @@
   synthetic constructor •() → self::C*
     ;
   abstract get field() → core::int*;
-  abstract set field(generic-covariant-impl core::int* value) → void;
+  abstract set field(covariant-by-class core::int* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.transformed.expect
index 6755b95..91d941e 100644
--- a/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_field_types.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<X extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::X* field = null;
+  covariant-by-class field self::A::X* field = null;
   synthetic constructor •() → self::A<self::A::X*>*
     : super core::Object::•()
     ;
@@ -23,7 +23,7 @@
     : super core::Object::•()
     ;
   abstract get field() → self::B::Y*;
-  abstract set field(generic-covariant-impl self::B::Y* value) → void;
+  abstract set field(covariant-by-class self::B::Y* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -40,7 +40,7 @@
     : super core::Object::•()
     ;
   abstract get field() → core::int*;
-  abstract set field(generic-covariant-impl core::int* value) → void;
+  abstract set field(covariant-by-class core::int* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect
index ce66d87..4e199e1 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T* x = null;
+  covariant-by-class field self::A::T* x = null;
   synthetic constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -26,7 +26,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> {
-  generic-covariant-impl field self::B::E* y = null;
+  covariant-by-class field self::B::E* y = null;
   synthetic constructor •() → self::B<self::B::E*>*
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.outline.expect
index 580534d..6bff580 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T* x;
+  covariant-by-class field self::A::T* x;
   synthetic constructor •() → self::A<self::A::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -18,7 +18,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> {
-  generic-covariant-impl field self::B::E* y;
+  covariant-by-class field self::B::E* y;
   synthetic constructor •() → self::B<self::B::E*>*
     ;
   get x() → self::B::E*
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect
index ce66d87..4e199e1 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T* x = null;
+  covariant-by-class field self::A::T* x = null;
   synthetic constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
@@ -26,7 +26,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> {
-  generic-covariant-impl field self::B::E* y = null;
+  covariant-by-class field self::B::E* y = null;
   synthetic constructor •() → self::B<self::B::E*>*
     : super self::A::•()
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect
index 4e36d34..680de12 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.expect
@@ -51,7 +51,7 @@
   synthetic constructor •() → self::Bar<self::Bar::T*>*
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::Bar::T* t) → void {
+  method foo(covariant-by-class self::Bar::T* t) → void {
     for (core::String* i in t) {
       core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
@@ -73,7 +73,7 @@
   synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::Baz::S* t) → void {
+  method foo(covariant-by-class self::Baz::S* t) → void {
     for (self::Baz::T* i in t) {
       core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.outline.expect
index a8d39ff..aafbf7f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.outline.expect
@@ -20,7 +20,7 @@
 class Bar<T extends core::Iterable<core::String*>*> extends core::Object {
   synthetic constructor •() → self::Bar<self::Bar::T*>*
     ;
-  method foo(generic-covariant-impl self::Bar::T* t) → void
+  method foo(covariant-by-class self::Bar::T* t) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -36,7 +36,7 @@
 class Baz<T extends core::Object* = dynamic, E extends core::Iterable<self::Baz::T*>* = core::Iterable<dynamic>*, S extends self::Baz::E* = core::Iterable<dynamic>*> extends core::Object {
   synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
     ;
-  method foo(generic-covariant-impl self::Baz::S* t) → void
+  method foo(covariant-by-class self::Baz::S* t) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect
index d522cdb..06b4abd 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.weak.transformed.expect
@@ -51,7 +51,7 @@
   synthetic constructor •() → self::Bar<self::Bar::T*>*
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::Bar::T* t) → void {
+  method foo(covariant-by-class self::Bar::T* t) → void {
     {
       core::Iterator<core::String*>* :sync-for-iterator = t.{core::Iterable::iterator}{core::Iterator<core::String*>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
@@ -79,7 +79,7 @@
   synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::Baz::S* t) → void {
+  method foo(covariant-by-class self::Baz::S* t) → void {
     {
       core::Iterator<self::Baz::T*>* :sync-for-iterator = t.{core::Iterable::iterator}{core::Iterator<self::Baz::T*>*};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect
index 5a5abe3..c16146f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.expect
@@ -54,7 +54,7 @@
   synthetic constructor •() → self::Bar<self::Bar::T*>*
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::Bar::T* t) → dynamic async {
+  method foo(covariant-by-class self::Bar::T* t) → dynamic async {
     await for (core::String* i in t) {
       core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
@@ -76,7 +76,7 @@
   synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::Baz::S* t) → dynamic async {
+  method foo(covariant-by-class self::Baz::S* t) → dynamic async {
     await for (self::Baz::T* i in t) {
       core::int* x = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'T' can't be assigned to a variable of type 'int'.
       int x = /*error:INVALID_ASSIGNMENT*/ i;
@@ -106,9 +106,9 @@
   abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
   abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
   abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(generic-covariant-impl asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(generic-covariant-impl asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(generic-covariant-impl (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
+  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
+  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
+  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
   abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
   abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
   abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
@@ -129,9 +129,9 @@
   abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
   abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
   abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
+  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
+  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
+  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
   abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
   abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.outline.expect
index 3b83fec..ad06471 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.outline.expect
@@ -23,7 +23,7 @@
 class Bar<T extends asy::Stream<core::String*>*> extends core::Object {
   synthetic constructor •() → self::Bar<self::Bar::T*>*
     ;
-  method foo(generic-covariant-impl self::Bar::T* t) → dynamic async 
+  method foo(covariant-by-class self::Bar::T* t) → dynamic async 
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -39,7 +39,7 @@
 class Baz<T extends core::Object* = dynamic, E extends asy::Stream<self::Baz::T*>* = asy::Stream<dynamic>*, S extends self::Baz::E* = asy::Stream<dynamic>*> extends core::Object {
   synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
     ;
-  method foo(generic-covariant-impl self::Baz::S* t) → dynamic async 
+  method foo(covariant-by-class self::Baz::S* t) → dynamic async 
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -63,9 +63,9 @@
   abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
   abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
   abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(generic-covariant-impl asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(generic-covariant-impl asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(generic-covariant-impl (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
+  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
+  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
+  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
   abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
   abstract member-signature method join([core::String* separator]) → asy::Future<core::String*>*; -> asy::Stream::join
   abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
@@ -86,9 +86,9 @@
   abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
   abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
   abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
+  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
+  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
+  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
   abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
   abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
index ecf46cd..fef5b28 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.weak.transformed.expect
@@ -55,7 +55,7 @@
   synthetic constructor •() → self::Bar<self::Bar::T*>*
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::Bar::T* t) → dynamic /* originally async */ {
+  method foo(covariant-by-class self::Bar::T* t) → dynamic /* originally async */ {
     final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     FutureOr<dynamic>* :return_value;
@@ -124,7 +124,7 @@
   synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::Baz::S* t) → dynamic /* originally async */ {
+  method foo(covariant-by-class self::Baz::S* t) → dynamic /* originally async */ {
     final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
     core::bool* :is_sync = false;
     FutureOr<dynamic>* :return_value;
@@ -201,9 +201,9 @@
   abstract member-signature method asyncExpand<E extends core::Object* = dynamic>((self::MyStream::T*) →* asy::Stream<self::MyStream::asyncExpand::E*>* convert) → asy::Stream<self::MyStream::asyncExpand::E*>*; -> asy::Stream::asyncExpand
   abstract member-signature method handleError(core::Function* onError, {(dynamic) →* core::bool* test = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::handleError
   abstract member-signature method expand<S extends core::Object* = dynamic>((self::MyStream::T*) →* core::Iterable<self::MyStream::expand::S*>* convert) → asy::Stream<self::MyStream::expand::S*>*; -> asy::Stream::expand
-  abstract member-signature method pipe(generic-covariant-impl asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
-  abstract member-signature method transform<S extends core::Object* = dynamic>(generic-covariant-impl asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
-  abstract member-signature method reduce(generic-covariant-impl (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
+  abstract member-signature method pipe(covariant-by-class asy::StreamConsumer<self::MyStream::T*>* streamConsumer) → asy::Future<dynamic>*; -> asy::Stream::pipe
+  abstract member-signature method transform<S extends core::Object* = dynamic>(covariant-by-class asy::StreamTransformer<self::MyStream::T*, self::MyStream::transform::S*>* streamTransformer) → asy::Stream<self::MyStream::transform::S*>*; -> asy::Stream::transform
+  abstract member-signature method reduce(covariant-by-class (self::MyStream::T*, self::MyStream::T*) →* self::MyStream::T* combine) → asy::Future<self::MyStream::T*>*; -> asy::Stream::reduce
   abstract member-signature method fold<S extends core::Object* = dynamic>(self::MyStream::fold::S* initialValue, (self::MyStream::fold::S*, self::MyStream::T*) →* self::MyStream::fold::S* combine) → asy::Future<self::MyStream::fold::S*>*; -> asy::Stream::fold
   abstract member-signature method join([core::String* separator = #C2]) → asy::Future<core::String*>*; -> asy::Stream::join
   abstract member-signature method contains(core::Object* needle) → asy::Future<core::bool*>*; -> asy::Stream::contains
@@ -224,9 +224,9 @@
   abstract member-signature get first() → asy::Future<self::MyStream::T*>*; -> asy::Stream::first
   abstract member-signature get last() → asy::Future<self::MyStream::T*>*; -> asy::Stream::last
   abstract member-signature get single() → asy::Future<self::MyStream::T*>*; -> asy::Stream::single
-  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
-  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
-  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {generic-covariant-impl () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
+  abstract member-signature method firstWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::firstWhere
+  abstract member-signature method lastWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::lastWhere
+  abstract member-signature method singleWhere((self::MyStream::T*) →* core::bool* test, {covariant-by-class () →* self::MyStream::T* orElse = #C1}) → asy::Future<self::MyStream::T*>*; -> asy::Stream::singleWhere
   abstract member-signature method elementAt(core::int* index) → asy::Future<self::MyStream::T*>*; -> asy::Stream::elementAt
   abstract member-signature method timeout(core::Duration* timeLimit, {(asy::EventSink<self::MyStream::T*>*) →* void onTimeout = #C1}) → asy::Stream<self::MyStream::T*>*; -> asy::Stream::timeout
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
index 84bd9ed..5f1e09a 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class E extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E*>* values = #C4;
   static const field self::E* v1 = #C3;
-  const constructor •(core::int* index, core::String* _name) → self::E*
-    : self::E::index = index, self::E::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::E*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::E::_name}{core::String*};
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -29,7 +29,7 @@
 
 constants  {
   #C1 = 0
-  #C2 = "E.v1"
+  #C2 = "v1"
   #C3 = self::E {index:#C1, _name:#C2}
   #C4 = <self::E*>[#C3]
 }
@@ -38,4 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum.dart:8:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.outline.expect
index 0f72ee9..ef3d712 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.outline.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class E extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E*>* values = const <self::E*>[self::E::v1];
-  static const field self::E* v1 = const self::E::•(0, "E.v1");
-  const constructor •(core::int* index, core::String* _name) → self::E*
-    : self::E::index = index, self::E::_name = _name, super core::Object::•()
+  static const field self::E* v1 = const self::E::•(0, "v1");
+  const constructor •(core::int* index, core::String* name) → self::E*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::E::_name}{core::String*};
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -28,6 +28,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: ListLiteral @ org-dartlang-testcase:///inferred_type_is_enum.dart:8:6 -> ListConstant(const <E*>[const E{E.index: 0, E._name: "E.v1"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inferred_type_is_enum.dart:8:10 -> InstanceConstant(const E{E.index: 0, E._name: "E.v1"})
-Extra constant evaluation: evaluated: 6, effectively constant: 2
+Evaluated: ListLiteral @ org-dartlang-testcase:///inferred_type_is_enum.dart:8:6 -> ListConstant(const <E*>[const E{_Enum.index: 0, _Enum._name: "v1"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inferred_type_is_enum.dart:8:10 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "v1"})
+Extra constant evaluation: evaluated: 7, effectively constant: 2
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
index 84bd9ed..5f1e09a 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class E extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E*>* values = #C4;
   static const field self::E* v1 = #C3;
-  const constructor •(core::int* index, core::String* _name) → self::E*
-    : self::E::index = index, self::E::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::E*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::E::_name}{core::String*};
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -29,7 +29,7 @@
 
 constants  {
   #C1 = 0
-  #C2 = "E.v1"
+  #C2 = "v1"
   #C3 = self::E {index:#C1, _name:#C2}
   #C4 = <self::E*>[#C3]
 }
@@ -38,4 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum.dart:8:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
index 827859e..624054f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class E extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E*>* values = #C4;
   static const field self::E* v1 = #C3;
-  const constructor •(core::int* index, core::String* _name) → self::E*
-    : self::E::index = index, self::E::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::E*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::E::_name}{core::String*};
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -29,7 +29,7 @@
 
 constants  {
   #C1 = 0
-  #C2 = "E.v1"
+  #C2 = "v1"
   #C3 = self::E {index:#C1, _name:#C2}
   #C4 = <self::E*>[#C3]
 }
@@ -38,4 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum_values.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.outline.expect
index f462cb1..553e8da 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.outline.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class E extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E*>* values = const <self::E*>[self::E::v1];
-  static const field self::E* v1 = const self::E::•(0, "E.v1");
-  const constructor •(core::int* index, core::String* _name) → self::E*
-    : self::E::index = index, self::E::_name = _name, super core::Object::•()
+  static const field self::E* v1 = const self::E::•(0, "v1");
+  const constructor •(core::int* index, core::String* name) → self::E*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::E::_name}{core::String*};
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -28,6 +28,6 @@
 
 
 Extra constant evaluation status:
-Evaluated: ListLiteral @ org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6 -> ListConstant(const <E*>[const E{E.index: 0, E._name: "E.v1"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:10 -> InstanceConstant(const E{E.index: 0, E._name: "E.v1"})
-Extra constant evaluation: evaluated: 6, effectively constant: 2
+Evaluated: ListLiteral @ org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6 -> ListConstant(const <E*>[const E{_Enum.index: 0, _Enum._name: "v1"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:10 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "v1"})
+Extra constant evaluation: evaluated: 7, effectively constant: 2
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
index 827859e..624054f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
@@ -2,16 +2,16 @@
 import self as self;
 import "dart:core" as core;
 
-class E extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E*>* values = #C4;
   static const field self::E* v1 = #C3;
-  const constructor •(core::int* index, core::String* _name) → self::E*
-    : self::E::index = index, self::E::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::E*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::E::_name}{core::String*};
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -29,7 +29,7 @@
 
 constants  {
   #C1 = 0
-  #C2 = "E.v1"
+  #C2 = "v1"
   #C3 = self::E {index:#C1, _name:#C2}
   #C4 = <self::E*>[#C3]
 }
@@ -38,4 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum_values.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.expect
index 11470da..908eca7 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t;
+  covariant-by-class field self::C::T* t;
   constructor •(self::C::T* t) → self::C<self::C::T*>*
     : self::C::t = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.outline.expect
index c009c03..7285233 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t;
+  covariant-by-class field self::C::T* t;
   constructor •(self::C::T* t) → self::C<self::C::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.transformed.expect
index 11470da..908eca7 100644
--- a/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/local_constructor_from_arguments.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* t;
+  covariant-by-class field self::C::T* t;
   constructor •(self::C::T* t) → self::C<self::C::T*>*
     : self::C::t = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.expect b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.expect
index 07b39aa..4e88a92 100644
--- a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::X*>*
     : super core::Object::•()
     ;
-  abstract method foo({generic-covariant-impl core::Iterable<self::A::X*>* x = #C1}) → void;
+  abstract method foo({covariant-by-class core::Iterable<self::A::X*>* x = #C1}) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::B<self::B::Y*>*
     : super core::Object::•()
     ;
-  method foo({generic-covariant-impl core::Iterable<self::B::Y*>* x = #C1}) → void {}
+  method foo({covariant-by-class core::Iterable<self::B::Y*>* x = #C1}) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect
index a09301d..ab7f834 100644
--- a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 abstract class A<X extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::A<self::A::X*>*
     ;
-  abstract method foo({generic-covariant-impl core::Iterable<self::A::X*>* x}) → void;
+  abstract method foo({covariant-by-class core::Iterable<self::A::X*>* x}) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -20,7 +20,7 @@
 class B<Y extends core::Object* = dynamic> extends core::Object implements self::A<self::B::Y*> {
   synthetic constructor •() → self::B<self::B::Y*>*
     ;
-  method foo({generic-covariant-impl core::Iterable<self::B::Y*>* x}) → void
+  method foo({covariant-by-class core::Iterable<self::B::Y*>* x}) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.transformed.expect
index 07b39aa..4e88a92 100644
--- a/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/override_inference_with_type_parameters.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::X*>*
     : super core::Object::•()
     ;
-  abstract method foo({generic-covariant-impl core::Iterable<self::A::X*>* x = #C1}) → void;
+  abstract method foo({covariant-by-class core::Iterable<self::A::X*>* x = #C1}) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::B<self::B::Y*>*
     : super core::Object::•()
     ;
-  method foo({generic-covariant-impl core::Iterable<self::B::Y*>* x = #C1}) → void {}
+  method foo({covariant-by-class core::Iterable<self::B::Y*>* x = #C1}) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/property_set.dart.weak.expect b/pkg/front_end/testcases/inference/property_set.dart.weak.expect
index 286b94e..c2feed8 100644
--- a/pkg/front_end/testcases/inference/property_set.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/property_set.dart.weak.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field core::List<self::A::T*>* x = null;
+  covariant-by-class field core::List<self::A::T*>* x = null;
   synthetic constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
-  set y(generic-covariant-impl core::List<self::A::T*>* value) → void {}
+  set y(covariant-by-class core::List<self::A::T*>* value) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/property_set.dart.weak.outline.expect b/pkg/front_end/testcases/inference/property_set.dart.weak.outline.expect
index 78494f0..d3de504 100644
--- a/pkg/front_end/testcases/inference/property_set.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/property_set.dart.weak.outline.expect
@@ -3,10 +3,10 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field core::List<self::A::T*>* x;
+  covariant-by-class field core::List<self::A::T*>* x;
   synthetic constructor •() → self::A<self::A::T*>*
     ;
-  set y(generic-covariant-impl core::List<self::A::T*>* value) → void
+  set y(covariant-by-class core::List<self::A::T*>* value) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/property_set.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/property_set.dart.weak.transformed.expect
index 29bdd38..851362e 100644
--- a/pkg/front_end/testcases/inference/property_set.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/property_set.dart.weak.transformed.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field core::List<self::A::T*>* x = null;
+  covariant-by-class field core::List<self::A::T*>* x = null;
   synthetic constructor •() → self::A<self::A::T*>*
     : super core::Object::•()
     ;
-  set y(generic-covariant-impl core::List<self::A::T*>* value) → void {}
+  set y(covariant-by-class core::List<self::A::T*>* value) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.expect
index c4b9a8c..a3cae75 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::num*> extends core::Object {
-  generic-covariant-impl field self::C::T* a = null;
+  covariant-by-class field self::C::T* a = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.outline.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.outline.expect
index f6a0aba..da27d89 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::num*> extends core::Object {
-  generic-covariant-impl field self::C::T* a;
+  covariant-by-class field self::C::T* a;
   synthetic constructor •() → self::C<self::C::T*>*
     ;
   method op(core::double* b) → void
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.transformed.expect
index c4b9a8c..a3cae75 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::num*> extends core::Object {
-  generic-covariant-impl field self::C::T* a = null;
+  covariant-by-class field self::C::T* a = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.expect
index 23ed30d..24e9591 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::num*> extends core::Object {
-  generic-covariant-impl field self::C::T* a = null;
+  covariant-by-class field self::C::T* a = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.outline.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.outline.expect
index 5781f2e..3c6642c 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::num*> extends core::Object {
-  generic-covariant-impl field self::C::T* a;
+  covariant-by-class field self::C::T* a;
   synthetic constructor •() → self::C<self::C::T*>*
     ;
   method op(core::int* b) → void
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.transformed.expect
index 23ed30d..24e9591 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::num*> extends core::Object {
-  generic-covariant-impl field self::C::T* a = null;
+  covariant-by-class field self::C::T* a = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.expect
index 591ea9e..88143e7 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.expect
@@ -3,16 +3,16 @@
 import "dart:core" as core;
 
 class C<T extends core::num*> extends core::Object {
-  generic-covariant-impl field self::C::T* a = null;
+  covariant-by-class field self::C::T* a = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method op(generic-covariant-impl self::C::T* b) → void {
+  method op(covariant-by-class self::C::T* b) → void {
     self::C::T* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
     self::C::T* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
     self::C::T* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
   }
-  method opEq(generic-covariant-impl self::C::T* b) → void {
+  method opEq(covariant-by-class self::C::T* b) → void {
     this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
     this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
     this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.outline.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.outline.expect
index 8b713df..d31dffe 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.outline.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class C<T extends core::num*> extends core::Object {
-  generic-covariant-impl field self::C::T* a;
+  covariant-by-class field self::C::T* a;
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method op(generic-covariant-impl self::C::T* b) → void
+  method op(covariant-by-class self::C::T* b) → void
     ;
-  method opEq(generic-covariant-impl self::C::T* b) → void
+  method opEq(covariant-by-class self::C::T* b) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.transformed.expect
index 591ea9e..88143e7 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.weak.transformed.expect
@@ -3,16 +3,16 @@
 import "dart:core" as core;
 
 class C<T extends core::num*> extends core::Object {
-  generic-covariant-impl field self::C::T* a = null;
+  covariant-by-class field self::C::T* a = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method op(generic-covariant-impl self::C::T* b) → void {
+  method op(covariant-by-class self::C::T* b) → void {
     self::C::T* r1 = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
     self::C::T* r2 = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
     self::C::T* r3 = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
   }
-  method opEq(generic-covariant-impl self::C::T* b) → void {
+  method opEq(covariant-by-class self::C::T* b) → void {
     this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::+}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
     this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::-}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
     this.{self::C::a} = this.{self::C::a}{self::C::T*}.{core::num::*}(b){(core::num*) →* core::num*} as{TypeError} self::C::T*;
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.expect
index c8eced6..e59a920 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.expect
@@ -9,7 +9,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  operator []=(generic-covariant-impl core::Map<core::int*, self::B::T*>* x, generic-covariant-impl core::List<self::B::T*>* y) → void {}
+  operator []=(covariant-by-class core::Map<core::int*, self::B::T*>* x, covariant-by-class core::List<self::B::T*>* y) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -25,7 +25,7 @@
   synthetic constructor •() → self::C<self::C::U*>*
     : super self::B::•()
     ;
-  operator []=(generic-covariant-impl core::Object* x, generic-covariant-impl core::Object* y) → void {}
+  operator []=(covariant-by-class core::Object* x, covariant-by-class core::Object* y) → void {}
   method h() → void {
     super.{self::B::[]=}(self::f<core::Map<core::int*, asy::Future<self::C::U*>*>*>(), self::f<core::List<asy::Future<self::C::U*>*>*>());
   }
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.outline.expect
index 3d1911d..0dcfd55 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.outline.expect
@@ -8,7 +8,7 @@
 class B<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::B<self::B::T*>*
     ;
-  operator []=(generic-covariant-impl core::Map<core::int*, self::B::T*>* x, generic-covariant-impl core::List<self::B::T*>* y) → void
+  operator []=(covariant-by-class core::Map<core::int*, self::B::T*>* x, covariant-by-class core::List<self::B::T*>* y) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -24,7 +24,7 @@
 class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
   synthetic constructor •() → self::C<self::C::U*>*
     ;
-  operator []=(generic-covariant-impl core::Object* x, generic-covariant-impl core::Object* y) → void
+  operator []=(covariant-by-class core::Object* x, covariant-by-class core::Object* y) → void
     ;
   method h() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.transformed.expect
index c8eced6..e59a920 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  operator []=(generic-covariant-impl core::Map<core::int*, self::B::T*>* x, generic-covariant-impl core::List<self::B::T*>* y) → void {}
+  operator []=(covariant-by-class core::Map<core::int*, self::B::T*>* x, covariant-by-class core::List<self::B::T*>* y) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -25,7 +25,7 @@
   synthetic constructor •() → self::C<self::C::U*>*
     : super self::B::•()
     ;
-  operator []=(generic-covariant-impl core::Object* x, generic-covariant-impl core::Object* y) → void {}
+  operator []=(covariant-by-class core::Object* x, covariant-by-class core::Object* y) → void {}
   method h() → void {
     super.{self::B::[]=}(self::f<core::Map<core::int*, asy::Future<self::C::U*>*>*>(), self::f<core::List<asy::Future<self::C::U*>*>*>());
   }
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.expect
index f291bcb..940c20e 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.expect
@@ -29,7 +29,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  method g(generic-covariant-impl self::E<self::B::T*>* x) → self::D<self::B::T*>*
+  method g(covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -46,7 +46,7 @@
   synthetic constructor •() → self::C<self::C::U*>*
     : super self::B::•()
     ;
-  method g(generic-covariant-impl core::Object* x) → self::E<asy::Future<self::C::U*>*>*
+  method g(covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
     return null;
   method h() → void {
     self::D<asy::Future<self::C::U*>*>* x = super.{self::B::g}(self::f<self::E<asy::Future<self::C::U*>*>*>());
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.outline.expect
index 81bca255..d0fbc6d 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.outline.expect
@@ -26,7 +26,7 @@
 class B<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::B<self::B::T*>*
     ;
-  method g(generic-covariant-impl self::E<self::B::T*>* x) → self::D<self::B::T*>*
+  method g(covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -42,7 +42,7 @@
 class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
   synthetic constructor •() → self::C<self::C::U*>*
     ;
-  method g(generic-covariant-impl core::Object* x) → self::E<asy::Future<self::C::U*>*>*
+  method g(covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
     ;
   method h() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.transformed.expect
index f291bcb..940c20e 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  method g(generic-covariant-impl self::E<self::B::T*>* x) → self::D<self::B::T*>*
+  method g(covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -46,7 +46,7 @@
   synthetic constructor •() → self::C<self::C::U*>*
     : super self::B::•()
     ;
-  method g(generic-covariant-impl core::Object* x) → self::E<asy::Future<self::C::U*>*>*
+  method g(covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
     return null;
   method h() → void {
     self::D<asy::Future<self::C::U*>*>* x = super.{self::B::g}(self::f<self::E<asy::Future<self::C::U*>*>*>());
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.expect
index 9e8abb6..752cdaf 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.expect
@@ -26,7 +26,7 @@
     ;
 }
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::D<self::B::T*>* x = null;
+  covariant-by-class field self::D<self::B::T*>* x = null;
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     ;
   get x() → self::E<asy::Future<self::C::U*>*>*
     return null;
-  set x(generic-covariant-impl core::Object* x) → void {}
+  set x(covariant-by-class core::Object* x) → void {}
   method g() → void {
     self::D<asy::Future<self::C::U*>*>* y = super.{self::B::x};
   }
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.outline.expect
index fad8b86..94018b3 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.outline.expect
@@ -24,7 +24,7 @@
     ;
 }
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::D<self::B::T*>* x;
+  covariant-by-class field self::D<self::B::T*>* x;
   synthetic constructor •() → self::B<self::B::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -43,7 +43,7 @@
     ;
   get x() → self::E<asy::Future<self::C::U*>*>*
     ;
-  set x(generic-covariant-impl core::Object* x) → void
+  set x(covariant-by-class core::Object* x) → void
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.transformed.expect
index 9e8abb6..752cdaf 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
     ;
 }
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::D<self::B::T*>* x = null;
+  covariant-by-class field self::D<self::B::T*>* x = null;
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     ;
   get x() → self::E<asy::Future<self::C::U*>*>*
     return null;
-  set x(generic-covariant-impl core::Object* x) → void {}
+  set x(covariant-by-class core::Object* x) → void {}
   method g() → void {
     self::D<asy::Future<self::C::U*>*>* y = super.{self::B::x};
   }
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.expect
index 95a3a94..2b490e3 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.expect
@@ -26,7 +26,7 @@
     ;
 }
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::D<self::B::T*>* x = null;
+  covariant-by-class field self::D<self::B::T*>* x = null;
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     ;
   get x() → self::E<asy::Future<self::C::U*>*>*
     return null;
-  set x(generic-covariant-impl core::Object* x) → void {}
+  set x(covariant-by-class core::Object* x) → void {}
   method g() → void {
     super.{self::B::x} = self::f<self::D<asy::Future<self::C::U*>*>*>();
   }
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.outline.expect
index 38e2b7d..b8d091c 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.outline.expect
@@ -24,7 +24,7 @@
     ;
 }
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::D<self::B::T*>* x;
+  covariant-by-class field self::D<self::B::T*>* x;
   synthetic constructor •() → self::B<self::B::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -43,7 +43,7 @@
     ;
   get x() → self::E<asy::Future<self::C::U*>*>*
     ;
-  set x(generic-covariant-impl core::Object* x) → void
+  set x(covariant-by-class core::Object* x) → void
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.transformed.expect
index 95a3a94..2b490e3 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
     ;
 }
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::D<self::B::T*>* x = null;
+  covariant-by-class field self::D<self::B::T*>* x = null;
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
@@ -47,7 +47,7 @@
     ;
   get x() → self::E<asy::Future<self::C::U*>*>*
     return null;
-  set x(generic-covariant-impl core::Object* x) → void {}
+  set x(covariant-by-class core::Object* x) → void {}
   method g() → void {
     super.{self::B::x} = self::f<self::D<asy::Future<self::C::U*>*>*>();
   }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect
index bae6ac3..92e9469 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.expect
@@ -39,10 +39,10 @@
     ;
   operator [](core::String* s) → self::Base::T*
     return this.{self::Base::getValue}(s){(core::String*) →* self::Base::T*};
-  operator []=(core::String* s, generic-covariant-impl self::Base::U* v) → void
+  operator []=(core::String* s, covariant-by-class self::Base::U* v) → void
     return this.{self::Base::setValue}(s, v){(core::String*, self::Base::U*) →* void};
   abstract method getValue(core::String* s) → self::Base::T*;
-  abstract method setValue(core::String* s, generic-covariant-impl self::Base::U* v) → void;
+  abstract method setValue(core::String* s, covariant-by-class self::Base::U* v) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.outline.expect
index 66eb461..95eeab9 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.weak.outline.expect
@@ -7,10 +7,10 @@
     ;
   operator [](core::String* s) → self::Base::T*
     ;
-  operator []=(core::String* s, generic-covariant-impl self::Base::U* v) → void
+  operator []=(core::String* s, covariant-by-class self::Base::U* v) → void
     ;
   abstract method getValue(core::String* s) → self::Base::T*;
-  abstract method setValue(core::String* s, generic-covariant-impl self::Base::U* v) → void;
+  abstract method setValue(core::String* s, covariant-by-class self::Base::U* v) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect
index 3b91dc5..895c644 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.expect
@@ -38,7 +38,7 @@
     : super core::Object::•()
     ;
   abstract operator [](core::String* s) → self::Test::T*;
-  abstract operator []=(core::String* s, generic-covariant-impl self::Test::U* v) → void;
+  abstract operator []=(core::String* s, covariant-by-class self::Test::U* v) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.outline.expect
index 1ab0c92..56cb2b5 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.weak.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Test<self::Test::T*, self::Test::U*>*
     ;
   abstract operator [](core::String* s) → self::Test::T*;
-  abstract operator []=(core::String* s, generic-covariant-impl self::Test::U* v) → void;
+  abstract operator []=(core::String* s, covariant-by-class self::Test::U* v) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.expect
index 91a7c07..b2841e6 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.expect
@@ -29,7 +29,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  operator [](generic-covariant-impl self::E<self::B::T*>* x) → self::D<self::B::T*>*
+  operator [](covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -46,7 +46,7 @@
   synthetic constructor •() → self::C<self::C::U*>*
     : super self::B::•()
     ;
-  operator [](generic-covariant-impl core::Object* x) → self::E<asy::Future<self::C::U*>*>*
+  operator [](covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
     return null;
   method h() → void {
     self::D<asy::Future<self::C::U*>*>* x = super.{self::B::[]}(self::f<self::E<asy::Future<self::C::U*>*>*>());
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.outline.expect
index 190da32..968cab6 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.outline.expect
@@ -26,7 +26,7 @@
 class B<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::B<self::B::T*>*
     ;
-  operator [](generic-covariant-impl self::E<self::B::T*>* x) → self::D<self::B::T*>*
+  operator [](covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -42,7 +42,7 @@
 class C<U extends core::Object* = dynamic> extends self::B<asy::Future<self::C::U*>*> {
   synthetic constructor •() → self::C<self::C::U*>*
     ;
-  operator [](generic-covariant-impl core::Object* x) → self::E<asy::Future<self::C::U*>*>*
+  operator [](covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
     ;
   method h() → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.transformed.expect
index 91a7c07..b2841e6 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.weak.transformed.expect
@@ -29,7 +29,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  operator [](generic-covariant-impl self::E<self::B::T*>* x) → self::D<self::B::T*>*
+  operator [](covariant-by-class self::E<self::B::T*>* x) → self::D<self::B::T*>*
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -46,7 +46,7 @@
   synthetic constructor •() → self::C<self::C::U*>*
     : super self::B::•()
     ;
-  operator [](generic-covariant-impl core::Object* x) → self::E<asy::Future<self::C::U*>*>*
+  operator [](covariant-by-class core::Object* x) → self::E<asy::Future<self::C::U*>*>*
     return null;
   method h() → void {
     self::D<asy::Future<self::C::U*>*>* x = super.{self::B::[]}(self::f<self::E<asy::Future<self::C::U*>*>*>());
diff --git a/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.strong.expect b/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.strong.expect
index 42ba9e8..78c816d 100644
--- a/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.strong.expect
@@ -26,7 +26,7 @@
     this.{self::A::_#A#invariantField} = #t2;
   get covariantField() → core::num
     return let final core::num? #t3 = this.{self::A::_#A#covariantField}{core::num?} in #t3 == null ?{core::num} throw new _in::LateError::fieldNI("covariantField") : #t3{core::num};
-  set covariantField(covariant core::num #t4) → void
+  set covariantField(covariant-by-declaration core::num #t4) → void
     this.{self::A::_#A#covariantField} = #t4;
 }
 abstract class B extends core::Object implements self::A {
@@ -36,7 +36,7 @@
   abstract get invariantField() → core::num;
   abstract set invariantField(core::num value) → void;
   abstract get covariantField() → core::num;
-  abstract set covariantField(covariant core::num value) → void;
+  abstract set covariantField(covariant-by-declaration core::num value) → void;
 }
 abstract class C extends core::Object implements self::A {
   synthetic constructor •() → self::C
@@ -45,15 +45,15 @@
   abstract get invariantField() → core::int;
   set invariantField(core::int value) → void {}
   abstract get covariantField() → core::int;
-  set covariantField(covariant core::int value) → void {}
+  set covariantField(covariant-by-declaration core::int value) → void {}
 }
 abstract class D extends core::Object implements self::A {
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
   abstract get invariantField() → core::int;
-  set invariantField(covariant core::int value) → void {}
+  set invariantField(covariant-by-declaration core::int value) → void {}
   abstract get covariantField() → core::int;
-  set covariantField(covariant core::int value) → void {}
+  set covariantField(covariant-by-declaration core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.expect b/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.expect
index 57c3e7c..c2ac0b9 100644
--- a/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.expect
@@ -30,7 +30,7 @@
   }
   get covariantField() → core::num
     return this.{self::A::_#A#covariantField#isSet}{core::bool} ?{core::num} let final core::num? #t3 = this.{self::A::_#A#covariantField}{core::num?} in #t3{core::num} : throw new _in::LateError::fieldNI("covariantField");
-  set covariantField(covariant core::num #t4) → void {
+  set covariantField(covariant-by-declaration core::num #t4) → void {
     this.{self::A::_#A#covariantField#isSet} = true;
     this.{self::A::_#A#covariantField} = #t4;
   }
@@ -42,7 +42,7 @@
   abstract get invariantField() → core::num;
   abstract set invariantField(core::num value) → void;
   abstract get covariantField() → core::num;
-  abstract set covariantField(covariant core::num value) → void;
+  abstract set covariantField(covariant-by-declaration core::num value) → void;
 }
 abstract class C extends core::Object implements self::A {
   synthetic constructor •() → self::C
@@ -51,15 +51,15 @@
   abstract get invariantField() → core::int;
   set invariantField(core::int value) → void {}
   abstract get covariantField() → core::int;
-  set covariantField(covariant core::int value) → void {}
+  set covariantField(covariant-by-declaration core::int value) → void {}
 }
 abstract class D extends core::Object implements self::A {
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
   abstract get invariantField() → core::int;
-  set invariantField(covariant core::int value) → void {}
+  set invariantField(covariant-by-declaration core::int value) → void {}
   abstract get covariantField() → core::int;
-  set covariantField(covariant core::int value) → void {}
+  set covariantField(covariant-by-declaration core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.outline.expect
index 3d8fe4d..9bc19d0 100644
--- a/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/covariant_late_field.dart.weak.outline.expect
@@ -23,7 +23,7 @@
   get invariantField() → core::num;
   set invariantField(core::num #t1) → void;
   get covariantField() → core::num;
-  set covariantField(covariant core::num #t2) → void;
+  set covariantField(covariant-by-declaration core::num #t2) → void;
 }
 abstract class B extends core::Object implements self::A {
   synthetic constructor •() → self::B
@@ -31,7 +31,7 @@
   abstract get invariantField() → core::num;
   abstract set invariantField(core::num value) → void;
   abstract get covariantField() → core::num;
-  abstract set covariantField(covariant core::num value) → void;
+  abstract set covariantField(covariant-by-declaration core::num value) → void;
 }
 abstract class C extends core::Object implements self::A {
   synthetic constructor •() → self::C
@@ -40,17 +40,17 @@
   set invariantField(core::int value) → void
     ;
   abstract get covariantField() → core::int;
-  set covariantField(covariant core::int value) → void
+  set covariantField(covariant-by-declaration core::int value) → void
     ;
 }
 abstract class D extends core::Object implements self::A {
   synthetic constructor •() → self::D
     ;
   abstract get invariantField() → core::int;
-  set invariantField(covariant core::int value) → void
+  set invariantField(covariant-by-declaration core::int value) → void
     ;
   abstract get covariantField() → core::int;
-  set covariantField(covariant core::int value) → void
+  set covariantField(covariant-by-declaration core::int value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.expect
index f161d74..0231470 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.expect
@@ -56,7 +56,7 @@
   }
   get property6() → core::int
     return let final core::int? #t4 = this.{self::A::_#A#property6}{core::int?} in #t4 == null ?{core::int} throw new _in::LateError::fieldNI("property6") : #t4{core::int};
-  set property6(covariant core::int #t5) → void
+  set property6(covariant-by-declaration core::int #t5) → void
     this.{self::A::_#A#property6} = #t5;
 }
 abstract class B1 extends core::Object {
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.transformed.expect
index f161d74..0231470 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.strong.transformed.expect
@@ -56,7 +56,7 @@
   }
   get property6() → core::int
     return let final core::int? #t4 = this.{self::A::_#A#property6}{core::int?} in #t4 == null ?{core::int} throw new _in::LateError::fieldNI("property6") : #t4{core::int};
-  set property6(covariant core::int #t5) → void
+  set property6(covariant-by-declaration core::int #t5) → void
     this.{self::A::_#A#property6} = #t5;
 }
 abstract class B1 extends core::Object {
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.expect
index 6a04d36..12210ba 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.expect
@@ -60,7 +60,7 @@
   }
   get property6() → core::int
     return this.{self::A::_#A#property6#isSet}{core::bool} ?{core::int} let final core::int? #t4 = this.{self::A::_#A#property6}{core::int?} in #t4{core::int} : throw new _in::LateError::fieldNI("property6");
-  set property6(covariant core::int #t5) → void {
+  set property6(covariant-by-declaration core::int #t5) → void {
     this.{self::A::_#A#property6#isSet} = true;
     this.{self::A::_#A#property6} = #t5;
   }
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.outline.expect
index 672ef21..85eb6cb 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.outline.expect
@@ -49,7 +49,7 @@
   get property5() → core::int?;
   set property5(core::int? #t2) → void;
   get property6() → core::int;
-  set property6(covariant core::int #t3) → void;
+  set property6(covariant-by-declaration core::int #t3) → void;
 }
 abstract class B1 extends core::Object {
   field core::int? _#B1#property4;
diff --git a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.transformed.expect
index 6a04d36..12210ba 100644
--- a/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart.weak.transformed.expect
@@ -60,7 +60,7 @@
   }
   get property6() → core::int
     return this.{self::A::_#A#property6#isSet}{core::bool} ?{core::int} let final core::int? #t4 = this.{self::A::_#A#property6}{core::int?} in #t4{core::int} : throw new _in::LateError::fieldNI("property6");
-  set property6(covariant core::int #t5) → void {
+  set property6(covariant-by-declaration core::int #t5) → void {
     this.{self::A::_#A#property6#isSet} = true;
     this.{self::A::_#A#property6} = #t5;
   }
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect
index d676a26..e8923f9 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method foo() → dynamic {
     lowered self::A::T? #value;
     lowered core::bool #value#isSet = false;
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect
index d676a26..e8923f9 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method foo() → dynamic {
     lowered self::A::T? #value;
     lowered core::bool #value#isSet = false;
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect
index d676a26..e8923f9 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method foo() → dynamic {
     lowered self::A::T? #value;
     lowered core::bool #value#isSet = false;
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.outline.expect
index f2c5efd..10e855d 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::T%>
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic
+  method bar(covariant-by-class self::A::T% value) → dynamic
     ;
   method foo() → dynamic
     ;
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect
index d676a26..e8923f9 100644
--- a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     : super core::Object::•()
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method foo() → dynamic {
     lowered self::A::T? #value;
     lowered core::bool #value#isSet = false;
diff --git a/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.expect
index d9d0eaa..ccb488e 100644
--- a/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.expect
@@ -10,7 +10,7 @@
     ;
   get x() → core::int
     return let final core::int? #t1 = this.{self::C::_#C#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
-  set x(covariant core::int #t2) → void
+  set x(covariant-by-declaration core::int #t2) → void
     if(this.{self::C::_#C#x}{core::int?} == null)
       this.{self::C::_#C#x} = #t2;
     else
@@ -20,7 +20,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant core::num value) → void {
+  set x(covariant-by-declaration core::num value) → void {
     super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.transformed.expect
index d9d0eaa..ccb488e 100644
--- a/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40805.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
     ;
   get x() → core::int
     return let final core::int? #t1 = this.{self::C::_#C#x}{core::int?} in #t1 == null ?{core::int} throw new _in::LateError::fieldNI("x") : #t1{core::int};
-  set x(covariant core::int #t2) → void
+  set x(covariant-by-declaration core::int #t2) → void
     if(this.{self::C::_#C#x}{core::int?} == null)
       this.{self::C::_#C#x} = #t2;
     else
@@ -20,7 +20,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant core::num value) → void {
+  set x(covariant-by-declaration core::num value) → void {
     super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.expect
index 5807cfc..a37d11f 100644
--- a/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.expect
@@ -11,7 +11,7 @@
     ;
   get x() → core::int
     return this.{self::C::_#C#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::C::_#C#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
-  set x(covariant core::int #t2) → void
+  set x(covariant-by-declaration core::int #t2) → void
     if(this.{self::C::_#C#x#isSet}{core::bool})
       throw new _in::LateError::fieldAI("x");
     else {
@@ -23,7 +23,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant core::num value) → void {
+  set x(covariant-by-declaration core::num value) → void {
     super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.outline.expect
index 3eeb3af..b50e707 100644
--- a/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.outline.expect
@@ -8,12 +8,12 @@
   synthetic constructor •() → self::C
     ;
   get x() → core::int;
-  set x(covariant core::int #t1) → void;
+  set x(covariant-by-declaration core::int #t1) → void;
 }
 class D extends self::C {
   synthetic constructor •() → self::D
     ;
-  set x(covariant core::num value) → void
+  set x(covariant-by-declaration core::num value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.transformed.expect
index 5807cfc..a37d11f 100644
--- a/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue40805.dart.weak.transformed.expect
@@ -11,7 +11,7 @@
     ;
   get x() → core::int
     return this.{self::C::_#C#x#isSet}{core::bool} ?{core::int} let final core::int? #t1 = this.{self::C::_#C#x}{core::int?} in #t1{core::int} : throw new _in::LateError::fieldNI("x");
-  set x(covariant core::int #t2) → void
+  set x(covariant-by-declaration core::int #t2) → void
     if(this.{self::C::_#C#x#isSet}{core::bool})
       throw new _in::LateError::fieldAI("x");
     else {
@@ -23,7 +23,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant core::num value) → void {
+  set x(covariant-by-declaration core::num value) → void {
     super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.expect
index c0a69a4..16c8e79 100644
--- a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.expect
@@ -4,26 +4,26 @@
 import "dart:_internal" as _in;
 
 class A<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T? _#A#x = null;
+  covariant-by-class field self::A::T? _#A#x = null;
   field core::bool _#A#x#isSet = false;
   synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
   get x() → self::A::T%
     return this.{self::A::_#A#x#isSet}{core::bool} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x}{self::A::T?} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
-  set x(generic-covariant-impl self::A::T% #t2) → void {
+  set x(covariant-by-class self::A::T% #t2) → void {
     this.{self::A::_#A#x#isSet} = true;
     this.{self::A::_#A#x} = #t2;
   }
 }
 class B<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T? _y = null;
+  covariant-by-class field self::B::T? _y = null;
   synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
   get y() → self::B::T?
     return this.{self::B::_y}{self::B::T?};
-  set y(generic-covariant-impl self::B::T? val) → void {
+  set y(covariant-by-class self::B::T? val) → void {
     this.{self::B::_y} = val;
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.transformed.expect
index c0a69a4..16c8e79 100644
--- a/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.strong.transformed.expect
@@ -4,26 +4,26 @@
 import "dart:_internal" as _in;
 
 class A<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T? _#A#x = null;
+  covariant-by-class field self::A::T? _#A#x = null;
   field core::bool _#A#x#isSet = false;
   synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
   get x() → self::A::T%
     return this.{self::A::_#A#x#isSet}{core::bool} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x}{self::A::T?} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
-  set x(generic-covariant-impl self::A::T% #t2) → void {
+  set x(covariant-by-class self::A::T% #t2) → void {
     this.{self::A::_#A#x#isSet} = true;
     this.{self::A::_#A#x} = #t2;
   }
 }
 class B<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T? _y = null;
+  covariant-by-class field self::B::T? _y = null;
   synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
   get y() → self::B::T?
     return this.{self::B::_y}{self::B::T?};
-  set y(generic-covariant-impl self::B::T? val) → void {
+  set y(covariant-by-class self::B::T? val) → void {
     this.{self::B::_y} = val;
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.expect
index c0a69a4..16c8e79 100644
--- a/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.expect
@@ -4,26 +4,26 @@
 import "dart:_internal" as _in;
 
 class A<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T? _#A#x = null;
+  covariant-by-class field self::A::T? _#A#x = null;
   field core::bool _#A#x#isSet = false;
   synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
   get x() → self::A::T%
     return this.{self::A::_#A#x#isSet}{core::bool} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x}{self::A::T?} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
-  set x(generic-covariant-impl self::A::T% #t2) → void {
+  set x(covariant-by-class self::A::T% #t2) → void {
     this.{self::A::_#A#x#isSet} = true;
     this.{self::A::_#A#x} = #t2;
   }
 }
 class B<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T? _y = null;
+  covariant-by-class field self::B::T? _y = null;
   synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
   get y() → self::B::T?
     return this.{self::B::_y}{self::B::T?};
-  set y(generic-covariant-impl self::B::T? val) → void {
+  set y(covariant-by-class self::B::T? val) → void {
     this.{self::B::_y} = val;
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.outline.expect
index 9abba16..e556e89 100644
--- a/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.outline.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 class A<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T? _#A#x;
+  covariant-by-class field self::A::T? _#A#x;
   field core::bool _#A#x#isSet;
   synthetic constructor •() → self::A<self::A::T%>
     ;
   get x() → self::A::T%;
-  set x(generic-covariant-impl self::A::T% #t1) → void;
+  set x(covariant-by-class self::A::T% #t1) → void;
 }
 class B<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T? _y;
+  covariant-by-class field self::B::T? _y;
   synthetic constructor •() → self::B<self::B::T%>
     ;
   get y() → self::B::T?
     ;
-  set y(generic-covariant-impl self::B::T? val) → void
+  set y(covariant-by-class self::B::T? val) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.transformed.expect
index c0a69a4..16c8e79 100644
--- a/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/issue42407.dart.weak.transformed.expect
@@ -4,26 +4,26 @@
 import "dart:_internal" as _in;
 
 class A<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T? _#A#x = null;
+  covariant-by-class field self::A::T? _#A#x = null;
   field core::bool _#A#x#isSet = false;
   synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
   get x() → self::A::T%
     return this.{self::A::_#A#x#isSet}{core::bool} ?{self::A::T%} let final self::A::T? #t1 = this.{self::A::_#A#x}{self::A::T?} in #t1{self::A::T%} : throw new _in::LateError::fieldNI("x");
-  set x(generic-covariant-impl self::A::T% #t2) → void {
+  set x(covariant-by-class self::A::T% #t2) → void {
     this.{self::A::_#A#x#isSet} = true;
     this.{self::A::_#A#x} = #t2;
   }
 }
 class B<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T? _y = null;
+  covariant-by-class field self::B::T? _y = null;
   synthetic constructor •() → self::B<self::B::T%>
     : super core::Object::•()
     ;
   get y() → self::B::T?
     return this.{self::B::_y}{self::B::T?};
-  set y(generic-covariant-impl self::B::T? val) → void {
+  set y(covariant-by-class self::B::T? val) → void {
     this.{self::B::_y} = val;
   }
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.expect
index 924fb03..9500bf5 100644
--- a/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.expect
@@ -41,7 +41,7 @@
   get covariantInstanceField() → core::num
     return let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField}{core::num?} in #t7 == null ?{core::num} throw new _in::LateError::fieldNI("covariantInstanceField") : #t7{core::num};
   @#C1
-  set covariantInstanceField(covariant core::num #t8) → void
+  set covariantInstanceField(covariant-by-declaration core::num #t8) → void
     this.{self::A::_#A#covariantInstanceField} = #t8;
   @#C1
   static get staticField() → core::int
@@ -92,7 +92,7 @@
   get covariantInstanceField() → core::num
     return let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField}{core::num?} in #t21 == null ?{core::num} throw new _in::LateError::fieldNI("covariantInstanceField") : #t21{core::num};
   @#C1
-  set covariantInstanceField(covariant core::num #t22) → void
+  set covariantInstanceField(covariant-by-declaration core::num #t22) → void
     this.{self::B::_#B#covariantInstanceField} = #t22;
   @#C1
   static get staticField() → core::int
diff --git a/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.transformed.expect
index 4ec55b0..5c3dc32 100644
--- a/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_annotations.dart.strong.transformed.expect
@@ -41,7 +41,7 @@
   get covariantInstanceField() → core::num
     return let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField}{core::num?} in #t7 == null ?{core::num} throw new _in::LateError::fieldNI("covariantInstanceField") : #t7{core::num};
   @#C1
-  set covariantInstanceField(covariant core::num #t8) → void
+  set covariantInstanceField(covariant-by-declaration core::num #t8) → void
     this.{self::A::_#A#covariantInstanceField} = #t8;
   @#C1
   static get staticField() → core::int
@@ -92,7 +92,7 @@
   get covariantInstanceField() → core::num
     return let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField}{core::num?} in #t21 == null ?{core::num} throw new _in::LateError::fieldNI("covariantInstanceField") : #t21{core::num};
   @#C1
-  set covariantInstanceField(covariant core::num #t22) → void
+  set covariantInstanceField(covariant-by-declaration core::num #t22) → void
     this.{self::B::_#B#covariantInstanceField} = #t22;
   @#C1
   static get staticField() → core::int
diff --git a/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.expect
index 6e971c0..784ff0c 100644
--- a/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.expect
@@ -60,7 +60,7 @@
   get covariantInstanceField() → core::num
     return this.{self::A::_#A#covariantInstanceField#isSet}{core::bool} ?{core::num} let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField}{core::num?} in #t7{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
   @#C1
-  set covariantInstanceField(covariant core::num #t8) → void {
+  set covariantInstanceField(covariant-by-declaration core::num #t8) → void {
     this.{self::A::_#A#covariantInstanceField#isSet} = true;
     this.{self::A::_#A#covariantInstanceField} = #t8;
   }
@@ -144,7 +144,7 @@
   get covariantInstanceField() → core::num
     return this.{self::B::_#B#covariantInstanceField#isSet}{core::bool} ?{core::num} let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField}{core::num?} in #t21{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
   @#C1
-  set covariantInstanceField(covariant core::num #t22) → void {
+  set covariantInstanceField(covariant-by-declaration core::num #t22) → void {
     this.{self::B::_#B#covariantInstanceField#isSet} = true;
     this.{self::B::_#B#covariantInstanceField} = #t22;
   }
diff --git a/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.outline.expect
index bbd8a08..282fc21 100644
--- a/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.outline.expect
@@ -37,7 +37,7 @@
   @self::Annotation::•()
   get covariantInstanceField() → core::num;
   @self::Annotation::•()
-  set covariantInstanceField(covariant core::num #t3) → void;
+  set covariantInstanceField(covariant-by-declaration core::num #t3) → void;
   @self::Annotation::•()
   static get staticField() → core::int;
   @self::Annotation::•()
@@ -77,7 +77,7 @@
   @self::Annotation::•()
   get covariantInstanceField() → core::num;
   @self::Annotation::•()
-  set covariantInstanceField(covariant core::num #t8) → void;
+  set covariantInstanceField(covariant-by-declaration core::num #t8) → void;
   @self::Annotation::•()
   static get staticField() → core::int;
   @self::Annotation::•()
diff --git a/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.transformed.expect
index 6e971c0..784ff0c 100644
--- a/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_annotations.dart.weak.transformed.expect
@@ -60,7 +60,7 @@
   get covariantInstanceField() → core::num
     return this.{self::A::_#A#covariantInstanceField#isSet}{core::bool} ?{core::num} let final core::num? #t7 = this.{self::A::_#A#covariantInstanceField}{core::num?} in #t7{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
   @#C1
-  set covariantInstanceField(covariant core::num #t8) → void {
+  set covariantInstanceField(covariant-by-declaration core::num #t8) → void {
     this.{self::A::_#A#covariantInstanceField#isSet} = true;
     this.{self::A::_#A#covariantInstanceField} = #t8;
   }
@@ -144,7 +144,7 @@
   get covariantInstanceField() → core::num
     return this.{self::B::_#B#covariantInstanceField#isSet}{core::bool} ?{core::num} let final core::num? #t21 = this.{self::B::_#B#covariantInstanceField}{core::num?} in #t21{core::num} : throw new _in::LateError::fieldNI("covariantInstanceField");
   @#C1
-  set covariantInstanceField(covariant core::num #t22) → void {
+  set covariantInstanceField(covariant-by-declaration core::num #t22) → void {
     this.{self::B::_#B#covariantInstanceField#isSet} = true;
     this.{self::B::_#B#covariantInstanceField} = #t22;
   }
diff --git a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.expect
index 3b5ec2f..7d0e4e3 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.expect
@@ -7,9 +7,9 @@
   static field core::int? _#lateStaticField2 = null;
   field core::int? _#Class#lateInstanceField = null;
   final field self::Class::T% field;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericField1 = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericField1 = null;
   field core::bool _#Class#lateGenericField1#isSet = false;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericField2 = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericField2 = null;
   field core::bool _#Class#lateGenericField2#isSet = false;
   constructor •(self::Class::T% field) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
@@ -38,7 +38,7 @@
     }
     return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1}{self::Class::T?} in #t7{self::Class::T%};
   }
-  set lateGenericField1(generic-covariant-impl self::Class::T% #t8) → void {
+  set lateGenericField1(covariant-by-class self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericField1#isSet} = true;
     this.{self::Class::_#Class#lateGenericField1} = #t8;
   }
@@ -49,11 +49,11 @@
     }
     return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2}{self::Class::T?} in #t9{self::Class::T%};
   }
-  set lateGenericField2(generic-covariant-impl self::Class::T% #t10) → void {
+  set lateGenericField2(covariant-by-class self::Class::T% #t10) → void {
     this.{self::Class::_#Class#lateGenericField2#isSet} = true;
     this.{self::Class::_#Class#lateGenericField2} = #t10;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
     self::expect(16, this.{self::Class::lateInstanceField}{core::int});
     this.{self::Class::lateInstanceField} = 17;
     self::expect(17, this.{self::Class::lateInstanceField}{core::int});
diff --git a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.transformed.expect
index 3b5ec2f..7d0e4e3 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.strong.transformed.expect
@@ -7,9 +7,9 @@
   static field core::int? _#lateStaticField2 = null;
   field core::int? _#Class#lateInstanceField = null;
   final field self::Class::T% field;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericField1 = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericField1 = null;
   field core::bool _#Class#lateGenericField1#isSet = false;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericField2 = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericField2 = null;
   field core::bool _#Class#lateGenericField2#isSet = false;
   constructor •(self::Class::T% field) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
@@ -38,7 +38,7 @@
     }
     return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1}{self::Class::T?} in #t7{self::Class::T%};
   }
-  set lateGenericField1(generic-covariant-impl self::Class::T% #t8) → void {
+  set lateGenericField1(covariant-by-class self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericField1#isSet} = true;
     this.{self::Class::_#Class#lateGenericField1} = #t8;
   }
@@ -49,11 +49,11 @@
     }
     return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2}{self::Class::T?} in #t9{self::Class::T%};
   }
-  set lateGenericField2(generic-covariant-impl self::Class::T% #t10) → void {
+  set lateGenericField2(covariant-by-class self::Class::T% #t10) → void {
     this.{self::Class::_#Class#lateGenericField2#isSet} = true;
     this.{self::Class::_#Class#lateGenericField2} = #t10;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
     self::expect(16, this.{self::Class::lateInstanceField}{core::int});
     this.{self::Class::lateInstanceField} = 17;
     self::expect(17, this.{self::Class::lateInstanceField}{core::int});
diff --git a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.expect
index 59acf34..8d1c620 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.expect
@@ -10,9 +10,9 @@
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
   final field self::Class::T% field;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericField1 = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericField1 = null;
   field core::bool _#Class#lateGenericField1#isSet = false;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericField2 = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericField2 = null;
   field core::bool _#Class#lateGenericField2#isSet = false;
   constructor •(self::Class::T% field) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
@@ -62,7 +62,7 @@
     }
     return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1}{self::Class::T?} in #t7{self::Class::T%};
   }
-  set lateGenericField1(generic-covariant-impl self::Class::T% #t8) → void {
+  set lateGenericField1(covariant-by-class self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericField1#isSet} = true;
     this.{self::Class::_#Class#lateGenericField1} = #t8;
   }
@@ -73,11 +73,11 @@
     }
     return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2}{self::Class::T?} in #t9{self::Class::T%};
   }
-  set lateGenericField2(generic-covariant-impl self::Class::T% #t10) → void {
+  set lateGenericField2(covariant-by-class self::Class::T% #t10) → void {
     this.{self::Class::_#Class#lateGenericField2#isSet} = true;
     this.{self::Class::_#Class#lateGenericField2} = #t10;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
     self::expect(16, this.{self::Class::lateInstanceField}{core::int});
     this.{self::Class::lateInstanceField} = 17;
     self::expect(17, this.{self::Class::lateInstanceField}{core::int});
diff --git a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.outline.expect
index b3aa1b5..c20e857 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.outline.expect
@@ -10,9 +10,9 @@
   field core::int? _#Class#lateInstanceField;
   field core::bool _#Class#lateInstanceField#isSet;
   final field self::Class::T% field;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericField1;
+  covariant-by-class field self::Class::T? _#Class#lateGenericField1;
   field core::bool _#Class#lateGenericField1#isSet;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericField2;
+  covariant-by-class field self::Class::T? _#Class#lateGenericField2;
   field core::bool _#Class#lateGenericField2#isSet;
   constructor •(self::Class::T% field) → self::Class<self::Class::T%>
     ;
@@ -25,10 +25,10 @@
   get lateInstanceField() → core::int;
   set lateInstanceField(core::int #t3) → void;
   get lateGenericField1() → self::Class::T%;
-  set lateGenericField1(generic-covariant-impl self::Class::T% #t4) → void;
+  set lateGenericField1(covariant-by-class self::Class::T% #t4) → void;
   get lateGenericField2() → self::Class::T%;
-  set lateGenericField2(generic-covariant-impl self::Class::T% #t5) → void;
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic
+  set lateGenericField2(covariant-by-class self::Class::T% #t5) → void;
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic
     ;
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
diff --git a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.transformed.expect
index 59acf34..8d1c620 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_with_initializer.dart.weak.transformed.expect
@@ -10,9 +10,9 @@
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
   final field self::Class::T% field;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericField1 = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericField1 = null;
   field core::bool _#Class#lateGenericField1#isSet = false;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericField2 = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericField2 = null;
   field core::bool _#Class#lateGenericField2#isSet = false;
   constructor •(self::Class::T% field) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
@@ -62,7 +62,7 @@
     }
     return let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericField1}{self::Class::T?} in #t7{self::Class::T%};
   }
-  set lateGenericField1(generic-covariant-impl self::Class::T% #t8) → void {
+  set lateGenericField1(covariant-by-class self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericField1#isSet} = true;
     this.{self::Class::_#Class#lateGenericField1} = #t8;
   }
@@ -73,11 +73,11 @@
     }
     return let final self::Class::T? #t9 = this.{self::Class::_#Class#lateGenericField2}{self::Class::T?} in #t9{self::Class::T%};
   }
-  set lateGenericField2(generic-covariant-impl self::Class::T% #t10) → void {
+  set lateGenericField2(covariant-by-class self::Class::T% #t10) → void {
     this.{self::Class::_#Class#lateGenericField2#isSet} = true;
     this.{self::Class::_#Class#lateGenericField2} = #t10;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
     self::expect(16, this.{self::Class::lateInstanceField}{core::int});
     this.{self::Class::lateInstanceField} = 17;
     self::expect(17, this.{self::Class::lateInstanceField}{core::int});
diff --git a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.expect
index 1b8458c..1483023 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.expect
@@ -7,7 +7,7 @@
   static field core::int? _#lateStaticField1 = null;
   static field core::int? _#lateStaticField2 = null;
   field core::int? _#Class#lateInstanceField = null;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
@@ -31,11 +31,11 @@
     this.{self::Class::_#Class#lateInstanceField} = #t6;
   get lateGenericInstanceField() → self::Class::T%
     return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T% #t8) → void {
+  set lateGenericInstanceField(covariant-by-class self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t8;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
     self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
     self::expect(16, this.{self::Class::lateInstanceField}{core::int});
diff --git a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.transformed.expect
index 1b8458c..1483023 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
   static field core::int? _#lateStaticField1 = null;
   static field core::int? _#lateStaticField2 = null;
   field core::int? _#Class#lateInstanceField = null;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
@@ -31,11 +31,11 @@
     this.{self::Class::_#Class#lateInstanceField} = #t6;
   get lateGenericInstanceField() → self::Class::T%
     return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T% #t8) → void {
+  set lateGenericInstanceField(covariant-by-class self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t8;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
     self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
     self::expect(16, this.{self::Class::lateInstanceField}{core::int});
diff --git a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.expect
index 03d2906..9734ddb 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.expect
@@ -10,7 +10,7 @@
   static field core::bool _#lateStaticField2#isSet = false;
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
@@ -40,11 +40,11 @@
   }
   get lateGenericInstanceField() → self::Class::T%
     return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T% #t8) → void {
+  set lateGenericInstanceField(covariant-by-class self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t8;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
     self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
     self::expect(16, this.{self::Class::lateInstanceField}{core::int});
diff --git a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.outline.expect
index e298e3a..b3cc2e8 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.outline.expect
@@ -9,7 +9,7 @@
   static field core::bool _#lateStaticField2#isSet;
   field core::int? _#Class#lateInstanceField;
   field core::bool _#Class#lateInstanceField#isSet;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField;
   field core::bool _#Class#lateGenericInstanceField#isSet;
   synthetic constructor •() → self::Class<self::Class::T%>
     ;
@@ -22,8 +22,8 @@
   get lateInstanceField() → core::int;
   set lateInstanceField(core::int #t3) → void;
   get lateGenericInstanceField() → self::Class::T%;
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T% #t4) → void;
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic
+  set lateGenericInstanceField(covariant-by-class self::Class::T% #t4) → void;
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic
     ;
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
diff --git a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.transformed.expect
index 03d2906..9734ddb 100644
--- a/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_field_without_initializer.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
   static field core::bool _#lateStaticField2#isSet = false;
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
@@ -40,11 +40,11 @@
   }
   get lateGenericInstanceField() → self::Class::T%
     return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T%} let final self::Class::T? #t7 = this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} in #t7{self::Class::T%} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T% #t8) → void {
+  set lateGenericInstanceField(covariant-by-class self::Class::T% #t8) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t8;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
     self::throws(() → core::int => this.{self::Class::lateInstanceField}{core::int}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
     self::expect(16, this.{self::Class::lateInstanceField}{core::int});
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.expect
index 3b2e679..7ca8dab 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.expect
@@ -27,7 +27,7 @@
   static field core::int? _#lateStaticField2 = null;
   field core::int? lateInstanceFieldInit = null;
   field core::int? _#Class#lateInstanceField = null;
-  generic-covariant-impl field self::Class::T? lateGenericFieldInit = null;
+  covariant-by-class field self::Class::T? lateGenericFieldInit = null;
   final field self::Class::T% field;
   field self::Class::T? _#Class#lateGenericField = null;
   field core::bool _#Class#lateGenericField#isSet = false;
@@ -54,7 +54,7 @@
   }
   get lateInstanceField() → core::int
     return let final core::int? #t7 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t7 == null ?{core::int} let final core::int #t8 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int} in this.{self::Class::_#Class#lateInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#lateInstanceField} = #t8 : throw new _in::LateError::fieldADI("lateInstanceField") : #t7{core::int};
-  method initLateGenericField(generic-covariant-impl self::Class::T% value) → self::Class::T% {
+  method initLateGenericField(covariant-by-class self::Class::T% value) → self::Class::T% {
     return this.{self::Class::lateGenericFieldInit} = value;
   }
   get lateGenericField() → self::Class::T% {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.transformed.expect
index 3b2e679..7ca8dab 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
   static field core::int? _#lateStaticField2 = null;
   field core::int? lateInstanceFieldInit = null;
   field core::int? _#Class#lateInstanceField = null;
-  generic-covariant-impl field self::Class::T? lateGenericFieldInit = null;
+  covariant-by-class field self::Class::T? lateGenericFieldInit = null;
   final field self::Class::T% field;
   field self::Class::T? _#Class#lateGenericField = null;
   field core::bool _#Class#lateGenericField#isSet = false;
@@ -54,7 +54,7 @@
   }
   get lateInstanceField() → core::int
     return let final core::int? #t7 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t7 == null ?{core::int} let final core::int #t8 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int} in this.{self::Class::_#Class#lateInstanceField}{core::int?} == null ?{core::int} this.{self::Class::_#Class#lateInstanceField} = #t8 : throw new _in::LateError::fieldADI("lateInstanceField") : #t7{core::int};
-  method initLateGenericField(generic-covariant-impl self::Class::T% value) → self::Class::T% {
+  method initLateGenericField(covariant-by-class self::Class::T% value) → self::Class::T% {
     return this.{self::Class::lateGenericFieldInit} = value;
   }
   get lateGenericField() → self::Class::T% {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.expect
index 25277e8..35715d5 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.expect
@@ -38,7 +38,7 @@
   field core::int? lateInstanceFieldInit = null;
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
-  generic-covariant-impl field self::Class::T? lateGenericFieldInit = null;
+  covariant-by-class field self::Class::T? lateGenericFieldInit = null;
   final field self::Class::T% field;
   field self::Class::T? _#Class#lateGenericField = null;
   field core::bool _#Class#lateGenericField#isSet = false;
@@ -89,7 +89,7 @@
     }
     return let final core::int? #t8 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t8{core::int};
   }
-  method initLateGenericField(generic-covariant-impl self::Class::T% value) → self::Class::T% {
+  method initLateGenericField(covariant-by-class self::Class::T% value) → self::Class::T% {
     return this.{self::Class::lateGenericFieldInit} = value;
   }
   get lateGenericField() → self::Class::T% {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.outline.expect
index f6ad987..5fb1e54 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.outline.expect
@@ -26,7 +26,7 @@
   field core::int? lateInstanceFieldInit;
   field core::int? _#Class#lateInstanceField;
   field core::bool _#Class#lateInstanceField#isSet;
-  generic-covariant-impl field self::Class::T? lateGenericFieldInit;
+  covariant-by-class field self::Class::T? lateGenericFieldInit;
   final field self::Class::T% field;
   field self::Class::T? _#Class#lateGenericField;
   field core::bool _#Class#lateGenericField#isSet;
@@ -43,7 +43,7 @@
   method initLateInstanceField(core::int value) → core::int
     ;
   get lateInstanceField() → core::int;
-  method initLateGenericField(generic-covariant-impl self::Class::T% value) → self::Class::T%
+  method initLateGenericField(covariant-by-class self::Class::T% value) → self::Class::T%
     ;
   get lateGenericField() → self::Class::T%;
   method instanceMethod() → dynamic
diff --git a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.transformed.expect
index 25277e8..35715d5 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_field_with_initializer.dart.weak.transformed.expect
@@ -38,7 +38,7 @@
   field core::int? lateInstanceFieldInit = null;
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
-  generic-covariant-impl field self::Class::T? lateGenericFieldInit = null;
+  covariant-by-class field self::Class::T? lateGenericFieldInit = null;
   final field self::Class::T% field;
   field self::Class::T? _#Class#lateGenericField = null;
   field core::bool _#Class#lateGenericField#isSet = false;
@@ -89,7 +89,7 @@
     }
     return let final core::int? #t8 = this.{self::Class::_#Class#lateInstanceField}{core::int?} in #t8{core::int};
   }
-  method initLateGenericField(generic-covariant-impl self::Class::T% value) → self::Class::T% {
+  method initLateGenericField(covariant-by-class self::Class::T% value) → self::Class::T% {
     return this.{self::Class::lateGenericFieldInit} = value;
   }
   get lateGenericField() → self::Class::T% {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.expect
index ef40a1e..0b29db8 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.expect
@@ -13,7 +13,7 @@
   field core::int? lateInstanceFieldInit = null;
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
-  generic-covariant-impl field self::Class::T? lateGenericInstanceFieldInit = null;
+  covariant-by-class field self::Class::T? lateGenericInstanceFieldInit = null;
   final field self::Class::T? field;
   field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
@@ -64,7 +64,7 @@
     }
     return this.{self::Class::_#Class#lateInstanceField}{core::int?};
   }
-  method initLateGenericInstanceField(generic-covariant-impl self::Class::T? value) → self::Class::T? {
+  method initLateGenericInstanceField(covariant-by-class self::Class::T? value) → self::Class::T? {
     return this.{self::Class::lateGenericInstanceFieldInit} = value;
   }
   get lateGenericInstanceField() → self::Class::T? {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.transformed.expect
index ef40a1e..0b29db8 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.strong.transformed.expect
@@ -13,7 +13,7 @@
   field core::int? lateInstanceFieldInit = null;
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
-  generic-covariant-impl field self::Class::T? lateGenericInstanceFieldInit = null;
+  covariant-by-class field self::Class::T? lateGenericInstanceFieldInit = null;
   final field self::Class::T? field;
   field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
@@ -64,7 +64,7 @@
     }
     return this.{self::Class::_#Class#lateInstanceField}{core::int?};
   }
-  method initLateGenericInstanceField(generic-covariant-impl self::Class::T? value) → self::Class::T? {
+  method initLateGenericInstanceField(covariant-by-class self::Class::T? value) → self::Class::T? {
     return this.{self::Class::lateGenericInstanceFieldInit} = value;
   }
   get lateGenericInstanceField() → self::Class::T? {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.expect
index ef40a1e..0b29db8 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.expect
@@ -13,7 +13,7 @@
   field core::int? lateInstanceFieldInit = null;
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
-  generic-covariant-impl field self::Class::T? lateGenericInstanceFieldInit = null;
+  covariant-by-class field self::Class::T? lateGenericInstanceFieldInit = null;
   final field self::Class::T? field;
   field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
@@ -64,7 +64,7 @@
     }
     return this.{self::Class::_#Class#lateInstanceField}{core::int?};
   }
-  method initLateGenericInstanceField(generic-covariant-impl self::Class::T? value) → self::Class::T? {
+  method initLateGenericInstanceField(covariant-by-class self::Class::T? value) → self::Class::T? {
     return this.{self::Class::lateGenericInstanceFieldInit} = value;
   }
   get lateGenericInstanceField() → self::Class::T? {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.outline.expect
index 159d80f..bce12d5 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.outline.expect
@@ -12,7 +12,7 @@
   field core::int? lateInstanceFieldInit;
   field core::int? _#Class#lateInstanceField;
   field core::bool _#Class#lateInstanceField#isSet;
-  generic-covariant-impl field self::Class::T? lateGenericInstanceFieldInit;
+  covariant-by-class field self::Class::T? lateGenericInstanceFieldInit;
   final field self::Class::T? field;
   field self::Class::T? _#Class#lateGenericInstanceField;
   field core::bool _#Class#lateGenericInstanceField#isSet;
@@ -29,7 +29,7 @@
   method initLateInstanceField(core::int value) → core::int?
     ;
   get lateInstanceField() → core::int?;
-  method initLateGenericInstanceField(generic-covariant-impl self::Class::T? value) → self::Class::T?
+  method initLateGenericInstanceField(covariant-by-class self::Class::T? value) → self::Class::T?
     ;
   get lateGenericInstanceField() → self::Class::T?;
   method instanceMethod() → dynamic
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.transformed.expect
index ef40a1e..0b29db8 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_with_initializer.dart.weak.transformed.expect
@@ -13,7 +13,7 @@
   field core::int? lateInstanceFieldInit = null;
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
-  generic-covariant-impl field self::Class::T? lateGenericInstanceFieldInit = null;
+  covariant-by-class field self::Class::T? lateGenericInstanceFieldInit = null;
   final field self::Class::T? field;
   field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
@@ -64,7 +64,7 @@
     }
     return this.{self::Class::_#Class#lateInstanceField}{core::int?};
   }
-  method initLateGenericInstanceField(generic-covariant-impl self::Class::T? value) → self::Class::T? {
+  method initLateGenericInstanceField(covariant-by-class self::Class::T? value) → self::Class::T? {
     return this.{self::Class::lateGenericInstanceFieldInit} = value;
   }
   get lateGenericInstanceField() → self::Class::T? {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.expect
index 5cf1101..ce6ed76 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.expect
@@ -57,7 +57,7 @@
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
     }
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
     self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
     self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.transformed.expect
index 5cf1101..ce6ed76 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.strong.transformed.expect
@@ -57,7 +57,7 @@
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
     }
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
     self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
     self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.expect
index 5cf1101..ce6ed76 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.expect
@@ -57,7 +57,7 @@
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
     }
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
     self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
     self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.outline.expect
index 802698c..86a7e1c 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.outline.expect
@@ -23,7 +23,7 @@
   set lateInstanceField(core::int? #t3) → void;
   get lateGenericInstanceField() → self::Class::T?;
   set lateGenericInstanceField(self::Class::T? #t4) → void;
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic
     ;
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
diff --git a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.transformed.expect
index 5cf1101..ce6ed76 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_nullable_field_without_initializer.dart.weak.transformed.expect
@@ -57,7 +57,7 @@
       this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
       this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
     }
-  method instanceMethod(generic-covariant-impl self::Class::T% value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T% value) → dynamic {
     self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
     self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.expect
index 514f607..c7f8179 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.expect
@@ -10,11 +10,11 @@
   field core::bool _#C#field1#isSet = false;
   field FutureOr<dynamic>? _#C#field2 = null;
   field core::bool _#C#field2#isSet = false;
-  generic-covariant-impl field FutureOr<self::C::T%>? _#C#field3 = null;
+  covariant-by-class field FutureOr<self::C::T%>? _#C#field3 = null;
   field core::bool _#C#field3#isSet = false;
-  generic-covariant-impl field FutureOr<self::C::T?>? _#C#field4 = null;
+  covariant-by-class field FutureOr<self::C::T?>? _#C#field4 = null;
   field core::bool _#C#field4#isSet = false;
-  generic-covariant-impl field FutureOr<self::C::T?>? _#C#field5 = null;
+  covariant-by-class field FutureOr<self::C::T?>? _#C#field5 = null;
   field core::bool _#C#field5#isSet = false;
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
@@ -33,19 +33,19 @@
   }
   get field3() → FutureOr<self::C::T%>
     return this.{self::C::_#C#field3#isSet}{core::bool} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3}{FutureOr<self::C::T%>?} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
-  set field3(generic-covariant-impl FutureOr<self::C::T%>#t4) → void {
+  set field3(covariant-by-class FutureOr<self::C::T%>#t4) → void {
     this.{self::C::_#C#field3#isSet} = true;
     this.{self::C::_#C#field3} = #t4;
   }
   get field4() → FutureOr<self::C::T?>
     return this.{self::C::_#C#field4#isSet}{core::bool} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field4");
-  set field4(generic-covariant-impl FutureOr<self::C::T?>#t5) → void {
+  set field4(covariant-by-class FutureOr<self::C::T?>#t5) → void {
     this.{self::C::_#C#field4#isSet} = true;
     this.{self::C::_#C#field4} = #t5;
   }
   get field5() → FutureOr<self::C::T?>?
     return this.{self::C::_#C#field5#isSet}{core::bool} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field5");
-  set field5(generic-covariant-impl FutureOr<self::C::T?>? #t6) → void {
+  set field5(covariant-by-class FutureOr<self::C::T?>? #t6) → void {
     this.{self::C::_#C#field5#isSet} = true;
     this.{self::C::_#C#field5} = #t6;
   }
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.transformed.expect
index 514f607..c7f8179 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.strong.transformed.expect
@@ -10,11 +10,11 @@
   field core::bool _#C#field1#isSet = false;
   field FutureOr<dynamic>? _#C#field2 = null;
   field core::bool _#C#field2#isSet = false;
-  generic-covariant-impl field FutureOr<self::C::T%>? _#C#field3 = null;
+  covariant-by-class field FutureOr<self::C::T%>? _#C#field3 = null;
   field core::bool _#C#field3#isSet = false;
-  generic-covariant-impl field FutureOr<self::C::T?>? _#C#field4 = null;
+  covariant-by-class field FutureOr<self::C::T?>? _#C#field4 = null;
   field core::bool _#C#field4#isSet = false;
-  generic-covariant-impl field FutureOr<self::C::T?>? _#C#field5 = null;
+  covariant-by-class field FutureOr<self::C::T?>? _#C#field5 = null;
   field core::bool _#C#field5#isSet = false;
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
@@ -33,19 +33,19 @@
   }
   get field3() → FutureOr<self::C::T%>
     return this.{self::C::_#C#field3#isSet}{core::bool} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3}{FutureOr<self::C::T%>?} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
-  set field3(generic-covariant-impl FutureOr<self::C::T%>#t4) → void {
+  set field3(covariant-by-class FutureOr<self::C::T%>#t4) → void {
     this.{self::C::_#C#field3#isSet} = true;
     this.{self::C::_#C#field3} = #t4;
   }
   get field4() → FutureOr<self::C::T?>
     return this.{self::C::_#C#field4#isSet}{core::bool} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field4");
-  set field4(generic-covariant-impl FutureOr<self::C::T?>#t5) → void {
+  set field4(covariant-by-class FutureOr<self::C::T?>#t5) → void {
     this.{self::C::_#C#field4#isSet} = true;
     this.{self::C::_#C#field4} = #t5;
   }
   get field5() → FutureOr<self::C::T?>?
     return this.{self::C::_#C#field5#isSet}{core::bool} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field5");
-  set field5(generic-covariant-impl FutureOr<self::C::T?>? #t6) → void {
+  set field5(covariant-by-class FutureOr<self::C::T?>? #t6) → void {
     this.{self::C::_#C#field5#isSet} = true;
     this.{self::C::_#C#field5} = #t6;
   }
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.expect
index 6e2e07e..b358ead 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.expect
@@ -10,11 +10,11 @@
   field core::bool _#C#field1#isSet = false;
   field FutureOr<dynamic>? _#C#field2 = null;
   field core::bool _#C#field2#isSet = false;
-  generic-covariant-impl field FutureOr<self::C::T%>? _#C#field3 = null;
+  covariant-by-class field FutureOr<self::C::T%>? _#C#field3 = null;
   field core::bool _#C#field3#isSet = false;
-  generic-covariant-impl field FutureOr<self::C::T?>? _#C#field4 = null;
+  covariant-by-class field FutureOr<self::C::T?>? _#C#field4 = null;
   field core::bool _#C#field4#isSet = false;
-  generic-covariant-impl field FutureOr<self::C::T?>? _#C#field5 = null;
+  covariant-by-class field FutureOr<self::C::T?>? _#C#field5 = null;
   field core::bool _#C#field5#isSet = false;
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
@@ -33,19 +33,19 @@
   }
   get field3() → FutureOr<self::C::T%>
     return this.{self::C::_#C#field3#isSet}{core::bool} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3}{FutureOr<self::C::T%>?} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
-  set field3(generic-covariant-impl FutureOr<self::C::T%>#t4) → void {
+  set field3(covariant-by-class FutureOr<self::C::T%>#t4) → void {
     this.{self::C::_#C#field3#isSet} = true;
     this.{self::C::_#C#field3} = #t4;
   }
   get field4() → FutureOr<self::C::T?>
     return this.{self::C::_#C#field4#isSet}{core::bool} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field4");
-  set field4(generic-covariant-impl FutureOr<self::C::T?>#t5) → void {
+  set field4(covariant-by-class FutureOr<self::C::T?>#t5) → void {
     this.{self::C::_#C#field4#isSet} = true;
     this.{self::C::_#C#field4} = #t5;
   }
   get field5() → FutureOr<self::C::T?>?
     return this.{self::C::_#C#field5#isSet}{core::bool} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field5");
-  set field5(generic-covariant-impl FutureOr<self::C::T?>? #t6) → void {
+  set field5(covariant-by-class FutureOr<self::C::T?>? #t6) → void {
     this.{self::C::_#C#field5#isSet} = true;
     this.{self::C::_#C#field5} = #t6;
   }
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.outline.expect
index 14dcaea..6c197d9 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.outline.expect
@@ -9,11 +9,11 @@
   field core::bool _#C#field1#isSet;
   field FutureOr<dynamic>? _#C#field2;
   field core::bool _#C#field2#isSet;
-  generic-covariant-impl field FutureOr<self::C::T%>? _#C#field3;
+  covariant-by-class field FutureOr<self::C::T%>? _#C#field3;
   field core::bool _#C#field3#isSet;
-  generic-covariant-impl field FutureOr<self::C::T?>? _#C#field4;
+  covariant-by-class field FutureOr<self::C::T?>? _#C#field4;
   field core::bool _#C#field4#isSet;
-  generic-covariant-impl field FutureOr<self::C::T?>? _#C#field5;
+  covariant-by-class field FutureOr<self::C::T?>? _#C#field5;
   field core::bool _#C#field5#isSet;
   synthetic constructor •() → self::C<self::C::T%>
     ;
@@ -22,11 +22,11 @@
   get field2() → FutureOr<dynamic>?;
   set field2(FutureOr<dynamic>? #t2) → void;
   get field3() → FutureOr<self::C::T%>;
-  set field3(generic-covariant-impl FutureOr<self::C::T%>#t3) → void;
+  set field3(covariant-by-class FutureOr<self::C::T%>#t3) → void;
   get field4() → FutureOr<self::C::T?>;
-  set field4(generic-covariant-impl FutureOr<self::C::T?>#t4) → void;
+  set field4(covariant-by-class FutureOr<self::C::T?>#t4) → void;
   get field5() → FutureOr<self::C::T?>?;
-  set field5(generic-covariant-impl FutureOr<self::C::T?>? #t5) → void;
+  set field5(covariant-by-class FutureOr<self::C::T?>? #t5) → void;
   method method() → dynamic
     ;
 }
diff --git a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.transformed.expect
index 6e2e07e..b358ead 100644
--- a/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_future_or.dart.weak.transformed.expect
@@ -10,11 +10,11 @@
   field core::bool _#C#field1#isSet = false;
   field FutureOr<dynamic>? _#C#field2 = null;
   field core::bool _#C#field2#isSet = false;
-  generic-covariant-impl field FutureOr<self::C::T%>? _#C#field3 = null;
+  covariant-by-class field FutureOr<self::C::T%>? _#C#field3 = null;
   field core::bool _#C#field3#isSet = false;
-  generic-covariant-impl field FutureOr<self::C::T?>? _#C#field4 = null;
+  covariant-by-class field FutureOr<self::C::T?>? _#C#field4 = null;
   field core::bool _#C#field4#isSet = false;
-  generic-covariant-impl field FutureOr<self::C::T?>? _#C#field5 = null;
+  covariant-by-class field FutureOr<self::C::T?>? _#C#field5 = null;
   field core::bool _#C#field5#isSet = false;
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
@@ -33,19 +33,19 @@
   }
   get field3() → FutureOr<self::C::T%>
     return this.{self::C::_#C#field3#isSet}{core::bool} ?{FutureOr<self::C::T%>} let final FutureOr<self::C::T%>? #t3 = this.{self::C::_#C#field3}{FutureOr<self::C::T%>?} in #t3{FutureOr<self::C::T%>} : throw new _in::LateError::fieldNI("field3");
-  set field3(generic-covariant-impl FutureOr<self::C::T%>#t4) → void {
+  set field3(covariant-by-class FutureOr<self::C::T%>#t4) → void {
     this.{self::C::_#C#field3#isSet} = true;
     this.{self::C::_#C#field3} = #t4;
   }
   get field4() → FutureOr<self::C::T?>
     return this.{self::C::_#C#field4#isSet}{core::bool} ?{FutureOr<self::C::T?>} this.{self::C::_#C#field4}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field4");
-  set field4(generic-covariant-impl FutureOr<self::C::T?>#t5) → void {
+  set field4(covariant-by-class FutureOr<self::C::T?>#t5) → void {
     this.{self::C::_#C#field4#isSet} = true;
     this.{self::C::_#C#field4} = #t5;
   }
   get field5() → FutureOr<self::C::T?>?
     return this.{self::C::_#C#field5#isSet}{core::bool} ?{FutureOr<self::C::T?>?} this.{self::C::_#C#field5}{FutureOr<self::C::T?>?} : throw new _in::LateError::fieldNI("field5");
-  set field5(generic-covariant-impl FutureOr<self::C::T?>? #t6) → void {
+  set field5(covariant-by-class FutureOr<self::C::T?>? #t6) → void {
     this.{self::C::_#C#field5#isSet} = true;
     this.{self::C::_#C#field5} = #t6;
   }
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.expect
index 09301ad..a743497 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.expect
@@ -10,7 +10,7 @@
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
   final field self::Class::T? field;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
   constructor •(self::Class::T? field) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
@@ -68,11 +68,11 @@
     }
     return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
   }
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
+  set lateGenericInstanceField(covariant-by-class self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T? value) → dynamic {
     self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
     this.{self::Class::lateInstanceField} = 17;
     self::expect(17, this.{self::Class::lateInstanceField}{core::int?});
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.transformed.expect
index 09301ad..a743497 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
   final field self::Class::T? field;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
   constructor •(self::Class::T? field) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
@@ -68,11 +68,11 @@
     }
     return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
   }
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
+  set lateGenericInstanceField(covariant-by-class self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T? value) → dynamic {
     self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
     this.{self::Class::lateInstanceField} = 17;
     self::expect(17, this.{self::Class::lateInstanceField}{core::int?});
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.expect
index 09301ad..a743497 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.expect
@@ -10,7 +10,7 @@
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
   final field self::Class::T? field;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
   constructor •(self::Class::T? field) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
@@ -68,11 +68,11 @@
     }
     return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
   }
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
+  set lateGenericInstanceField(covariant-by-class self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T? value) → dynamic {
     self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
     this.{self::Class::lateInstanceField} = 17;
     self::expect(17, this.{self::Class::lateInstanceField}{core::int?});
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.outline.expect
index 995658d..bf54c39 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.outline.expect
@@ -10,7 +10,7 @@
   field core::int? _#Class#lateInstanceField;
   field core::bool _#Class#lateInstanceField#isSet;
   final field self::Class::T? field;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField;
   field core::bool _#Class#lateGenericInstanceField#isSet;
   constructor •(self::Class::T? field) → self::Class<self::Class::T%>
     ;
@@ -31,8 +31,8 @@
   method lateGenericInstanceFieldInit() → self::Class::T?
     ;
   get lateGenericInstanceField() → self::Class::T?;
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void;
-  method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic
+  set lateGenericInstanceField(covariant-by-class self::Class::T? #t4) → void;
+  method instanceMethod(covariant-by-class self::Class::T? value) → dynamic
     ;
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.transformed.expect
index 09301ad..a743497 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_with_initializer.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
   final field self::Class::T? field;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
   constructor •(self::Class::T? field) → self::Class<self::Class::T%>
     : self::Class::field = field, super core::Object::•()
@@ -68,11 +68,11 @@
     }
     return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
   }
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
+  set lateGenericInstanceField(covariant-by-class self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T? value) → dynamic {
     self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
     this.{self::Class::lateInstanceField} = 17;
     self::expect(17, this.{self::Class::lateInstanceField}{core::int?});
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.expect
index b129514..91ed9ea 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.expect
@@ -10,7 +10,7 @@
   static field core::bool _#lateStaticField2#isSet = false;
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
@@ -40,11 +40,11 @@
   }
   get lateGenericInstanceField() → self::Class::T?
     return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
+  set lateGenericInstanceField(covariant-by-class self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T? value) → dynamic {
     self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
     self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.transformed.expect
index b129514..91ed9ea 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
   static field core::bool _#lateStaticField2#isSet = false;
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
@@ -40,11 +40,11 @@
   }
   get lateGenericInstanceField() → self::Class::T?
     return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
+  set lateGenericInstanceField(covariant-by-class self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T? value) → dynamic {
     self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
     self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.expect
index b129514..91ed9ea 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.expect
@@ -10,7 +10,7 @@
   static field core::bool _#lateStaticField2#isSet = false;
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
@@ -40,11 +40,11 @@
   }
   get lateGenericInstanceField() → self::Class::T?
     return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
+  set lateGenericInstanceField(covariant-by-class self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T? value) → dynamic {
     self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
     self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.outline.expect
index b36f1a2..f234077 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.outline.expect
@@ -9,7 +9,7 @@
   static field core::bool _#lateStaticField2#isSet;
   field core::int? _#Class#lateInstanceField;
   field core::bool _#Class#lateInstanceField#isSet;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField;
   field core::bool _#Class#lateGenericInstanceField#isSet;
   synthetic constructor •() → self::Class<self::Class::T%>
     ;
@@ -22,8 +22,8 @@
   get lateInstanceField() → core::int?;
   set lateInstanceField(core::int? #t3) → void;
   get lateGenericInstanceField() → self::Class::T?;
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void;
-  method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic
+  set lateGenericInstanceField(covariant-by-class self::Class::T? #t4) → void;
+  method instanceMethod(covariant-by-class self::Class::T? value) → dynamic
     ;
 }
 extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
diff --git a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.transformed.expect
index b129514..91ed9ea 100644
--- a/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_nullable_field_without_initializer.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
   static field core::bool _#lateStaticField2#isSet = false;
   field core::int? _#Class#lateInstanceField = null;
   field core::bool _#Class#lateInstanceField#isSet = false;
-  generic-covariant-impl field self::Class::T? _#Class#lateGenericInstanceField = null;
+  covariant-by-class field self::Class::T? _#Class#lateGenericInstanceField = null;
   field core::bool _#Class#lateGenericInstanceField#isSet = false;
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
@@ -40,11 +40,11 @@
   }
   get lateGenericInstanceField() → self::Class::T?
     return this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool} ?{self::Class::T?} this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?} : throw new _in::LateError::fieldNI("lateGenericInstanceField");
-  set lateGenericInstanceField(generic-covariant-impl self::Class::T? #t4) → void {
+  set lateGenericInstanceField(covariant-by-class self::Class::T? #t4) → void {
     this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
     this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
   }
-  method instanceMethod(generic-covariant-impl self::Class::T? value) → dynamic {
+  method instanceMethod(covariant-by-class self::Class::T? value) → dynamic {
     self::throws(() → core::int? => this.{self::Class::lateInstanceField}{core::int?}, "Read value from uninitialized Class.lateInstanceField");
     this.{self::Class::lateInstanceField} = 16;
     self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.expect
index 83082ba..3df87d0 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.expect
@@ -46,7 +46,7 @@
   field core::int? _#Class#instanceField = null;
   field dynamic _#Class#finalInstanceField = null;
   field core::bool _#Class#finalInstanceField#isSet = false;
-  generic-covariant-impl field non::Class::T? _#Class#instanceTypeVariable = null;
+  covariant-by-class field non::Class::T? _#Class#instanceTypeVariable = null;
   field non::Class::T? _#Class#finalInstanceTypeVariable = null;
   static field core::int? _#staticField = null;
   static field dynamic _#staticFinalField = null;
@@ -69,7 +69,7 @@
     }
   get instanceTypeVariable() → non::Class::T
     return let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable}{non::Class::T?} in #t4 == null ?{non::Class::T} throw new _in::LateError::fieldNI("instanceTypeVariable") : #t4{non::Class::T};
-  set instanceTypeVariable(generic-covariant-impl non::Class::T #t5) → void
+  set instanceTypeVariable(covariant-by-class non::Class::T #t5) → void
     this.{non::Class::_#Class#instanceTypeVariable} = #t5;
   get finalInstanceTypeVariable() → non::Class::T
     return let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable}{non::Class::T?} in #t6 == null ?{non::Class::T} throw new _in::LateError::fieldNI("finalInstanceTypeVariable") : #t6{non::Class::T};
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.transformed.expect
index 83082ba..3df87d0 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.strong.transformed.expect
@@ -46,7 +46,7 @@
   field core::int? _#Class#instanceField = null;
   field dynamic _#Class#finalInstanceField = null;
   field core::bool _#Class#finalInstanceField#isSet = false;
-  generic-covariant-impl field non::Class::T? _#Class#instanceTypeVariable = null;
+  covariant-by-class field non::Class::T? _#Class#instanceTypeVariable = null;
   field non::Class::T? _#Class#finalInstanceTypeVariable = null;
   static field core::int? _#staticField = null;
   static field dynamic _#staticFinalField = null;
@@ -69,7 +69,7 @@
     }
   get instanceTypeVariable() → non::Class::T
     return let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable}{non::Class::T?} in #t4 == null ?{non::Class::T} throw new _in::LateError::fieldNI("instanceTypeVariable") : #t4{non::Class::T};
-  set instanceTypeVariable(generic-covariant-impl non::Class::T #t5) → void
+  set instanceTypeVariable(covariant-by-class non::Class::T #t5) → void
     this.{non::Class::_#Class#instanceTypeVariable} = #t5;
   get finalInstanceTypeVariable() → non::Class::T
     return let final non::Class::T? #t6 = this.{non::Class::_#Class#finalInstanceTypeVariable}{non::Class::T?} in #t6 == null ?{non::Class::T} throw new _in::LateError::fieldNI("finalInstanceTypeVariable") : #t6{non::Class::T};
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.expect
index 18d4aaa..86913df 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.expect
@@ -40,7 +40,7 @@
   field core::bool _#Class#instanceField#isSet = false;
   field dynamic _#Class#finalInstanceField = null;
   field core::bool _#Class#finalInstanceField#isSet = false;
-  generic-covariant-impl field non::Class::T? _#Class#instanceTypeVariable = null;
+  covariant-by-class field non::Class::T? _#Class#instanceTypeVariable = null;
   field core::bool _#Class#instanceTypeVariable#isSet = false;
   field non::Class::T? _#Class#finalInstanceTypeVariable = null;
   field core::bool _#Class#finalInstanceTypeVariable#isSet = false;
@@ -68,7 +68,7 @@
     }
   get instanceTypeVariable() → non::Class::T
     return this.{non::Class::_#Class#instanceTypeVariable#isSet}{core::bool} ?{non::Class::T} let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable}{non::Class::T?} in #t4{non::Class::T} : throw new _in::LateError::fieldNI("instanceTypeVariable");
-  set instanceTypeVariable(generic-covariant-impl non::Class::T #t5) → void {
+  set instanceTypeVariable(covariant-by-class non::Class::T #t5) → void {
     this.{non::Class::_#Class#instanceTypeVariable#isSet} = true;
     this.{non::Class::_#Class#instanceTypeVariable} = #t5;
   }
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.outline.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.outline.expect
index 1c5d975..22fc18d 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.outline.expect
@@ -15,7 +15,7 @@
   field core::bool _#Class#instanceField#isSet;
   field dynamic _#Class#finalInstanceField;
   field core::bool _#Class#finalInstanceField#isSet;
-  generic-covariant-impl field self2::Class::T? _#Class#instanceTypeVariable;
+  covariant-by-class field self2::Class::T? _#Class#instanceTypeVariable;
   field core::bool _#Class#instanceTypeVariable#isSet;
   field self2::Class::T? _#Class#finalInstanceTypeVariable;
   field core::bool _#Class#finalInstanceTypeVariable#isSet;
@@ -30,7 +30,7 @@
   get finalInstanceField() → dynamic;
   set finalInstanceField(dynamic #t2) → void;
   get instanceTypeVariable() → self2::Class::T;
-  set instanceTypeVariable(generic-covariant-impl self2::Class::T #t3) → void;
+  set instanceTypeVariable(covariant-by-class self2::Class::T #t3) → void;
   get finalInstanceTypeVariable() → self2::Class::T;
   set finalInstanceTypeVariable(self2::Class::T #t4) → void;
   static get staticField() → core::int;
diff --git a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.transformed.expect
index 18d4aaa..86913df 100644
--- a/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/non_nullable_from_opt_out.dart.weak.transformed.expect
@@ -40,7 +40,7 @@
   field core::bool _#Class#instanceField#isSet = false;
   field dynamic _#Class#finalInstanceField = null;
   field core::bool _#Class#finalInstanceField#isSet = false;
-  generic-covariant-impl field non::Class::T? _#Class#instanceTypeVariable = null;
+  covariant-by-class field non::Class::T? _#Class#instanceTypeVariable = null;
   field core::bool _#Class#instanceTypeVariable#isSet = false;
   field non::Class::T? _#Class#finalInstanceTypeVariable = null;
   field core::bool _#Class#finalInstanceTypeVariable#isSet = false;
@@ -68,7 +68,7 @@
     }
   get instanceTypeVariable() → non::Class::T
     return this.{non::Class::_#Class#instanceTypeVariable#isSet}{core::bool} ?{non::Class::T} let final non::Class::T? #t4 = this.{non::Class::_#Class#instanceTypeVariable}{non::Class::T?} in #t4{non::Class::T} : throw new _in::LateError::fieldNI("instanceTypeVariable");
-  set instanceTypeVariable(generic-covariant-impl non::Class::T #t5) → void {
+  set instanceTypeVariable(covariant-by-class non::Class::T #t5) → void {
     this.{non::Class::_#Class#instanceTypeVariable#isSet} = true;
     this.{non::Class::_#Class#instanceTypeVariable} = #t5;
   }
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.expect
index a4118b8..ce1c9c6 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.expect
@@ -208,12 +208,12 @@
   external set externalInstanceField1(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField1() → core::int;
   external get externalCovariantInstanceField1() → core::num;
-  external set externalCovariantInstanceField1(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField1(covariant-by-declaration core::num #externalFieldValue) → void;
   external get externalInstanceField2() → core::int;
   external set externalInstanceField2(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField2() → core::int;
   external get externalCovariantInstanceField2() → core::num;
-  external set externalCovariantInstanceField2(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField2(covariant-by-declaration core::num #externalFieldValue) → void;
   external get externalLateInstanceField() → core::int;
   external set externalLateInstanceField(core::int #externalFieldValue) → void;
 }
@@ -224,7 +224,7 @@
   external set externalInstanceField(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField() → core::int;
   external get externalCovariantInstanceField() → core::num;
-  external set externalCovariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 extension Extension on self::A {
   get extensionInstanceField = get self::Extension|extensionInstanceField;
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.transformed.expect
index a4118b8..ce1c9c6 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.transformed.expect
@@ -208,12 +208,12 @@
   external set externalInstanceField1(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField1() → core::int;
   external get externalCovariantInstanceField1() → core::num;
-  external set externalCovariantInstanceField1(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField1(covariant-by-declaration core::num #externalFieldValue) → void;
   external get externalInstanceField2() → core::int;
   external set externalInstanceField2(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField2() → core::int;
   external get externalCovariantInstanceField2() → core::num;
-  external set externalCovariantInstanceField2(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField2(covariant-by-declaration core::num #externalFieldValue) → void;
   external get externalLateInstanceField() → core::int;
   external set externalLateInstanceField(core::int #externalFieldValue) → void;
 }
@@ -224,7 +224,7 @@
   external set externalInstanceField(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField() → core::int;
   external get externalCovariantInstanceField() → core::num;
-  external set externalCovariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 extension Extension on self::A {
   get extensionInstanceField = get self::Extension|extensionInstanceField;
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.expect
index a4118b8..ce1c9c6 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.expect
@@ -208,12 +208,12 @@
   external set externalInstanceField1(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField1() → core::int;
   external get externalCovariantInstanceField1() → core::num;
-  external set externalCovariantInstanceField1(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField1(covariant-by-declaration core::num #externalFieldValue) → void;
   external get externalInstanceField2() → core::int;
   external set externalInstanceField2(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField2() → core::int;
   external get externalCovariantInstanceField2() → core::num;
-  external set externalCovariantInstanceField2(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField2(covariant-by-declaration core::num #externalFieldValue) → void;
   external get externalLateInstanceField() → core::int;
   external set externalLateInstanceField(core::int #externalFieldValue) → void;
 }
@@ -224,7 +224,7 @@
   external set externalInstanceField(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField() → core::int;
   external get externalCovariantInstanceField() → core::num;
-  external set externalCovariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 extension Extension on self::A {
   get extensionInstanceField = get self::Extension|extensionInstanceField;
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.outline.expect
index 799f3a0..04ad619 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.outline.expect
@@ -176,12 +176,12 @@
   external set externalInstanceField1(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField1() → core::int;
   external get externalCovariantInstanceField1() → core::num;
-  external set externalCovariantInstanceField1(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField1(covariant-by-declaration core::num #externalFieldValue) → void;
   external get externalInstanceField2() → core::int;
   external set externalInstanceField2(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField2() → core::int;
   external get externalCovariantInstanceField2() → core::num;
-  external set externalCovariantInstanceField2(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField2(covariant-by-declaration core::num #externalFieldValue) → void;
   external get externalLateInstanceField() → core::int;
   external set externalLateInstanceField(core::int #externalFieldValue) → void;
 }
@@ -192,7 +192,7 @@
   external set externalInstanceField(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField() → core::int;
   external get externalCovariantInstanceField() → core::num;
-  external set externalCovariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 extension Extension on self::A {
   get extensionInstanceField = get self::Extension|extensionInstanceField;
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.transformed.expect
index a4118b8..ce1c9c6 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.weak.transformed.expect
@@ -208,12 +208,12 @@
   external set externalInstanceField1(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField1() → core::int;
   external get externalCovariantInstanceField1() → core::num;
-  external set externalCovariantInstanceField1(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField1(covariant-by-declaration core::num #externalFieldValue) → void;
   external get externalInstanceField2() → core::int;
   external set externalInstanceField2(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField2() → core::int;
   external get externalCovariantInstanceField2() → core::num;
-  external set externalCovariantInstanceField2(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField2(covariant-by-declaration core::num #externalFieldValue) → void;
   external get externalLateInstanceField() → core::int;
   external set externalLateInstanceField(core::int #externalFieldValue) → void;
 }
@@ -224,7 +224,7 @@
   external set externalInstanceField(core::int #externalFieldValue) → void;
   external get externalFinalInstanceField() → core::int;
   external get externalCovariantInstanceField() → core::num;
-  external set externalCovariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set externalCovariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 extension Extension on self::A {
   get extensionInstanceField = get self::Extension|extensionInstanceField;
diff --git a/pkg/front_end/testcases/nnbd/abstract_fields.dart.strong.expect b/pkg/front_end/testcases/nnbd/abstract_fields.dart.strong.expect
index 3e5529f..f9cfd21 100644
--- a/pkg/front_end/testcases/nnbd/abstract_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_fields.dart.strong.expect
@@ -10,13 +10,13 @@
   abstract set instanceField(core::int #externalFieldValue) → void;
   abstract get finalInstanceField() → core::int;
   abstract get covariantInstanceField() → core::num;
-  abstract set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  abstract set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 abstract class B extends core::Object /*isMixinDeclaration*/  {
   abstract get instanceField() → core::int;
   abstract set instanceField(core::int #externalFieldValue) → void;
   abstract get finalInstanceField() → core::int;
   abstract get covariantInstanceField() → core::num;
-  abstract set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  abstract set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/abstract_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/abstract_fields.dart.strong.transformed.expect
index 3e5529f..f9cfd21 100644
--- a/pkg/front_end/testcases/nnbd/abstract_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_fields.dart.strong.transformed.expect
@@ -10,13 +10,13 @@
   abstract set instanceField(core::int #externalFieldValue) → void;
   abstract get finalInstanceField() → core::int;
   abstract get covariantInstanceField() → core::num;
-  abstract set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  abstract set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 abstract class B extends core::Object /*isMixinDeclaration*/  {
   abstract get instanceField() → core::int;
   abstract set instanceField(core::int #externalFieldValue) → void;
   abstract get finalInstanceField() → core::int;
   abstract get covariantInstanceField() → core::num;
-  abstract set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  abstract set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.expect b/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.expect
index 3e5529f..f9cfd21 100644
--- a/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.expect
@@ -10,13 +10,13 @@
   abstract set instanceField(core::int #externalFieldValue) → void;
   abstract get finalInstanceField() → core::int;
   abstract get covariantInstanceField() → core::num;
-  abstract set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  abstract set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 abstract class B extends core::Object /*isMixinDeclaration*/  {
   abstract get instanceField() → core::int;
   abstract set instanceField(core::int #externalFieldValue) → void;
   abstract get finalInstanceField() → core::int;
   abstract get covariantInstanceField() → core::num;
-  abstract set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  abstract set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.outline.expect
index ff6c1e2..9184b1b 100644
--- a/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.outline.expect
@@ -9,14 +9,14 @@
   abstract set instanceField(core::int #externalFieldValue) → void;
   abstract get finalInstanceField() → core::int;
   abstract get covariantInstanceField() → core::num;
-  abstract set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  abstract set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 abstract class B extends core::Object /*isMixinDeclaration*/  {
   abstract get instanceField() → core::int;
   abstract set instanceField(core::int #externalFieldValue) → void;
   abstract get finalInstanceField() → core::int;
   abstract get covariantInstanceField() → core::num;
-  abstract set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  abstract set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.transformed.expect
index 3e5529f..f9cfd21 100644
--- a/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_fields.dart.weak.transformed.expect
@@ -10,13 +10,13 @@
   abstract set instanceField(core::int #externalFieldValue) → void;
   abstract get finalInstanceField() → core::int;
   abstract get covariantInstanceField() → core::num;
-  abstract set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  abstract set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 abstract class B extends core::Object /*isMixinDeclaration*/  {
   abstract get instanceField() → core::int;
   abstract set instanceField(core::int #externalFieldValue) → void;
   abstract get finalInstanceField() → core::int;
   abstract get covariantInstanceField() → core::num;
-  abstract set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  abstract set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.strong.expect b/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.strong.expect
index c91e11c..efa8606 100644
--- a/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.strong.expect
@@ -15,8 +15,8 @@
   abstract get fi() → core::int;
   abstract get fx() → dynamic;
   abstract get cn() → core::num;
-  abstract set cn(covariant core::num #externalFieldValue) → void;
+  abstract set cn(covariant-by-declaration core::num #externalFieldValue) → void;
   abstract get cx() → dynamic;
-  abstract set cx(covariant dynamic #externalFieldValue) → void;
+  abstract set cx(covariant-by-declaration dynamic #externalFieldValue) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.strong.transformed.expect
index c91e11c..efa8606 100644
--- a/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.strong.transformed.expect
@@ -15,8 +15,8 @@
   abstract get fi() → core::int;
   abstract get fx() → dynamic;
   abstract get cn() → core::num;
-  abstract set cn(covariant core::num #externalFieldValue) → void;
+  abstract set cn(covariant-by-declaration core::num #externalFieldValue) → void;
   abstract get cx() → dynamic;
-  abstract set cx(covariant dynamic #externalFieldValue) → void;
+  abstract set cx(covariant-by-declaration dynamic #externalFieldValue) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.expect b/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.expect
index c91e11c..efa8606 100644
--- a/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.expect
@@ -15,8 +15,8 @@
   abstract get fi() → core::int;
   abstract get fx() → dynamic;
   abstract get cn() → core::num;
-  abstract set cn(covariant core::num #externalFieldValue) → void;
+  abstract set cn(covariant-by-declaration core::num #externalFieldValue) → void;
   abstract get cx() → dynamic;
-  abstract set cx(covariant dynamic #externalFieldValue) → void;
+  abstract set cx(covariant-by-declaration dynamic #externalFieldValue) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.outline.expect
index 21e1617..7126528 100644
--- a/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.outline.expect
@@ -14,9 +14,9 @@
   abstract get fi() → core::int;
   abstract get fx() → dynamic;
   abstract get cn() → core::num;
-  abstract set cn(covariant core::num #externalFieldValue) → void;
+  abstract set cn(covariant-by-declaration core::num #externalFieldValue) → void;
   abstract get cx() → dynamic;
-  abstract set cx(covariant dynamic #externalFieldValue) → void;
+  abstract set cx(covariant-by-declaration dynamic #externalFieldValue) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.transformed.expect
index c91e11c..efa8606 100644
--- a/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_fields_spec.dart.weak.transformed.expect
@@ -15,8 +15,8 @@
   abstract get fi() → core::int;
   abstract get fx() → dynamic;
   abstract get cn() → core::num;
-  abstract set cn(covariant core::num #externalFieldValue) → void;
+  abstract set cn(covariant-by-declaration core::num #externalFieldValue) → void;
   abstract get cx() → dynamic;
-  abstract set cx(covariant dynamic #externalFieldValue) → void;
+  abstract set cx(covariant-by-declaration dynamic #externalFieldValue) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.expect
index f8a2ab8..e981e5c 100644
--- a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Class<self::Class::E%>
     : super core::Object::•()
     ;
-  method method(generic-covariant-impl self::Class::E% e) → void {
+  method method(covariant-by-class self::Class::E% e) → void {
     e = self::id<self::Class::E%>(e);
     e = self::id<self::Class::E%>(e);
     if(!(e == null)) {
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.transformed.expect
index f8a2ab8..e981e5c 100644
--- a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Class<self::Class::E%>
     : super core::Object::•()
     ;
-  method method(generic-covariant-impl self::Class::E% e) → void {
+  method method(covariant-by-class self::Class::E% e) → void {
     e = self::id<self::Class::E%>(e);
     e = self::id<self::Class::E%>(e);
     if(!(e == null)) {
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.expect
index f8a2ab8..e981e5c 100644
--- a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Class<self::Class::E%>
     : super core::Object::•()
     ;
-  method method(generic-covariant-impl self::Class::E% e) → void {
+  method method(covariant-by-class self::Class::E% e) → void {
     e = self::id<self::Class::E%>(e);
     e = self::id<self::Class::E%>(e);
     if(!(e == null)) {
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.outline.expect
index 2602561..e77d2e9 100644
--- a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class Class<E extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::Class<self::Class::E%>
     ;
-  method method(generic-covariant-impl self::Class::E% e) → void
+  method method(covariant-by-class self::Class::E% e) → void
     ;
 }
 static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
diff --git a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.transformed.expect
index f8a2ab8..e981e5c 100644
--- a/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assign_type_variable.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Class<self::Class::E%>
     : super core::Object::•()
     ;
-  method method(generic-covariant-impl self::Class::E% e) → void {
+  method method(covariant-by-class self::Class::E% e) → void {
     e = self::id<self::Class::E%>(e);
     e = self::id<self::Class::E%>(e);
     if(!(e == null)) {
diff --git a/pkg/front_end/testcases/nnbd/combined_required.dart.strong.expect b/pkg/front_end/testcases/nnbd/combined_required.dart.strong.expect
index 34958ef..4e4e563 100644
--- a/pkg/front_end/testcases/nnbd/combined_required.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/combined_required.dart.strong.expect
@@ -13,24 +13,24 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method method1({required covariant core::int a = #C1}) → void {}
-  method method2({covariant core::int? a = #C1, required core::int b = #C1}) → void {}
+  method method1({required covariant-by-declaration core::int a = #C1}) → void {}
+  method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void {}
 }
 class C extends self::A implements self::B {
   synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  forwarding-stub method method1({required covariant core::int a = #C1}) → void
+  forwarding-stub method method1({required covariant-by-declaration core::int a = #C1}) → void
     return super.{self::A::method1}(a: a);
-  forwarding-stub method method2({covariant core::int? a = #C1, required core::int b = #C1}) → void
+  forwarding-stub method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void
     return super.{self::A::method2}(a: a, b: b);
 }
 class D extends self::C {
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method method1({required covariant core::int a = #C1}) → void {}
-  method method2({covariant core::int? a = #C1, required core::int b = #C1}) → void {}
+  method method1({required covariant-by-declaration core::int a = #C1}) → void {}
+  method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/combined_required.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/combined_required.dart.strong.transformed.expect
index 34958ef..4e4e563 100644
--- a/pkg/front_end/testcases/nnbd/combined_required.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/combined_required.dart.strong.transformed.expect
@@ -13,24 +13,24 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method method1({required covariant core::int a = #C1}) → void {}
-  method method2({covariant core::int? a = #C1, required core::int b = #C1}) → void {}
+  method method1({required covariant-by-declaration core::int a = #C1}) → void {}
+  method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void {}
 }
 class C extends self::A implements self::B {
   synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  forwarding-stub method method1({required covariant core::int a = #C1}) → void
+  forwarding-stub method method1({required covariant-by-declaration core::int a = #C1}) → void
     return super.{self::A::method1}(a: a);
-  forwarding-stub method method2({covariant core::int? a = #C1, required core::int b = #C1}) → void
+  forwarding-stub method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void
     return super.{self::A::method2}(a: a, b: b);
 }
 class D extends self::C {
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method method1({required covariant core::int a = #C1}) → void {}
-  method method2({covariant core::int? a = #C1, required core::int b = #C1}) → void {}
+  method method1({required covariant-by-declaration core::int a = #C1}) → void {}
+  method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/combined_required.dart.weak.expect b/pkg/front_end/testcases/nnbd/combined_required.dart.weak.expect
index 34958ef..4e4e563 100644
--- a/pkg/front_end/testcases/nnbd/combined_required.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/combined_required.dart.weak.expect
@@ -13,24 +13,24 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method method1({required covariant core::int a = #C1}) → void {}
-  method method2({covariant core::int? a = #C1, required core::int b = #C1}) → void {}
+  method method1({required covariant-by-declaration core::int a = #C1}) → void {}
+  method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void {}
 }
 class C extends self::A implements self::B {
   synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  forwarding-stub method method1({required covariant core::int a = #C1}) → void
+  forwarding-stub method method1({required covariant-by-declaration core::int a = #C1}) → void
     return super.{self::A::method1}(a: a);
-  forwarding-stub method method2({covariant core::int? a = #C1, required core::int b = #C1}) → void
+  forwarding-stub method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void
     return super.{self::A::method2}(a: a, b: b);
 }
 class D extends self::C {
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method method1({required covariant core::int a = #C1}) → void {}
-  method method2({covariant core::int? a = #C1, required core::int b = #C1}) → void {}
+  method method1({required covariant-by-declaration core::int a = #C1}) → void {}
+  method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/combined_required.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/combined_required.dart.weak.outline.expect
index f39bdf2..1b3a496 100644
--- a/pkg/front_end/testcases/nnbd/combined_required.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/combined_required.dart.weak.outline.expect
@@ -13,25 +13,25 @@
 class B extends core::Object {
   synthetic constructor •() → self::B
     ;
-  method method1({required covariant core::int a}) → void
+  method method1({required covariant-by-declaration core::int a}) → void
     ;
-  method method2({covariant core::int? a, required core::int b}) → void
+  method method2({covariant-by-declaration core::int? a, required core::int b}) → void
     ;
 }
 class C extends self::A implements self::B {
   synthetic constructor •() → self::C
     ;
-  forwarding-stub method method1({required covariant core::int a}) → void
+  forwarding-stub method method1({required covariant-by-declaration core::int a}) → void
     return super.{self::A::method1}(a: a);
-  forwarding-stub method method2({covariant core::int? a, required core::int b}) → void
+  forwarding-stub method method2({covariant-by-declaration core::int? a, required core::int b}) → void
     return super.{self::A::method2}(a: a, b: b);
 }
 class D extends self::C {
   synthetic constructor •() → self::D
     ;
-  method method1({required covariant core::int a}) → void
+  method method1({required covariant-by-declaration core::int a}) → void
     ;
-  method method2({covariant core::int? a, required core::int b}) → void
+  method method2({covariant-by-declaration core::int? a, required core::int b}) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd/combined_required.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/combined_required.dart.weak.transformed.expect
index 34958ef..4e4e563 100644
--- a/pkg/front_end/testcases/nnbd/combined_required.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/combined_required.dart.weak.transformed.expect
@@ -13,24 +13,24 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  method method1({required covariant core::int a = #C1}) → void {}
-  method method2({covariant core::int? a = #C1, required core::int b = #C1}) → void {}
+  method method1({required covariant-by-declaration core::int a = #C1}) → void {}
+  method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void {}
 }
 class C extends self::A implements self::B {
   synthetic constructor •() → self::C
     : super self::A::•()
     ;
-  forwarding-stub method method1({required covariant core::int a = #C1}) → void
+  forwarding-stub method method1({required covariant-by-declaration core::int a = #C1}) → void
     return super.{self::A::method1}(a: a);
-  forwarding-stub method method2({covariant core::int? a = #C1, required core::int b = #C1}) → void
+  forwarding-stub method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void
     return super.{self::A::method2}(a: a, b: b);
 }
 class D extends self::C {
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  method method1({required covariant core::int a = #C1}) → void {}
-  method method2({covariant core::int? a = #C1, required core::int b = #C1}) → void {}
+  method method1({required covariant-by-declaration core::int a = #C1}) → void {}
+  method method2({covariant-by-declaration core::int? a = #C1, required core::int b = #C1}) → void {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.expect
index 23b6d19..ac2d469 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.expect
@@ -273,21 +273,21 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ==(covariant self::A other) → core::bool
+  operator ==(covariant-by-declaration self::A other) → core::bool
     return true;
 }
 class B extends self::A {
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator ==(covariant self::A other) → core::bool
+  operator ==(covariant-by-declaration self::A other) → core::bool
     return true;
 }
 class C<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  operator ==(covariant generic-covariant-impl self::C<self::C::T%> other) → core::bool
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T%> other) → core::bool
     return true;
 }
 class D extends self::C<core::int> {
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.transformed.expect
index 23b6d19..ac2d469 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.strong.transformed.expect
@@ -273,21 +273,21 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ==(covariant self::A other) → core::bool
+  operator ==(covariant-by-declaration self::A other) → core::bool
     return true;
 }
 class B extends self::A {
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator ==(covariant self::A other) → core::bool
+  operator ==(covariant-by-declaration self::A other) → core::bool
     return true;
 }
 class C<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  operator ==(covariant generic-covariant-impl self::C<self::C::T%> other) → core::bool
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T%> other) → core::bool
     return true;
 }
 class D extends self::C<core::int> {
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.expect
index 23b6d19..ac2d469 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.expect
@@ -273,21 +273,21 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ==(covariant self::A other) → core::bool
+  operator ==(covariant-by-declaration self::A other) → core::bool
     return true;
 }
 class B extends self::A {
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator ==(covariant self::A other) → core::bool
+  operator ==(covariant-by-declaration self::A other) → core::bool
     return true;
 }
 class C<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  operator ==(covariant generic-covariant-impl self::C<self::C::T%> other) → core::bool
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T%> other) → core::bool
     return true;
 }
 class D extends self::C<core::int> {
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.outline.expect
index 7ead045..7d5b0a9 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.outline.expect
@@ -5,19 +5,19 @@
 class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  operator ==(covariant self::A other) → core::bool
+  operator ==(covariant-by-declaration self::A other) → core::bool
     ;
 }
 class B extends self::A {
   synthetic constructor •() → self::B
     ;
-  operator ==(covariant self::A other) → core::bool
+  operator ==(covariant-by-declaration self::A other) → core::bool
     ;
 }
 class C<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T%>
     ;
-  operator ==(covariant generic-covariant-impl self::C<self::C::T%> other) → core::bool
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T%> other) → core::bool
     ;
 }
 class D extends self::C<core::int> {
diff --git a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.transformed.expect
index 23b6d19..ac2d469 100644
--- a/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_equals.dart.weak.transformed.expect
@@ -273,21 +273,21 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  operator ==(covariant self::A other) → core::bool
+  operator ==(covariant-by-declaration self::A other) → core::bool
     return true;
 }
 class B extends self::A {
   synthetic constructor •() → self::B
     : super self::A::•()
     ;
-  operator ==(covariant self::A other) → core::bool
+  operator ==(covariant-by-declaration self::A other) → core::bool
     return true;
 }
 class C<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  operator ==(covariant generic-covariant-impl self::C<self::C::T%> other) → core::bool
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T%> other) → core::bool
     return true;
 }
 class D extends self::C<core::int> {
diff --git a/pkg/front_end/testcases/nnbd/covariant_late_field.dart.strong.expect b/pkg/front_end/testcases/nnbd/covariant_late_field.dart.strong.expect
index f8620c0..2aecfe1 100644
--- a/pkg/front_end/testcases/nnbd/covariant_late_field.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_late_field.dart.strong.expect
@@ -15,7 +15,7 @@
 
 class A extends core::Object {
   late field core::num invariantField;
-  late covariant field core::num covariantField;
+  late covariant-by-declaration field core::num covariantField;
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
@@ -27,7 +27,7 @@
   abstract get invariantField() → core::num;
   abstract set invariantField(core::num value) → void;
   abstract get covariantField() → core::num;
-  abstract set covariantField(covariant core::num value) → void;
+  abstract set covariantField(covariant-by-declaration core::num value) → void;
 }
 abstract class C extends core::Object implements self::A {
   synthetic constructor •() → self::C
@@ -36,15 +36,15 @@
   abstract get invariantField() → core::int;
   set invariantField(core::int value) → void {}
   abstract get covariantField() → core::int;
-  set covariantField(covariant core::int value) → void {}
+  set covariantField(covariant-by-declaration core::int value) → void {}
 }
 abstract class D extends core::Object implements self::A {
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
   abstract get invariantField() → core::int;
-  set invariantField(covariant core::int value) → void {}
+  set invariantField(covariant-by-declaration core::int value) → void {}
   abstract get covariantField() → core::int;
-  set covariantField(covariant core::int value) → void {}
+  set covariantField(covariant-by-declaration core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/covariant_late_field.dart.weak.expect b/pkg/front_end/testcases/nnbd/covariant_late_field.dart.weak.expect
index f8620c0..2aecfe1 100644
--- a/pkg/front_end/testcases/nnbd/covariant_late_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_late_field.dart.weak.expect
@@ -15,7 +15,7 @@
 
 class A extends core::Object {
   late field core::num invariantField;
-  late covariant field core::num covariantField;
+  late covariant-by-declaration field core::num covariantField;
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
@@ -27,7 +27,7 @@
   abstract get invariantField() → core::num;
   abstract set invariantField(core::num value) → void;
   abstract get covariantField() → core::num;
-  abstract set covariantField(covariant core::num value) → void;
+  abstract set covariantField(covariant-by-declaration core::num value) → void;
 }
 abstract class C extends core::Object implements self::A {
   synthetic constructor •() → self::C
@@ -36,15 +36,15 @@
   abstract get invariantField() → core::int;
   set invariantField(core::int value) → void {}
   abstract get covariantField() → core::int;
-  set covariantField(covariant core::int value) → void {}
+  set covariantField(covariant-by-declaration core::int value) → void {}
 }
 abstract class D extends core::Object implements self::A {
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
   abstract get invariantField() → core::int;
-  set invariantField(covariant core::int value) → void {}
+  set invariantField(covariant-by-declaration core::int value) → void {}
   abstract get covariantField() → core::int;
-  set covariantField(covariant core::int value) → void {}
+  set covariantField(covariant-by-declaration core::int value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/covariant_late_field.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/covariant_late_field.dart.weak.outline.expect
index 68a5f71e..02e8d02 100644
--- a/pkg/front_end/testcases/nnbd/covariant_late_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_late_field.dart.weak.outline.expect
@@ -15,7 +15,7 @@
 
 class A extends core::Object {
   late field core::num invariantField;
-  late covariant field core::num covariantField;
+  late covariant-by-declaration field core::num covariantField;
   synthetic constructor •() → self::A
     ;
 }
@@ -25,7 +25,7 @@
   abstract get invariantField() → core::num;
   abstract set invariantField(core::num value) → void;
   abstract get covariantField() → core::num;
-  abstract set covariantField(covariant core::num value) → void;
+  abstract set covariantField(covariant-by-declaration core::num value) → void;
 }
 abstract class C extends core::Object implements self::A {
   synthetic constructor •() → self::C
@@ -34,17 +34,17 @@
   set invariantField(core::int value) → void
     ;
   abstract get covariantField() → core::int;
-  set covariantField(covariant core::int value) → void
+  set covariantField(covariant-by-declaration core::int value) → void
     ;
 }
 abstract class D extends core::Object implements self::A {
   synthetic constructor •() → self::D
     ;
   abstract get invariantField() → core::int;
-  set invariantField(covariant core::int value) → void
+  set invariantField(covariant-by-declaration core::int value) → void
     ;
   abstract get covariantField() → core::int;
-  set covariantField(covariant core::int value) → void
+  set covariantField(covariant-by-declaration core::int value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.expect b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.expect
index 85ec816..692e181 100644
--- a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.expect
@@ -12,25 +12,25 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method(covariant core::num a) → void;
+  abstract method method(covariant-by-declaration core::num a) → void;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int a) → void;
+  abstract method method(covariant-by-declaration core::int a) → void;
 }
 abstract class D1 extends core::Object implements self::A, self::B, self::C {
   synthetic constructor •() → self::D1
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class D2 extends core::Object implements self::A, self::B {
   synthetic constructor •() → self::D2
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class D3 extends core::Object implements self::B, self::C {
   synthetic constructor •() → self::D3
@@ -41,13 +41,13 @@
   synthetic constructor •() → self::D4
     : super core::Object::•()
     ;
-  abstract member-signature method method(covariant core::num a) → void; -> self::B::method
+  abstract member-signature method method(covariant-by-declaration core::num a) → void; -> self::B::method
 }
 abstract class D5 extends core::Object implements self::A, self::C {
   synthetic constructor •() → self::D5
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class E extends core::Object {
   synthetic constructor •() → self::E
@@ -59,18 +59,18 @@
   synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int a) → void;
+  abstract method method(covariant-by-declaration core::int a) → void;
 }
 abstract class G1 extends core::Object implements self::E, self::F {
   synthetic constructor •() → self::G1
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration core::num a) → void;
 }
 abstract class G2 extends core::Object implements self::F, self::E {
   synthetic constructor •() → self::G2
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration core::num a) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.transformed.expect
index 85ec816..692e181 100644
--- a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.strong.transformed.expect
@@ -12,25 +12,25 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method(covariant core::num a) → void;
+  abstract method method(covariant-by-declaration core::num a) → void;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int a) → void;
+  abstract method method(covariant-by-declaration core::int a) → void;
 }
 abstract class D1 extends core::Object implements self::A, self::B, self::C {
   synthetic constructor •() → self::D1
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class D2 extends core::Object implements self::A, self::B {
   synthetic constructor •() → self::D2
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class D3 extends core::Object implements self::B, self::C {
   synthetic constructor •() → self::D3
@@ -41,13 +41,13 @@
   synthetic constructor •() → self::D4
     : super core::Object::•()
     ;
-  abstract member-signature method method(covariant core::num a) → void; -> self::B::method
+  abstract member-signature method method(covariant-by-declaration core::num a) → void; -> self::B::method
 }
 abstract class D5 extends core::Object implements self::A, self::C {
   synthetic constructor •() → self::D5
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class E extends core::Object {
   synthetic constructor •() → self::E
@@ -59,18 +59,18 @@
   synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int a) → void;
+  abstract method method(covariant-by-declaration core::int a) → void;
 }
 abstract class G1 extends core::Object implements self::E, self::F {
   synthetic constructor •() → self::G1
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration core::num a) → void;
 }
 abstract class G2 extends core::Object implements self::F, self::E {
   synthetic constructor •() → self::G2
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration core::num a) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.expect b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.expect
index 85ec816..692e181 100644
--- a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.expect
@@ -12,25 +12,25 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method(covariant core::num a) → void;
+  abstract method method(covariant-by-declaration core::num a) → void;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int a) → void;
+  abstract method method(covariant-by-declaration core::int a) → void;
 }
 abstract class D1 extends core::Object implements self::A, self::B, self::C {
   synthetic constructor •() → self::D1
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class D2 extends core::Object implements self::A, self::B {
   synthetic constructor •() → self::D2
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class D3 extends core::Object implements self::B, self::C {
   synthetic constructor •() → self::D3
@@ -41,13 +41,13 @@
   synthetic constructor •() → self::D4
     : super core::Object::•()
     ;
-  abstract member-signature method method(covariant core::num a) → void; -> self::B::method
+  abstract member-signature method method(covariant-by-declaration core::num a) → void; -> self::B::method
 }
 abstract class D5 extends core::Object implements self::A, self::C {
   synthetic constructor •() → self::D5
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class E extends core::Object {
   synthetic constructor •() → self::E
@@ -59,18 +59,18 @@
   synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int a) → void;
+  abstract method method(covariant-by-declaration core::int a) → void;
 }
 abstract class G1 extends core::Object implements self::E, self::F {
   synthetic constructor •() → self::G1
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration core::num a) → void;
 }
 abstract class G2 extends core::Object implements self::F, self::E {
   synthetic constructor •() → self::G2
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration core::num a) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.outline.expect
index 9504dc6..6b6539e 100644
--- a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.outline.expect
@@ -10,22 +10,22 @@
 abstract class B extends core::Object {
   synthetic constructor •() → self::B
     ;
-  abstract method method(covariant core::num a) → void;
+  abstract method method(covariant-by-declaration core::num a) → void;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
     ;
-  abstract method method(covariant core::int a) → void;
+  abstract method method(covariant-by-declaration core::int a) → void;
 }
 abstract class D1 extends core::Object implements self::A, self::B, self::C {
   synthetic constructor •() → self::D1
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class D2 extends core::Object implements self::A, self::B {
   synthetic constructor •() → self::D2
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class D3 extends core::Object implements self::B, self::C {
   synthetic constructor •() → self::D3
@@ -34,12 +34,12 @@
 abstract class D4 extends core::Object implements self::C, self::B {
   synthetic constructor •() → self::D4
     ;
-  abstract member-signature method method(covariant core::num a) → void; -> self::B::method
+  abstract member-signature method method(covariant-by-declaration core::num a) → void; -> self::B::method
 }
 abstract class D5 extends core::Object implements self::A, self::C {
   synthetic constructor •() → self::D5
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class E extends core::Object {
   synthetic constructor •() → self::E
@@ -49,17 +49,17 @@
 abstract class F extends core::Object {
   synthetic constructor •() → self::F
     ;
-  abstract method method(covariant core::int a) → void;
+  abstract method method(covariant-by-declaration core::int a) → void;
 }
 abstract class G1 extends core::Object implements self::E, self::F {
   synthetic constructor •() → self::G1
     ;
-  abstract forwarding-stub method method(covariant core::num a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration core::num a) → void;
 }
 abstract class G2 extends core::Object implements self::F, self::E {
   synthetic constructor •() → self::G2
     ;
-  abstract forwarding-stub method method(covariant core::num a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration core::num a) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.transformed.expect
index 85ec816..692e181 100644
--- a/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/covariant_nnbd_top_merge.dart.weak.transformed.expect
@@ -12,25 +12,25 @@
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method method(covariant core::num a) → void;
+  abstract method method(covariant-by-declaration core::num a) → void;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int a) → void;
+  abstract method method(covariant-by-declaration core::int a) → void;
 }
 abstract class D1 extends core::Object implements self::A, self::B, self::C {
   synthetic constructor •() → self::D1
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class D2 extends core::Object implements self::A, self::B {
   synthetic constructor •() → self::D2
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class D3 extends core::Object implements self::B, self::C {
   synthetic constructor •() → self::D3
@@ -41,13 +41,13 @@
   synthetic constructor •() → self::D4
     : super core::Object::•()
     ;
-  abstract member-signature method method(covariant core::num a) → void; -> self::B::method
+  abstract member-signature method method(covariant-by-declaration core::num a) → void; -> self::B::method
 }
 abstract class D5 extends core::Object implements self::A, self::C {
   synthetic constructor •() → self::D5
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant dynamic a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration dynamic a) → void;
 }
 abstract class E extends core::Object {
   synthetic constructor •() → self::E
@@ -59,18 +59,18 @@
   synthetic constructor •() → self::F
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int a) → void;
+  abstract method method(covariant-by-declaration core::int a) → void;
 }
 abstract class G1 extends core::Object implements self::E, self::F {
   synthetic constructor •() → self::G1
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration core::num a) → void;
 }
 abstract class G2 extends core::Object implements self::F, self::E {
   synthetic constructor •() → self::G2
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num a) → void;
+  abstract forwarding-stub method method(covariant-by-declaration core::num a) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect
index db466d1..677a9bb 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method barInt(core::int value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect
index db466d1..677a9bb 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method barInt(core::int value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect
index db466d1..677a9bb 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method barInt(core::int value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.outline.expect
index f29c5b8..4176cbdf 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::A<self::A::T%>
     ;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic
+  method bar(covariant-by-class self::A::T% value) → dynamic
     ;
   method barInt(core::int value) → dynamic
     ;
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect
index db466d1..677a9bb 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method barInt(core::int value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
diff --git a/pkg/front_end/testcases/nnbd/external_fields.dart.strong.expect b/pkg/front_end/testcases/nnbd/external_fields.dart.strong.expect
index 27fd69e..9ca288c 100644
--- a/pkg/front_end/testcases/nnbd/external_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields.dart.strong.expect
@@ -20,7 +20,7 @@
   @#C1
   external get covariantInstanceField() → core::num;
   @#C1
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   @#C1
   external static get staticField() → core::int;
   @#C1
@@ -31,7 +31,7 @@
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get untypedStaticField() → dynamic;
   external static set untypedStaticField(dynamic #externalFieldValue) → void;
   external static get untypedFinalStaticField() → dynamic;
@@ -46,7 +46,7 @@
   @#C1
   external get covariantInstanceField() → core::num;
   @#C1
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   @#C1
   external static get staticField() → core::int;
   @#C1
@@ -57,7 +57,7 @@
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get untypedStaticField() → dynamic;
   external static set untypedStaticField(dynamic #externalFieldValue) → void;
   external static get untypedFinalStaticField() → dynamic;
@@ -70,12 +70,12 @@
   external set instanceField(core::int #externalFieldValue) → void;
   external get finalInstanceField() → core::int;
   external get covariantInstanceField() → core::num;
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   external get untypedInstanceField() → dynamic;
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
 }
 extension Extension on self::A {
   get extensionInstanceField = self::Extension|get#extensionInstanceField;
diff --git a/pkg/front_end/testcases/nnbd/external_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/external_fields.dart.strong.transformed.expect
index 27fd69e..9ca288c 100644
--- a/pkg/front_end/testcases/nnbd/external_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields.dart.strong.transformed.expect
@@ -20,7 +20,7 @@
   @#C1
   external get covariantInstanceField() → core::num;
   @#C1
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   @#C1
   external static get staticField() → core::int;
   @#C1
@@ -31,7 +31,7 @@
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get untypedStaticField() → dynamic;
   external static set untypedStaticField(dynamic #externalFieldValue) → void;
   external static get untypedFinalStaticField() → dynamic;
@@ -46,7 +46,7 @@
   @#C1
   external get covariantInstanceField() → core::num;
   @#C1
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   @#C1
   external static get staticField() → core::int;
   @#C1
@@ -57,7 +57,7 @@
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get untypedStaticField() → dynamic;
   external static set untypedStaticField(dynamic #externalFieldValue) → void;
   external static get untypedFinalStaticField() → dynamic;
@@ -70,12 +70,12 @@
   external set instanceField(core::int #externalFieldValue) → void;
   external get finalInstanceField() → core::int;
   external get covariantInstanceField() → core::num;
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   external get untypedInstanceField() → dynamic;
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
 }
 extension Extension on self::A {
   get extensionInstanceField = self::Extension|get#extensionInstanceField;
diff --git a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.expect b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.expect
index 27fd69e..9ca288c 100644
--- a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.expect
@@ -20,7 +20,7 @@
   @#C1
   external get covariantInstanceField() → core::num;
   @#C1
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   @#C1
   external static get staticField() → core::int;
   @#C1
@@ -31,7 +31,7 @@
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get untypedStaticField() → dynamic;
   external static set untypedStaticField(dynamic #externalFieldValue) → void;
   external static get untypedFinalStaticField() → dynamic;
@@ -46,7 +46,7 @@
   @#C1
   external get covariantInstanceField() → core::num;
   @#C1
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   @#C1
   external static get staticField() → core::int;
   @#C1
@@ -57,7 +57,7 @@
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get untypedStaticField() → dynamic;
   external static set untypedStaticField(dynamic #externalFieldValue) → void;
   external static get untypedFinalStaticField() → dynamic;
@@ -70,12 +70,12 @@
   external set instanceField(core::int #externalFieldValue) → void;
   external get finalInstanceField() → core::int;
   external get covariantInstanceField() → core::num;
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   external get untypedInstanceField() → dynamic;
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
 }
 extension Extension on self::A {
   get extensionInstanceField = self::Extension|get#extensionInstanceField;
diff --git a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.outline.expect
index 3b1721d..25ee845 100644
--- a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.outline.expect
@@ -19,7 +19,7 @@
   @self::Annotation::•()
   external get covariantInstanceField() → core::num;
   @self::Annotation::•()
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   @self::Annotation::•()
   external static get staticField() → core::int;
   @self::Annotation::•()
@@ -30,7 +30,7 @@
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get untypedStaticField() → dynamic;
   external static set untypedStaticField(dynamic #externalFieldValue) → void;
   external static get untypedFinalStaticField() → dynamic;
@@ -45,7 +45,7 @@
   @self::Annotation::•()
   external get covariantInstanceField() → core::num;
   @self::Annotation::•()
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   @self::Annotation::•()
   external static get staticField() → core::int;
   @self::Annotation::•()
@@ -56,7 +56,7 @@
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get untypedStaticField() → dynamic;
   external static set untypedStaticField(dynamic #externalFieldValue) → void;
   external static get untypedFinalStaticField() → dynamic;
@@ -68,12 +68,12 @@
   external set instanceField(core::int #externalFieldValue) → void;
   external get finalInstanceField() → core::int;
   external get covariantInstanceField() → core::num;
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   external get untypedInstanceField() → dynamic;
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
 }
 extension Extension on self::A {
   get extensionInstanceField = self::Extension|get#extensionInstanceField;
diff --git a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.transformed.expect
index 27fd69e..9ca288c 100644
--- a/pkg/front_end/testcases/nnbd/external_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields.dart.weak.transformed.expect
@@ -20,7 +20,7 @@
   @#C1
   external get covariantInstanceField() → core::num;
   @#C1
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   @#C1
   external static get staticField() → core::int;
   @#C1
@@ -31,7 +31,7 @@
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get untypedStaticField() → dynamic;
   external static set untypedStaticField(dynamic #externalFieldValue) → void;
   external static get untypedFinalStaticField() → dynamic;
@@ -46,7 +46,7 @@
   @#C1
   external get covariantInstanceField() → core::num;
   @#C1
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   @#C1
   external static get staticField() → core::int;
   @#C1
@@ -57,7 +57,7 @@
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get untypedStaticField() → dynamic;
   external static set untypedStaticField(dynamic #externalFieldValue) → void;
   external static get untypedFinalStaticField() → dynamic;
@@ -70,12 +70,12 @@
   external set instanceField(core::int #externalFieldValue) → void;
   external get finalInstanceField() → core::int;
   external get covariantInstanceField() → core::num;
-  external set covariantInstanceField(covariant core::num #externalFieldValue) → void;
+  external set covariantInstanceField(covariant-by-declaration core::num #externalFieldValue) → void;
   external get untypedInstanceField() → dynamic;
   external set untypedInstanceField(dynamic #externalFieldValue) → void;
   external get untypedFinalInstanceField() → dynamic;
   external get untypedCovariantInstanceField() → dynamic;
-  external set untypedCovariantInstanceField(covariant dynamic #externalFieldValue) → void;
+  external set untypedCovariantInstanceField(covariant-by-declaration dynamic #externalFieldValue) → void;
 }
 extension Extension on self::A {
   get extensionInstanceField = self::Extension|get#extensionInstanceField;
diff --git a/pkg/front_end/testcases/nnbd/external_fields_spec.dart.strong.expect b/pkg/front_end/testcases/nnbd/external_fields_spec.dart.strong.expect
index f39a6bb..d5e1933 100644
--- a/pkg/front_end/testcases/nnbd/external_fields_spec.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields_spec.dart.strong.expect
@@ -9,7 +9,7 @@
   external get i1() → core::int;
   external set i1(core::int #externalFieldValue) → void;
   external get cx() → dynamic;
-  external set cx(covariant dynamic #externalFieldValue) → void;
+  external set cx(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get s1() → core::int;
   external static set s1(core::int #externalFieldValue) → void;
   external static get fx() → dynamic;
diff --git a/pkg/front_end/testcases/nnbd/external_fields_spec.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/external_fields_spec.dart.strong.transformed.expect
index f39a6bb..d5e1933 100644
--- a/pkg/front_end/testcases/nnbd/external_fields_spec.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields_spec.dart.strong.transformed.expect
@@ -9,7 +9,7 @@
   external get i1() → core::int;
   external set i1(core::int #externalFieldValue) → void;
   external get cx() → dynamic;
-  external set cx(covariant dynamic #externalFieldValue) → void;
+  external set cx(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get s1() → core::int;
   external static set s1(core::int #externalFieldValue) → void;
   external static get fx() → dynamic;
diff --git a/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.expect b/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.expect
index f39a6bb..d5e1933 100644
--- a/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.expect
@@ -9,7 +9,7 @@
   external get i1() → core::int;
   external set i1(core::int #externalFieldValue) → void;
   external get cx() → dynamic;
-  external set cx(covariant dynamic #externalFieldValue) → void;
+  external set cx(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get s1() → core::int;
   external static set s1(core::int #externalFieldValue) → void;
   external static get fx() → dynamic;
diff --git a/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.outline.expect
index bdaf36f..d358d7c 100644
--- a/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.outline.expect
@@ -8,7 +8,7 @@
   external get i1() → core::int;
   external set i1(core::int #externalFieldValue) → void;
   external get cx() → dynamic;
-  external set cx(covariant dynamic #externalFieldValue) → void;
+  external set cx(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get s1() → core::int;
   external static set s1(core::int #externalFieldValue) → void;
   external static get fx() → dynamic;
diff --git a/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.transformed.expect
index f39a6bb..d5e1933 100644
--- a/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/external_fields_spec.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
   external get i1() → core::int;
   external set i1(core::int #externalFieldValue) → void;
   external get cx() → dynamic;
-  external set cx(covariant dynamic #externalFieldValue) → void;
+  external set cx(covariant-by-declaration dynamic #externalFieldValue) → void;
   external static get s1() → core::int;
   external static set s1(core::int #externalFieldValue) → void;
   external static get fx() → dynamic;
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
index 73b1e1c..5ed98d4 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(generic-covariant-impl asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async {
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async {
     final self::TestMixin::R% response = await fetch;
     self::TestMixin::T% result;
     if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
@@ -46,7 +46,7 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin
     : super core::Object::•()
     ;
-  mixin-super-stub method test(generic-covariant-impl asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String>
+  mixin-super-stub method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String>
     return super.{self::TestMixin::test}(fetch);
 }
 class Class1 extends self::_Class1&Object&TestMixin {
@@ -62,7 +62,7 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin
     : super core::Object::•()
     ;
-  mixin-super-stub method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String>
+  mixin-super-stub method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String>
     return super.{self::TestMixin::test}(fetch);
 }
 class Class2 extends self::_Class2&Object&TestMixin {
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
index 601dda0..4d55755 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
@@ -5,7 +5,7 @@
 import "dart:_internal" as _in;
 
 abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(generic-covariant-impl asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> /* originally async */ {
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> /* originally async */ {
     final asy::_Future<self::TestMixin::T%> :async_future = new asy::_Future::•<self::TestMixin::T%>();
     core::bool* :is_sync = false;
     FutureOr<self::TestMixin::T%>? :return_value;
@@ -73,7 +73,7 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin
     : super core::Object::•()
     ;
-  method test(generic-covariant-impl asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String> /* originally async */ {
+  method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String> /* originally async */ {
     final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
     core::bool* :is_sync = false;
     FutureOr<core::String>? :return_value;
@@ -132,7 +132,7 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin
     : super core::Object::•()
     ;
-  method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String> /* originally async */ {
+  method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String> /* originally async */ {
     final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
     core::bool* :is_sync = false;
     FutureOr<core::String>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
index 73b1e1c..5ed98d4 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(generic-covariant-impl asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async {
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async {
     final self::TestMixin::R% response = await fetch;
     self::TestMixin::T% result;
     if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
@@ -46,7 +46,7 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin
     : super core::Object::•()
     ;
-  mixin-super-stub method test(generic-covariant-impl asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String>
+  mixin-super-stub method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String>
     return super.{self::TestMixin::test}(fetch);
 }
 class Class1 extends self::_Class1&Object&TestMixin {
@@ -62,7 +62,7 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin
     : super core::Object::•()
     ;
-  mixin-super-stub method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String>
+  mixin-super-stub method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String>
     return super.{self::TestMixin::test}(fetch);
 }
 class Class2 extends self::_Class2&Object&TestMixin {
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.outline.expect
index 0b3f427..dbc7e1d 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.outline.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(generic-covariant-impl asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async 
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> async 
     ;
 }
 class PagingResponse<T extends core::Object? = dynamic> extends core::Object {
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin
     : super core::Object::•()
     ;
-  mixin-super-stub method test(generic-covariant-impl asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String>
+  mixin-super-stub method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String>
     return super.{self::TestMixin::test}(fetch);
 }
 class Class1 extends self::_Class1&Object&TestMixin {
@@ -39,7 +39,7 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin
     : super core::Object::•()
     ;
-  mixin-super-stub method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String>
+  mixin-super-stub method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String>
     return super.{self::TestMixin::test}(fetch);
 }
 class Class2 extends self::_Class2&Object&TestMixin {
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
index 601dda0..4d55755 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
@@ -5,7 +5,7 @@
 import "dart:_internal" as _in;
 
 abstract class TestMixin<R extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
-  method test(generic-covariant-impl asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> /* originally async */ {
+  method test(covariant-by-class asy::Future<self::TestMixin::R%> fetch) → asy::Future<self::TestMixin::T%> /* originally async */ {
     final asy::_Future<self::TestMixin::T%> :async_future = new asy::_Future::•<self::TestMixin::T%>();
     core::bool* :is_sync = false;
     FutureOr<self::TestMixin::T%>? :return_value;
@@ -73,7 +73,7 @@
   const synthetic constructor •() → self::_Class1&Object&TestMixin
     : super core::Object::•()
     ;
-  method test(generic-covariant-impl asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String> /* originally async */ {
+  method test(covariant-by-class asy::Future<self::Response<core::String>> fetch) → asy::Future<core::String> /* originally async */ {
     final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
     core::bool* :is_sync = false;
     FutureOr<core::String>? :return_value;
@@ -132,7 +132,7 @@
   const synthetic constructor •() → self::_Class2&Object&TestMixin
     : super core::Object::•()
     ;
-  method test(generic-covariant-impl asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String> /* originally async */ {
+  method test(covariant-by-class asy::Future<self::PagingResponse<core::String>> fetch) → asy::Future<core::String> /* originally async */ {
     final asy::_Future<core::String> :async_future = new asy::_Future::•<core::String>();
     core::bool* :is_sync = false;
     FutureOr<core::String>? :return_value;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect
index 7a49cf6..c796a15 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.strong.expect
@@ -118,7 +118,7 @@
 abstract class A extends core::Object {
   field core::int property4 = 0;
   field core::int property5 = 0;
-  covariant field core::num property6 = 0;
+  covariant-by-declaration field core::num property6 = 0;
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect
index 7a49cf6..c796a15 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.expect
@@ -118,7 +118,7 @@
 abstract class A extends core::Object {
   field core::int property4 = 0;
   field core::int property5 = 0;
-  covariant field core::num property6 = 0;
+  covariant-by-declaration field core::num property6 = 0;
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.outline.expect
index a05e6c9..db68d58 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart.weak.outline.expect
@@ -106,7 +106,7 @@
 abstract class A extends core::Object {
   field core::int property4;
   field core::int property5;
-  covariant field core::num property6;
+  covariant-by-declaration field core::num property6;
   synthetic constructor •() → self::A
     ;
   abstract get property1() → core::int;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.expect
index 4d7c28b..6234f7f 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.expect
@@ -30,7 +30,7 @@
 abstract class A extends core::Object {
   late field core::int property4;
   late field core::int? property5;
-  late covariant field core::int property6;
+  late covariant-by-declaration field core::int property6;
   constructor •(core::int property4, core::int? property5, core::int property6) → self::A
     : self::A::property4 = property4, self::A::property5 = property5, self::A::property6 = property6, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.transformed.expect
index 4d7c28b..6234f7f 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.strong.transformed.expect
@@ -30,7 +30,7 @@
 abstract class A extends core::Object {
   late field core::int property4;
   late field core::int? property5;
-  late covariant field core::int property6;
+  late covariant-by-declaration field core::int property6;
   constructor •(core::int property4, core::int? property5, core::int property6) → self::A
     : self::A::property4 = property4, self::A::property5 = property5, self::A::property6 = property6, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.expect
index 4d7c28b..6234f7f 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.expect
@@ -30,7 +30,7 @@
 abstract class A extends core::Object {
   late field core::int property4;
   late field core::int? property5;
-  late covariant field core::int property6;
+  late covariant-by-declaration field core::int property6;
   constructor •(core::int property4, core::int? property5, core::int property6) → self::A
     : self::A::property4 = property4, self::A::property5 = property5, self::A::property6 = property6, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.outline.expect
index 40bce371..9cdde6e 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.outline.expect
@@ -30,7 +30,7 @@
 abstract class A extends core::Object {
   late field core::int property4;
   late field core::int? property5;
-  late covariant field core::int property6;
+  late covariant-by-declaration field core::int property6;
   constructor •(core::int property4, core::int? property5, core::int property6) → self::A
     ;
 }
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.transformed.expect
index 4d7c28b..6234f7f 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_late.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
 abstract class A extends core::Object {
   late field core::int property4;
   late field core::int? property5;
-  late covariant field core::int property6;
+  late covariant-by-declaration field core::int property6;
   constructor •(core::int property4, core::int? property5, core::int property6) → self::A
     : self::A::property4 = property4, self::A::property5 = property5, self::A::property6 = property6, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect
index 1f876ab..1f17578 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.expect
@@ -122,7 +122,7 @@
 abstract class A extends core::Object {
   field core::int property4;
   field core::int? property5;
-  covariant field core::int property6;
+  covariant-by-declaration field core::int property6;
   constructor •(core::int property4, core::int? property5, core::int property6) → self::A
     : self::A::property4 = property4, self::A::property5 = property5, self::A::property6 = property6, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect
index 1f876ab..1f17578 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.strong.transformed.expect
@@ -122,7 +122,7 @@
 abstract class A extends core::Object {
   field core::int property4;
   field core::int? property5;
-  covariant field core::int property6;
+  covariant-by-declaration field core::int property6;
   constructor •(core::int property4, core::int? property5, core::int property6) → self::A
     : self::A::property4 = property4, self::A::property5 = property5, self::A::property6 = property6, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect
index 1f876ab..1f17578 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.expect
@@ -122,7 +122,7 @@
 abstract class A extends core::Object {
   field core::int property4;
   field core::int? property5;
-  covariant field core::int property6;
+  covariant-by-declaration field core::int property6;
   constructor •(core::int property4, core::int? property5, core::int property6) → self::A
     : self::A::property4 = property4, self::A::property5 = property5, self::A::property6 = property6, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.outline.expect
index adb8072..e438379 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.outline.expect
@@ -106,7 +106,7 @@
 abstract class A extends core::Object {
   field core::int property4;
   field core::int? property5;
-  covariant field core::int property6;
+  covariant-by-declaration field core::int property6;
   constructor •(core::int property4, core::int? property5, core::int property6) → self::A
     ;
   abstract get property1() → core::int;
diff --git a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect
index 1f876ab..1f17578 100644
--- a/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/getter_vs_setter_type_nnbd.dart.weak.transformed.expect
@@ -122,7 +122,7 @@
 abstract class A extends core::Object {
   field core::int property4;
   field core::int? property5;
-  covariant field core::int property6;
+  covariant-by-declaration field core::int property6;
   constructor •(core::int property4, core::int? property5, core::int property6) → self::A
     : self::A::property4 = property4, self::A::property5 = property5, self::A::property6 = property6, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.expect b/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.expect
index bbe06cb..d29fed9 100644
--- a/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.expect
@@ -6,13 +6,13 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class B extends core::Object {
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → dynamic;
+  abstract method m(covariant-by-declaration core::num a) → dynamic;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
@@ -24,13 +24,13 @@
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class E extends core::Object implements self::B {
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → dynamic;
+  abstract method m(covariant-by-declaration core::num a) → dynamic;
 }
 abstract class F extends core::Object {
   synthetic constructor •() → self::F
@@ -48,30 +48,30 @@
   synthetic constructor •() → self::H
     : super core::Object::•()
     ;
-  abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
+  abstract member-signature method m(covariant-by-declaration core::num a) → core::Object?; -> self::E::m
 }
 abstract class I extends core::Object implements self::D {
   synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class J extends core::Object implements self::H {
   synthetic constructor •() → self::J
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → core::Object?;
+  abstract method m(covariant-by-declaration core::num a) → core::Object?;
 }
 abstract class K extends core::Object implements self::I, self::E, self::G {
   synthetic constructor •() → self::K
     : super core::Object::•()
     ;
-  abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
+  abstract member-signature method m(covariant-by-declaration core::num a) → core::Object?; -> self::E::m
 }
 abstract class L extends core::Object implements self::K {
   synthetic constructor •() → self::L
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → core::Object?;
+  abstract method m(covariant-by-declaration core::num a) → core::Object?;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.transformed.expect
index bbe06cb..d29fed9 100644
--- a/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_method_types.dart.strong.transformed.expect
@@ -6,13 +6,13 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class B extends core::Object {
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → dynamic;
+  abstract method m(covariant-by-declaration core::num a) → dynamic;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
@@ -24,13 +24,13 @@
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class E extends core::Object implements self::B {
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → dynamic;
+  abstract method m(covariant-by-declaration core::num a) → dynamic;
 }
 abstract class F extends core::Object {
   synthetic constructor •() → self::F
@@ -48,30 +48,30 @@
   synthetic constructor •() → self::H
     : super core::Object::•()
     ;
-  abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
+  abstract member-signature method m(covariant-by-declaration core::num a) → core::Object?; -> self::E::m
 }
 abstract class I extends core::Object implements self::D {
   synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class J extends core::Object implements self::H {
   synthetic constructor •() → self::J
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → core::Object?;
+  abstract method m(covariant-by-declaration core::num a) → core::Object?;
 }
 abstract class K extends core::Object implements self::I, self::E, self::G {
   synthetic constructor •() → self::K
     : super core::Object::•()
     ;
-  abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
+  abstract member-signature method m(covariant-by-declaration core::num a) → core::Object?; -> self::E::m
 }
 abstract class L extends core::Object implements self::K {
   synthetic constructor •() → self::L
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → core::Object?;
+  abstract method m(covariant-by-declaration core::num a) → core::Object?;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.expect b/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.expect
index bbe06cb..d29fed9 100644
--- a/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.expect
@@ -6,13 +6,13 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class B extends core::Object {
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → dynamic;
+  abstract method m(covariant-by-declaration core::num a) → dynamic;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
@@ -24,13 +24,13 @@
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class E extends core::Object implements self::B {
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → dynamic;
+  abstract method m(covariant-by-declaration core::num a) → dynamic;
 }
 abstract class F extends core::Object {
   synthetic constructor •() → self::F
@@ -48,30 +48,30 @@
   synthetic constructor •() → self::H
     : super core::Object::•()
     ;
-  abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
+  abstract member-signature method m(covariant-by-declaration core::num a) → core::Object?; -> self::E::m
 }
 abstract class I extends core::Object implements self::D {
   synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class J extends core::Object implements self::H {
   synthetic constructor •() → self::J
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → core::Object?;
+  abstract method m(covariant-by-declaration core::num a) → core::Object?;
 }
 abstract class K extends core::Object implements self::I, self::E, self::G {
   synthetic constructor •() → self::K
     : super core::Object::•()
     ;
-  abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
+  abstract member-signature method m(covariant-by-declaration core::num a) → core::Object?; -> self::E::m
 }
 abstract class L extends core::Object implements self::K {
   synthetic constructor •() → self::L
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → core::Object?;
+  abstract method m(covariant-by-declaration core::num a) → core::Object?;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.outline.expect
index 37ff6de..7cdf10b 100644
--- a/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.outline.expect
@@ -5,12 +5,12 @@
 abstract class A extends core::Object {
   synthetic constructor •() → self::A
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class B extends core::Object {
   synthetic constructor •() → self::B
     ;
-  abstract method m(covariant core::num a) → dynamic;
+  abstract method m(covariant-by-declaration core::num a) → dynamic;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
@@ -20,12 +20,12 @@
 abstract class D extends core::Object implements self::A {
   synthetic constructor •() → self::D
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class E extends core::Object implements self::B {
   synthetic constructor •() → self::E
     ;
-  abstract method m(covariant core::num a) → dynamic;
+  abstract method m(covariant-by-declaration core::num a) → dynamic;
 }
 abstract class F extends core::Object {
   synthetic constructor •() → self::F
@@ -40,27 +40,27 @@
 abstract class H extends core::Object implements self::D, self::E, self::F, self::C {
   synthetic constructor •() → self::H
     ;
-  abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
+  abstract member-signature method m(covariant-by-declaration core::num a) → core::Object?; -> self::E::m
 }
 abstract class I extends core::Object implements self::D {
   synthetic constructor •() → self::I
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class J extends core::Object implements self::H {
   synthetic constructor •() → self::J
     ;
-  abstract method m(covariant core::num a) → core::Object?;
+  abstract method m(covariant-by-declaration core::num a) → core::Object?;
 }
 abstract class K extends core::Object implements self::I, self::E, self::G {
   synthetic constructor •() → self::K
     ;
-  abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
+  abstract member-signature method m(covariant-by-declaration core::num a) → core::Object?; -> self::E::m
 }
 abstract class L extends core::Object implements self::K {
   synthetic constructor •() → self::L
     ;
-  abstract method m(covariant core::num a) → core::Object?;
+  abstract method m(covariant-by-declaration core::num a) → core::Object?;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.transformed.expect
index bbe06cb..d29fed9 100644
--- a/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_method_types.dart.weak.transformed.expect
@@ -6,13 +6,13 @@
   synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class B extends core::Object {
   synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → dynamic;
+  abstract method m(covariant-by-declaration core::num a) → dynamic;
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C
@@ -24,13 +24,13 @@
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class E extends core::Object implements self::B {
   synthetic constructor •() → self::E
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → dynamic;
+  abstract method m(covariant-by-declaration core::num a) → dynamic;
 }
 abstract class F extends core::Object {
   synthetic constructor •() → self::F
@@ -48,30 +48,30 @@
   synthetic constructor •() → self::H
     : super core::Object::•()
     ;
-  abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
+  abstract member-signature method m(covariant-by-declaration core::num a) → core::Object?; -> self::E::m
 }
 abstract class I extends core::Object implements self::D {
   synthetic constructor •() → self::I
     : super core::Object::•()
     ;
-  abstract method m(covariant core::int a) → core::Object?;
+  abstract method m(covariant-by-declaration core::int a) → core::Object?;
 }
 abstract class J extends core::Object implements self::H {
   synthetic constructor •() → self::J
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → core::Object?;
+  abstract method m(covariant-by-declaration core::num a) → core::Object?;
 }
 abstract class K extends core::Object implements self::I, self::E, self::G {
   synthetic constructor •() → self::K
     : super core::Object::•()
     ;
-  abstract member-signature method m(covariant core::num a) → core::Object?; -> self::E::m
+  abstract member-signature method m(covariant-by-declaration core::num a) → core::Object?; -> self::E::m
 }
 abstract class L extends core::Object implements self::K {
   synthetic constructor •() → self::L
     : super core::Object::•()
     ;
-  abstract method m(covariant core::num a) → core::Object?;
+  abstract method m(covariant-by-declaration core::num a) → core::Object?;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.expect
index aade648..9723009 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
+  method doPromotionsToNullable(covariant-by-class self::Foo::T% t) → dynamic {
     if(t is{ForNonNullableByDefault} self::B?) {
       self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
       if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
@@ -29,7 +29,7 @@
       }
     }
   }
-  method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
+  method doPromotionsToNonNullable(covariant-by-class self::Foo::T% t) → dynamic {
     if(t is{ForNonNullableByDefault} self::B) {
       self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
       if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.transformed.expect
index aade648..9723009 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.strong.transformed.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
+  method doPromotionsToNullable(covariant-by-class self::Foo::T% t) → dynamic {
     if(t is{ForNonNullableByDefault} self::B?) {
       self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
       if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
@@ -29,7 +29,7 @@
       }
     }
   }
-  method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
+  method doPromotionsToNonNullable(covariant-by-class self::Foo::T% t) → dynamic {
     if(t is{ForNonNullableByDefault} self::B) {
       self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
       if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.expect
index aade648..9723009 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
+  method doPromotionsToNullable(covariant-by-class self::Foo::T% t) → dynamic {
     if(t is{ForNonNullableByDefault} self::B?) {
       self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
       if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
@@ -29,7 +29,7 @@
       }
     }
   }
-  method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
+  method doPromotionsToNonNullable(covariant-by-class self::Foo::T% t) → dynamic {
     if(t is{ForNonNullableByDefault} self::B) {
       self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
       if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.outline.expect
index 748d6bc..3b88639 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.outline.expect
@@ -17,9 +17,9 @@
 class Foo<T extends self::A?> extends core::Object {
   synthetic constructor •() → self::Foo<self::Foo::T%>
     ;
-  method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic
+  method doPromotionsToNullable(covariant-by-class self::Foo::T% t) → dynamic
     ;
-  method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic
+  method doPromotionsToNonNullable(covariant-by-class self::Foo::T% t) → dynamic
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.transformed.expect
index aade648..9723009 100644
--- a/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/intersection_types.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → self::Foo<self::Foo::T%>
     : super core::Object::•()
     ;
-  method doPromotionsToNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
+  method doPromotionsToNullable(covariant-by-class self::Foo::T% t) → dynamic {
     if(t is{ForNonNullableByDefault} self::B?) {
       self::Foo::T% bar = t{self::Foo::T% & self::B? /* '%' & '?' = '%' */};
       if(t{self::Foo::T% & self::B? /* '%' & '?' = '%' */} is{ForNonNullableByDefault} self::C?) {
@@ -29,7 +29,7 @@
       }
     }
   }
-  method doPromotionsToNonNullable(generic-covariant-impl self::Foo::T% t) → dynamic {
+  method doPromotionsToNonNullable(covariant-by-class self::Foo::T% t) → dynamic {
     if(t is{ForNonNullableByDefault} self::B) {
       self::Foo::T% bar = t{self::Foo::T% & self::B /* '%' & '!' = '!' */};
       if(t{self::Foo::T% & self::B /* '%' & '!' = '!' */} is{ForNonNullableByDefault} self::C) {
diff --git a/pkg/front_end/testcases/nnbd/issue40134.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue40134.dart.strong.expect
index c313dbe..4f69681 100644
--- a/pkg/front_end/testcases/nnbd/issue40134.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue40134.dart.strong.expect
@@ -8,7 +8,7 @@
     ;
   get t() → core::Type
     return self::GenericMethodBounds::T%;
-  method foo<generic-covariant-impl E extends self::GenericMethodBounds::T%>() → self::GenericMethodBounds<self::GenericMethodBounds::foo::E%>
+  method foo<covariant-by-class E extends self::GenericMethodBounds::T%>() → self::GenericMethodBounds<self::GenericMethodBounds::foo::E%>
     return new self::GenericMethodBounds::•<self::GenericMethodBounds::foo::E%>();
   method bar<E extends (self::GenericMethodBounds::T%) → void>() → self::GenericMethodBounds<self::GenericMethodBounds::bar::E>
     return new self::GenericMethodBounds::•<self::GenericMethodBounds::bar::E>();
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::GenericMethodBoundsDerived
     : super self::GenericMethodBounds::•()
     ;
-  method foo<generic-covariant-impl E extends core::num>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::foo::E>
+  method foo<covariant-by-class E extends core::num>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::foo::E>
     return new self::GenericMethodBounds::•<self::GenericMethodBoundsDerived::foo::E>();
   method bar<E extends (core::num) → void>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::bar::E>
     return new self::GenericMethodBounds::•<self::GenericMethodBoundsDerived::bar::E>();
diff --git a/pkg/front_end/testcases/nnbd/issue40134.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue40134.dart.strong.transformed.expect
index c313dbe..4f69681 100644
--- a/pkg/front_end/testcases/nnbd/issue40134.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40134.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
     ;
   get t() → core::Type
     return self::GenericMethodBounds::T%;
-  method foo<generic-covariant-impl E extends self::GenericMethodBounds::T%>() → self::GenericMethodBounds<self::GenericMethodBounds::foo::E%>
+  method foo<covariant-by-class E extends self::GenericMethodBounds::T%>() → self::GenericMethodBounds<self::GenericMethodBounds::foo::E%>
     return new self::GenericMethodBounds::•<self::GenericMethodBounds::foo::E%>();
   method bar<E extends (self::GenericMethodBounds::T%) → void>() → self::GenericMethodBounds<self::GenericMethodBounds::bar::E>
     return new self::GenericMethodBounds::•<self::GenericMethodBounds::bar::E>();
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::GenericMethodBoundsDerived
     : super self::GenericMethodBounds::•()
     ;
-  method foo<generic-covariant-impl E extends core::num>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::foo::E>
+  method foo<covariant-by-class E extends core::num>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::foo::E>
     return new self::GenericMethodBounds::•<self::GenericMethodBoundsDerived::foo::E>();
   method bar<E extends (core::num) → void>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::bar::E>
     return new self::GenericMethodBounds::•<self::GenericMethodBoundsDerived::bar::E>();
diff --git a/pkg/front_end/testcases/nnbd/issue40134.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue40134.dart.weak.expect
index c313dbe..4f69681 100644
--- a/pkg/front_end/testcases/nnbd/issue40134.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue40134.dart.weak.expect
@@ -8,7 +8,7 @@
     ;
   get t() → core::Type
     return self::GenericMethodBounds::T%;
-  method foo<generic-covariant-impl E extends self::GenericMethodBounds::T%>() → self::GenericMethodBounds<self::GenericMethodBounds::foo::E%>
+  method foo<covariant-by-class E extends self::GenericMethodBounds::T%>() → self::GenericMethodBounds<self::GenericMethodBounds::foo::E%>
     return new self::GenericMethodBounds::•<self::GenericMethodBounds::foo::E%>();
   method bar<E extends (self::GenericMethodBounds::T%) → void>() → self::GenericMethodBounds<self::GenericMethodBounds::bar::E>
     return new self::GenericMethodBounds::•<self::GenericMethodBounds::bar::E>();
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::GenericMethodBoundsDerived
     : super self::GenericMethodBounds::•()
     ;
-  method foo<generic-covariant-impl E extends core::num>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::foo::E>
+  method foo<covariant-by-class E extends core::num>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::foo::E>
     return new self::GenericMethodBounds::•<self::GenericMethodBoundsDerived::foo::E>();
   method bar<E extends (core::num) → void>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::bar::E>
     return new self::GenericMethodBounds::•<self::GenericMethodBoundsDerived::bar::E>();
diff --git a/pkg/front_end/testcases/nnbd/issue40134.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue40134.dart.weak.outline.expect
index 6c29f77..c3d583d 100644
--- a/pkg/front_end/testcases/nnbd/issue40134.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue40134.dart.weak.outline.expect
@@ -7,7 +7,7 @@
     ;
   get t() → core::Type
     ;
-  method foo<generic-covariant-impl E extends self::GenericMethodBounds::T%>() → self::GenericMethodBounds<self::GenericMethodBounds::foo::E%>
+  method foo<covariant-by-class E extends self::GenericMethodBounds::T%>() → self::GenericMethodBounds<self::GenericMethodBounds::foo::E%>
     ;
   method bar<E extends (self::GenericMethodBounds::T%) → void>() → self::GenericMethodBounds<self::GenericMethodBounds::bar::E>
     ;
@@ -15,7 +15,7 @@
 class GenericMethodBoundsDerived extends self::GenericMethodBounds<core::num> {
   synthetic constructor •() → self::GenericMethodBoundsDerived
     ;
-  method foo<generic-covariant-impl E extends core::num>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::foo::E>
+  method foo<covariant-by-class E extends core::num>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::foo::E>
     ;
   method bar<E extends (core::num) → void>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::bar::E>
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue40134.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue40134.dart.weak.transformed.expect
index c313dbe..4f69681 100644
--- a/pkg/front_end/testcases/nnbd/issue40134.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40134.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     ;
   get t() → core::Type
     return self::GenericMethodBounds::T%;
-  method foo<generic-covariant-impl E extends self::GenericMethodBounds::T%>() → self::GenericMethodBounds<self::GenericMethodBounds::foo::E%>
+  method foo<covariant-by-class E extends self::GenericMethodBounds::T%>() → self::GenericMethodBounds<self::GenericMethodBounds::foo::E%>
     return new self::GenericMethodBounds::•<self::GenericMethodBounds::foo::E%>();
   method bar<E extends (self::GenericMethodBounds::T%) → void>() → self::GenericMethodBounds<self::GenericMethodBounds::bar::E>
     return new self::GenericMethodBounds::•<self::GenericMethodBounds::bar::E>();
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::GenericMethodBoundsDerived
     : super self::GenericMethodBounds::•()
     ;
-  method foo<generic-covariant-impl E extends core::num>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::foo::E>
+  method foo<covariant-by-class E extends core::num>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::foo::E>
     return new self::GenericMethodBounds::•<self::GenericMethodBoundsDerived::foo::E>();
   method bar<E extends (core::num) → void>() → self::GenericMethodBounds<self::GenericMethodBoundsDerived::bar::E>
     return new self::GenericMethodBounds::•<self::GenericMethodBoundsDerived::bar::E>();
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.strong.expect
index bcbb04c..90f9674 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.strong.expect
@@ -9,14 +9,14 @@
   synthetic constructor •() → self::B<self::B::Y%>
     : super core::Object::•()
     ;
-  method bar(generic-covariant-impl FutureOr<self::B::Y%>y) → dynamic {}
+  method bar(covariant-by-class FutureOr<self::B::Y%>y) → dynamic {}
 }
 class A<X extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl final field self::B<self::A::X%> b = new self::B::•<self::A::X%>();
+  covariant-by-class final field self::B<self::A::X%> b = new self::B::•<self::A::X%>();
   synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  method foo([generic-covariant-impl FutureOr<self::A::X%>? x = #C1]) → dynamic {
+  method foo([covariant-by-class FutureOr<self::A::X%>? x = #C1]) → dynamic {
     if(x is{ForNonNullableByDefault} asy::Future<self::A::X%>) {
       this.{self::A::b}{self::B<self::A::X%>}.{self::B::bar}(x{asy::Future<self::A::X%>} as{ForNonNullableByDefault} FutureOr<self::A::X%>){(FutureOr<self::A::X%>) → dynamic};
     }
@@ -26,14 +26,14 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method baz<generic-covariant-impl X extends FutureOr<self::C::T%>>(generic-covariant-impl FutureOr<self::C::T%>x) → FutureOr<self::C::T%>
+  method baz<covariant-by-class X extends FutureOr<self::C::T%>>(covariant-by-class FutureOr<self::C::T%>x) → FutureOr<self::C::T%>
     return x;
 }
 class D<T extends core::Object? = dynamic> extends self::C<self::D::T%> {
   synthetic constructor •() → self::D<self::D::T%>
     : super self::C::•()
     ;
-  method baz<generic-covariant-impl X extends FutureOr<self::D::T%>>(generic-covariant-impl FutureOr<self::D::T%>x) → FutureOr<self::D::T%>
+  method baz<covariant-by-class X extends FutureOr<self::D::T%>>(covariant-by-class FutureOr<self::D::T%>x) → FutureOr<self::D::T%>
     return x;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.strong.transformed.expect
index c9d1a5a..6d7b2b4 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.strong.transformed.expect
@@ -9,14 +9,14 @@
   synthetic constructor •() → self::B<self::B::Y%>
     : super core::Object::•()
     ;
-  method bar(generic-covariant-impl FutureOr<self::B::Y%>y) → dynamic {}
+  method bar(covariant-by-class FutureOr<self::B::Y%>y) → dynamic {}
 }
 class A<X extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl final field self::B<self::A::X%> b = new self::B::•<self::A::X%>();
+  covariant-by-class final field self::B<self::A::X%> b = new self::B::•<self::A::X%>();
   synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  method foo([generic-covariant-impl FutureOr<self::A::X%>? x = #C1]) → dynamic {
+  method foo([covariant-by-class FutureOr<self::A::X%>? x = #C1]) → dynamic {
     if(x is{ForNonNullableByDefault} asy::Future<self::A::X%>) {
       this.{self::A::b}{self::B<self::A::X%>}.{self::B::bar}(x{asy::Future<self::A::X%>}){(FutureOr<self::A::X%>) → dynamic};
     }
@@ -26,14 +26,14 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method baz<generic-covariant-impl X extends FutureOr<self::C::T%>>(generic-covariant-impl FutureOr<self::C::T%>x) → FutureOr<self::C::T%>
+  method baz<covariant-by-class X extends FutureOr<self::C::T%>>(covariant-by-class FutureOr<self::C::T%>x) → FutureOr<self::C::T%>
     return x;
 }
 class D<T extends core::Object? = dynamic> extends self::C<self::D::T%> {
   synthetic constructor •() → self::D<self::D::T%>
     : super self::C::•()
     ;
-  method baz<generic-covariant-impl X extends FutureOr<self::D::T%>>(generic-covariant-impl FutureOr<self::D::T%>x) → FutureOr<self::D::T%>
+  method baz<covariant-by-class X extends FutureOr<self::D::T%>>(covariant-by-class FutureOr<self::D::T%>x) → FutureOr<self::D::T%>
     return x;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.expect
index bcbb04c..90f9674 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.expect
@@ -9,14 +9,14 @@
   synthetic constructor •() → self::B<self::B::Y%>
     : super core::Object::•()
     ;
-  method bar(generic-covariant-impl FutureOr<self::B::Y%>y) → dynamic {}
+  method bar(covariant-by-class FutureOr<self::B::Y%>y) → dynamic {}
 }
 class A<X extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl final field self::B<self::A::X%> b = new self::B::•<self::A::X%>();
+  covariant-by-class final field self::B<self::A::X%> b = new self::B::•<self::A::X%>();
   synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  method foo([generic-covariant-impl FutureOr<self::A::X%>? x = #C1]) → dynamic {
+  method foo([covariant-by-class FutureOr<self::A::X%>? x = #C1]) → dynamic {
     if(x is{ForNonNullableByDefault} asy::Future<self::A::X%>) {
       this.{self::A::b}{self::B<self::A::X%>}.{self::B::bar}(x{asy::Future<self::A::X%>} as{ForNonNullableByDefault} FutureOr<self::A::X%>){(FutureOr<self::A::X%>) → dynamic};
     }
@@ -26,14 +26,14 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method baz<generic-covariant-impl X extends FutureOr<self::C::T%>>(generic-covariant-impl FutureOr<self::C::T%>x) → FutureOr<self::C::T%>
+  method baz<covariant-by-class X extends FutureOr<self::C::T%>>(covariant-by-class FutureOr<self::C::T%>x) → FutureOr<self::C::T%>
     return x;
 }
 class D<T extends core::Object? = dynamic> extends self::C<self::D::T%> {
   synthetic constructor •() → self::D<self::D::T%>
     : super self::C::•()
     ;
-  method baz<generic-covariant-impl X extends FutureOr<self::D::T%>>(generic-covariant-impl FutureOr<self::D::T%>x) → FutureOr<self::D::T%>
+  method baz<covariant-by-class X extends FutureOr<self::D::T%>>(covariant-by-class FutureOr<self::D::T%>x) → FutureOr<self::D::T%>
     return x;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.outline.expect
index 90d1660..36bd369 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.outline.expect
@@ -7,26 +7,26 @@
 class B<Y extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::B<self::B::Y%>
     ;
-  method bar(generic-covariant-impl FutureOr<self::B::Y%>y) → dynamic
+  method bar(covariant-by-class FutureOr<self::B::Y%>y) → dynamic
     ;
 }
 class A<X extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl final field self::B<self::A::X%> b;
+  covariant-by-class final field self::B<self::A::X%> b;
   synthetic constructor •() → self::A<self::A::X%>
     ;
-  method foo([generic-covariant-impl FutureOr<self::A::X%>? x]) → dynamic
+  method foo([covariant-by-class FutureOr<self::A::X%>? x]) → dynamic
     ;
 }
 class C<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T%>
     ;
-  method baz<generic-covariant-impl X extends FutureOr<self::C::T%>>(generic-covariant-impl FutureOr<self::C::T%>x) → FutureOr<self::C::T%>
+  method baz<covariant-by-class X extends FutureOr<self::C::T%>>(covariant-by-class FutureOr<self::C::T%>x) → FutureOr<self::C::T%>
     ;
 }
 class D<T extends core::Object? = dynamic> extends self::C<self::D::T%> {
   synthetic constructor •() → self::D<self::D::T%>
     ;
-  method baz<generic-covariant-impl X extends FutureOr<self::D::T%>>(generic-covariant-impl FutureOr<self::D::T%>x) → FutureOr<self::D::T%>
+  method baz<covariant-by-class X extends FutureOr<self::D::T%>>(covariant-by-class FutureOr<self::D::T%>x) → FutureOr<self::D::T%>
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.transformed.expect
index c9d1a5a..6d7b2b4 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.transformed.expect
@@ -9,14 +9,14 @@
   synthetic constructor •() → self::B<self::B::Y%>
     : super core::Object::•()
     ;
-  method bar(generic-covariant-impl FutureOr<self::B::Y%>y) → dynamic {}
+  method bar(covariant-by-class FutureOr<self::B::Y%>y) → dynamic {}
 }
 class A<X extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl final field self::B<self::A::X%> b = new self::B::•<self::A::X%>();
+  covariant-by-class final field self::B<self::A::X%> b = new self::B::•<self::A::X%>();
   synthetic constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  method foo([generic-covariant-impl FutureOr<self::A::X%>? x = #C1]) → dynamic {
+  method foo([covariant-by-class FutureOr<self::A::X%>? x = #C1]) → dynamic {
     if(x is{ForNonNullableByDefault} asy::Future<self::A::X%>) {
       this.{self::A::b}{self::B<self::A::X%>}.{self::B::bar}(x{asy::Future<self::A::X%>}){(FutureOr<self::A::X%>) → dynamic};
     }
@@ -26,14 +26,14 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method baz<generic-covariant-impl X extends FutureOr<self::C::T%>>(generic-covariant-impl FutureOr<self::C::T%>x) → FutureOr<self::C::T%>
+  method baz<covariant-by-class X extends FutureOr<self::C::T%>>(covariant-by-class FutureOr<self::C::T%>x) → FutureOr<self::C::T%>
     return x;
 }
 class D<T extends core::Object? = dynamic> extends self::C<self::D::T%> {
   synthetic constructor •() → self::D<self::D::T%>
     : super self::C::•()
     ;
-  method baz<generic-covariant-impl X extends FutureOr<self::D::T%>>(generic-covariant-impl FutureOr<self::D::T%>x) → FutureOr<self::D::T%>
+  method baz<covariant-by-class X extends FutureOr<self::D::T%>>(covariant-by-class FutureOr<self::D::T%>x) → FutureOr<self::D::T%>
     return x;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.strong.expect
index 5a7fa88..8fd86fa 100644
--- a/pkg/front_end/testcases/nnbd/issue40601.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.strong.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
     () → dynamic result = () → dynamic => this.{self::A::bar}(value){(self::A::T%) → dynamic};
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.strong.transformed.expect
index 5a7fa88..8fd86fa 100644
--- a/pkg/front_end/testcases/nnbd/issue40601.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
     () → dynamic result = () → dynamic => this.{self::A::bar}(value){(self::A::T%) → dynamic};
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.expect
index 5a7fa88..8fd86fa 100644
--- a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
     () → dynamic result = () → dynamic => this.{self::A::bar}(value){(self::A::T%) → dynamic};
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.outline.expect
index f2c5efd..10e855d 100644
--- a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::T%>
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic
+  method bar(covariant-by-class self::A::T% value) → dynamic
     ;
   method foo() → dynamic
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.transformed.expect
index 5a7fa88..8fd86fa 100644
--- a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
     () → dynamic result = () → dynamic => this.{self::A::bar}(value){(self::A::T%) → dynamic};
diff --git a/pkg/front_end/testcases/nnbd/issue40805.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue40805.dart.strong.expect
index e876287..0eacd23 100644
--- a/pkg/front_end/testcases/nnbd/issue40805.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue40805.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  late covariant final [setter] field core::int x;
+  late covariant-by-declaration final [setter] field core::int x;
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant core::num value) → void {
+  set x(covariant-by-declaration core::num value) → void {
     super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue40805.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue40805.dart.strong.transformed.expect
index e876287..0eacd23 100644
--- a/pkg/front_end/testcases/nnbd/issue40805.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40805.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  late covariant final [setter] field core::int x;
+  late covariant-by-declaration final [setter] field core::int x;
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant core::num value) → void {
+  set x(covariant-by-declaration core::num value) → void {
     super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue40805.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue40805.dart.weak.expect
index e876287..0eacd23 100644
--- a/pkg/front_end/testcases/nnbd/issue40805.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue40805.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  late covariant final [setter] field core::int x;
+  late covariant-by-declaration final [setter] field core::int x;
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant core::num value) → void {
+  set x(covariant-by-declaration core::num value) → void {
     super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue40805.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue40805.dart.weak.outline.expect
index 260c576..7b1ec1d 100644
--- a/pkg/front_end/testcases/nnbd/issue40805.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue40805.dart.weak.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  late covariant final [setter] field core::int x;
+  late covariant-by-declaration final [setter] field core::int x;
   synthetic constructor •() → self::C
     ;
 }
 class D extends self::C {
   synthetic constructor •() → self::D
     ;
-  set x(covariant core::num value) → void
+  set x(covariant-by-declaration core::num value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd/issue40805.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue40805.dart.weak.transformed.expect
index e876287..0eacd23 100644
--- a/pkg/front_end/testcases/nnbd/issue40805.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40805.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  late covariant final [setter] field core::int x;
+  late covariant-by-declaration final [setter] field core::int x;
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
@@ -12,7 +12,7 @@
   synthetic constructor •() → self::D
     : super self::C::•()
     ;
-  set x(covariant core::num value) → void {
+  set x(covariant-by-declaration core::num value) → void {
     super.{self::C::x} = value.{core::num::toInt}(){() → core::int};
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
index 2f21afd..d7f0e7d 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
@@ -23,8 +23,8 @@
 typedef G<invariant T extends core::Object? = dynamic> = <S extends T% = dynamic>(S%) → dynamic;
 typedef H<invariant T extends core::Object? = dynamic> = <S extends FutureOr<T%> = dynamic>(S%, FutureOr<T%>) → dynamic;
 class C<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field <S extends self::C::T% = dynamic>(S%) → dynamic field1;
-  generic-covariant-impl field <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → dynamic field1;
+  covariant-by-class field <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2;
   constructor •(<S extends self::C::T% = dynamic>(S%) → dynamic field1, <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2) → self::C<self::C::T%>
     : self::C::field1 = field1, self::C::field2 = field2, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
index 6a230ed..5a264b1 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
@@ -24,8 +24,8 @@
 typedef G<invariant T extends core::Object? = dynamic> = <S extends T% = dynamic>(S%) → dynamic;
 typedef H<invariant T extends core::Object? = dynamic> = <S extends FutureOr<T%> = dynamic>(S%, FutureOr<T%>) → dynamic;
 class C<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field <S extends self::C::T% = dynamic>(S%) → dynamic field1;
-  generic-covariant-impl field <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → dynamic field1;
+  covariant-by-class field <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2;
   constructor •(<S extends self::C::T% = dynamic>(S%) → dynamic field1, <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2) → self::C<self::C::T%>
     : self::C::field1 = field1, self::C::field2 = field2, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
index 2f21afd..d7f0e7d 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
@@ -23,8 +23,8 @@
 typedef G<invariant T extends core::Object? = dynamic> = <S extends T% = dynamic>(S%) → dynamic;
 typedef H<invariant T extends core::Object? = dynamic> = <S extends FutureOr<T%> = dynamic>(S%, FutureOr<T%>) → dynamic;
 class C<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field <S extends self::C::T% = dynamic>(S%) → dynamic field1;
-  generic-covariant-impl field <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → dynamic field1;
+  covariant-by-class field <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2;
   constructor •(<S extends self::C::T% = dynamic>(S%) → dynamic field1, <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2) → self::C<self::C::T%>
     : self::C::field1 = field1, self::C::field2 = field2, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.outline.expect
index 97c9f60..65855eb 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.outline.expect
@@ -7,8 +7,8 @@
 typedef G<invariant T extends core::Object? = dynamic> = <S extends T% = dynamic>(S%) → dynamic;
 typedef H<invariant T extends core::Object? = dynamic> = <S extends FutureOr<T%> = dynamic>(S%, FutureOr<T%>) → dynamic;
 class C<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field <S extends self::C::T% = dynamic>(S%) → dynamic field1;
-  generic-covariant-impl field <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → dynamic field1;
+  covariant-by-class field <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2;
   constructor •(<S extends self::C::T% = dynamic>(S%) → dynamic field1, <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2) → self::C<self::C::T%>
     ;
 }
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
index 6a230ed..5a264b1 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
@@ -24,8 +24,8 @@
 typedef G<invariant T extends core::Object? = dynamic> = <S extends T% = dynamic>(S%) → dynamic;
 typedef H<invariant T extends core::Object? = dynamic> = <S extends FutureOr<T%> = dynamic>(S%, FutureOr<T%>) → dynamic;
 class C<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field <S extends self::C::T% = dynamic>(S%) → dynamic field1;
-  generic-covariant-impl field <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2;
+  covariant-by-class field <S extends self::C::T% = dynamic>(S%) → dynamic field1;
+  covariant-by-class field <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2;
   constructor •(<S extends self::C::T% = dynamic>(S%) → dynamic field1, <S extends FutureOr<self::C::T%> = dynamic>(S%, FutureOr<self::C::T%>) → dynamic field2) → self::C<self::C::T%>
     : self::C::field1 = field1, self::C::field2 = field2, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
index 2538d7e..8563b46 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
@@ -30,7 +30,7 @@
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
index 7003dff..b810299 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, core::List::unmodifiable<core::Type*>(core::_GrowableList::_literal1<core::Type*>(self::Divergent::then::R%)), core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onValue)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
index 2538d7e..8563b46 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
@@ -30,7 +30,7 @@
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
index 9c67937..08204a3 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
@@ -14,7 +14,7 @@
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#catchError, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[onError]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#test: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#whenComplete, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[action]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#timeout, 0, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[timeLimit]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onTimeout: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError}) → asy::Future<self::Divergent::then::R%>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#then, 0, core::List::unmodifiable<core::Type*>(<core::Type*>[self::Divergent::then::R%]), core::List::unmodifiable<dynamic>(<dynamic>[onValue]), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#onError: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
index 7003dff..b810299 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C6))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
+  no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {covariant-by-class () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C8: onTimeout}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
   no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
     return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C9, 0, core::List::unmodifiable<core::Type*>(core::_GrowableList::_literal1<core::Type*>(self::Divergent::then::R%)), core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onValue)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C10: onError}))){(core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
diff --git a/pkg/front_end/testcases/nnbd/issue43455.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43455.dart.strong.expect
index e41afed..2815e55 100644
--- a/pkg/front_end/testcases/nnbd/issue43455.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43455.dart.strong.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  method test(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y? y) → dynamic {
+  method test(covariant-by-class self::C::X% x, covariant-by-class self::C::Y? y) → dynamic {
     core::Set<core::Object?> v = block {
       final core::Set<core::Object?> #t1 = col::LinkedHashSet::•<core::Object?>();
       #t1.{core::Set::add}{Invariant}(x){(core::Object?) → core::bool};
diff --git a/pkg/front_end/testcases/nnbd/issue43455.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43455.dart.strong.transformed.expect
index ba81fbc..bccc51e 100644
--- a/pkg/front_end/testcases/nnbd/issue43455.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43455.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  method test(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y? y) → dynamic {
+  method test(covariant-by-class self::C::X% x, covariant-by-class self::C::Y? y) → dynamic {
     core::Set<core::Object?> v = block {
       final core::Set<core::Object?> #t1 = new col::_CompactLinkedHashSet::•<core::Object?>();
       #t1.{core::Set::add}{Invariant}(x){(core::Object?) → core::bool};
diff --git a/pkg/front_end/testcases/nnbd/issue43455.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43455.dart.weak.expect
index e41afed..2815e55 100644
--- a/pkg/front_end/testcases/nnbd/issue43455.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43455.dart.weak.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  method test(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y? y) → dynamic {
+  method test(covariant-by-class self::C::X% x, covariant-by-class self::C::Y? y) → dynamic {
     core::Set<core::Object?> v = block {
       final core::Set<core::Object?> #t1 = col::LinkedHashSet::•<core::Object?>();
       #t1.{core::Set::add}{Invariant}(x){(core::Object?) → core::bool};
diff --git a/pkg/front_end/testcases/nnbd/issue43455.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43455.dart.weak.outline.expect
index dfdf23f..83e321d 100644
--- a/pkg/front_end/testcases/nnbd/issue43455.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43455.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class C<X extends core::Object?, Y extends core::Object> extends core::Object {
   synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     ;
-  method test(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y? y) → dynamic
+  method test(covariant-by-class self::C::X% x, covariant-by-class self::C::Y? y) → dynamic
     ;
 }
 static method assertRightSubtype(dynamic x) → dynamic
diff --git a/pkg/front_end/testcases/nnbd/issue43455.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43455.dart.weak.transformed.expect
index ba81fbc..bccc51e 100644
--- a/pkg/front_end/testcases/nnbd/issue43455.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43455.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::C<self::C::X%, self::C::Y>
     : super core::Object::•()
     ;
-  method test(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y? y) → dynamic {
+  method test(covariant-by-class self::C::X% x, covariant-by-class self::C::Y? y) → dynamic {
     core::Set<core::Object?> v = block {
       final core::Set<core::Object?> #t1 = new col::_CompactLinkedHashSet::•<core::Object?>();
       #t1.{core::Set::add}{Invariant}(x){(core::Object?) → core::bool};
diff --git a/pkg/front_end/testcases/nnbd/issue43536.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43536.dart.strong.expect
index acf5d78..fc2321b 100644
--- a/pkg/front_end/testcases/nnbd/issue43536.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43536.dart.strong.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method foo<generic-covariant-impl E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
+  method foo<covariant-by-class E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
     core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list){(core::List<self::C::foo::E%>) → core::List<self::C::foo::E%>};
   }
-  method method<generic-covariant-impl F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
+  method method<covariant-by-class F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
     return list;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43536.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43536.dart.strong.transformed.expect
index acf5d78..fc2321b 100644
--- a/pkg/front_end/testcases/nnbd/issue43536.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43536.dart.strong.transformed.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method foo<generic-covariant-impl E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
+  method foo<covariant-by-class E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
     core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list){(core::List<self::C::foo::E%>) → core::List<self::C::foo::E%>};
   }
-  method method<generic-covariant-impl F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
+  method method<covariant-by-class F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
     return list;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43536.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43536.dart.weak.expect
index acf5d78..fc2321b 100644
--- a/pkg/front_end/testcases/nnbd/issue43536.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43536.dart.weak.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method foo<generic-covariant-impl E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
+  method foo<covariant-by-class E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
     core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list){(core::List<self::C::foo::E%>) → core::List<self::C::foo::E%>};
   }
-  method method<generic-covariant-impl F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
+  method method<covariant-by-class F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
     return list;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43536.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43536.dart.weak.outline.expect
index db3198e..206da0f 100644
--- a/pkg/front_end/testcases/nnbd/issue43536.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43536.dart.weak.outline.expect
@@ -5,9 +5,9 @@
 class C<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T%>
     ;
-  method foo<generic-covariant-impl E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic
+  method foo<covariant-by-class E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic
     ;
-  method method<generic-covariant-impl F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
+  method method<covariant-by-class F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd/issue43536.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43536.dart.weak.transformed.expect
index acf5d78..fc2321b 100644
--- a/pkg/front_end/testcases/nnbd/issue43536.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43536.dart.weak.transformed.expect
@@ -6,10 +6,10 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method foo<generic-covariant-impl E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
+  method foo<covariant-by-class E extends self::C::T%>(core::List<self::C::foo::E%> list) → dynamic {
     core::List<self::C::foo::E%> variable = this.{self::C::method}<self::C::foo::E%>(list){(core::List<self::C::foo::E%>) → core::List<self::C::foo::E%>};
   }
-  method method<generic-covariant-impl F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
+  method method<covariant-by-class F extends self::C::T%>(core::List<self::C::method::F%> list) → core::List<self::C::method::F%>
     return list;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.expect
index afe7f3b..2ed0f16 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.expect
@@ -11,11 +11,11 @@
 import "dart:core" as core;
 
 class C<X extends self::C<self::C::X%, self::C::X%>? = self::C<dynamic, dynamic>?, Y extends self::C<self::C::Y%, self::C::Y%>? = self::C<dynamic, dynamic>?> extends core::Object {
-  generic-covariant-impl field self::C::X% x;
+  covariant-by-class field self::C::X% x;
   constructor •(self::C::X% x) → self::C<self::C::X%, self::C::Y%>
     : self::C::x = x, super core::Object::•()
     ;
-  method m(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → core::Object {
+  method m(covariant-by-class self::C::X% x, covariant-by-class self::C::Y% y) → core::Object {
     self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
     if(z == null)
       throw 0;
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.transformed.expect
index a5b697a..74a0b64 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.strong.transformed.expect
@@ -11,11 +11,11 @@
 import "dart:core" as core;
 
 class C<X extends self::C<self::C::X%, self::C::X%>? = self::C<dynamic, dynamic>?, Y extends self::C<self::C::Y%, self::C::Y%>? = self::C<dynamic, dynamic>?> extends core::Object {
-  generic-covariant-impl field self::C::X% x;
+  covariant-by-class field self::C::X% x;
   constructor •(self::C::X% x) → self::C<self::C::X%, self::C::Y%>
     : self::C::x = x, super core::Object::•()
     ;
-  method m(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → core::Object {
+  method m(covariant-by-class self::C::X% x, covariant-by-class self::C::Y% y) → core::Object {
     self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
     if(z == null)
       throw 0;
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.expect
index afe7f3b..2ed0f16 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.expect
@@ -11,11 +11,11 @@
 import "dart:core" as core;
 
 class C<X extends self::C<self::C::X%, self::C::X%>? = self::C<dynamic, dynamic>?, Y extends self::C<self::C::Y%, self::C::Y%>? = self::C<dynamic, dynamic>?> extends core::Object {
-  generic-covariant-impl field self::C::X% x;
+  covariant-by-class field self::C::X% x;
   constructor •(self::C::X% x) → self::C<self::C::X%, self::C::Y%>
     : self::C::x = x, super core::Object::•()
     ;
-  method m(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → core::Object {
+  method m(covariant-by-class self::C::X% x, covariant-by-class self::C::Y% y) → core::Object {
     self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
     if(z == null)
       throw 0;
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.outline.expect
index be98ef0..c78b89c 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.outline.expect
@@ -3,10 +3,10 @@
 import "dart:core" as core;
 
 class C<X extends self::C<self::C::X%, self::C::X%>? = self::C<dynamic, dynamic>?, Y extends self::C<self::C::Y%, self::C::Y%>? = self::C<dynamic, dynamic>?> extends core::Object {
-  generic-covariant-impl field self::C::X% x;
+  covariant-by-class field self::C::X% x;
   constructor •(self::C::X% x) → self::C<self::C::X%, self::C::Y%>
     ;
-  method m(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → core::Object
+  method m(covariant-by-class self::C::X% x, covariant-by-class self::C::Y% y) → core::Object
     ;
 }
 static field core::bool b;
diff --git a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.transformed.expect
index e53c5e2..cbf66ab 100644
--- a/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716a.dart.weak.transformed.expect
@@ -11,11 +11,11 @@
 import "dart:core" as core;
 
 class C<X extends self::C<self::C::X%, self::C::X%>? = self::C<dynamic, dynamic>?, Y extends self::C<self::C::Y%, self::C::Y%>? = self::C<dynamic, dynamic>?> extends core::Object {
-  generic-covariant-impl field self::C::X% x;
+  covariant-by-class field self::C::X% x;
   constructor •(self::C::X% x) → self::C<self::C::X%, self::C::Y%>
     : self::C::x = x, super core::Object::•()
     ;
-  method m(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → core::Object {
+  method m(covariant-by-class self::C::X% x, covariant-by-class self::C::Y% y) → core::Object {
     self::C<core::Object?, core::Object?>? z = self::b ?{self::C<core::Object?, core::Object?>?} x : y;
     if(z == null)
       throw 0;
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.expect
index 78b0b34..98741d8 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class C<X extends (self::C::X%) →? void = (Never) →? void> extends core::Object {
-  generic-covariant-impl field self::C::X% x;
+  covariant-by-class field self::C::X% x;
   constructor •(self::C::X% x) → self::C<self::C::X%>
     : self::C::x = x, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.transformed.expect
index 78b0b34..98741d8 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class C<X extends (self::C::X%) →? void = (Never) →? void> extends core::Object {
-  generic-covariant-impl field self::C::X% x;
+  covariant-by-class field self::C::X% x;
   constructor •(self::C::X% x) → self::C<self::C::X%>
     : self::C::x = x, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.expect
index 78b0b34..98741d8 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class C<X extends (self::C::X%) →? void = (Never) →? void> extends core::Object {
-  generic-covariant-impl field self::C::X% x;
+  covariant-by-class field self::C::X% x;
   constructor •(self::C::X% x) → self::C<self::C::X%>
     : self::C::x = x, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.outline.expect
index 3b44433..fbb7cb5 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<X extends (self::C::X%) →? void = (Never) →? void> extends core::Object {
-  generic-covariant-impl field self::C::X% x;
+  covariant-by-class field self::C::X% x;
   constructor •(self::C::X% x) → self::C<self::C::X%>
     ;
   method m() → void
diff --git a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.transformed.expect
index 78b0b34..98741d8 100644
--- a/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue43716b.dart.weak.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 class C<X extends (self::C::X%) →? void = (Never) →? void> extends core::Object {
-  generic-covariant-impl field self::C::X% x;
+  covariant-by-class field self::C::X% x;
   constructor •(self::C::X% x) → self::C<self::C::X%>
     : self::C::x = x, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.expect b/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.expect
index 9ffcc4a..aa91968 100644
--- a/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Foo<self::Foo::S>
     : super core::Object::•()
     ;
-  method test1(generic-covariant-impl self::Foo::S x) → void {
+  method test1(covariant-by-class self::Foo::S x) → void {
     (self::Foo::S) → self::Foo::S f = self::Test|get#test<self::Foo::S>(x);
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.transformed.expect
index 9ffcc4a..aa91968 100644
--- a/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/language_issue1182.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Foo<self::Foo::S>
     : super core::Object::•()
     ;
-  method test1(generic-covariant-impl self::Foo::S x) → void {
+  method test1(covariant-by-class self::Foo::S x) → void {
     (self::Foo::S) → self::Foo::S f = self::Test|get#test<self::Foo::S>(x);
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.expect b/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.expect
index 9ffcc4a..aa91968 100644
--- a/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Foo<self::Foo::S>
     : super core::Object::•()
     ;
-  method test1(generic-covariant-impl self::Foo::S x) → void {
+  method test1(covariant-by-class self::Foo::S x) → void {
     (self::Foo::S) → self::Foo::S f = self::Test|get#test<self::Foo::S>(x);
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.outline.expect
index 1df50f2..1431569 100644
--- a/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class Foo<S extends core::num> extends core::Object {
   synthetic constructor •() → self::Foo<self::Foo::S>
     ;
-  method test1(generic-covariant-impl self::Foo::S x) → void
+  method test1(covariant-by-class self::Foo::S x) → void
     ;
 }
 extension Test<T extends core::Object? = dynamic> on T% {
diff --git a/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.transformed.expect
index 9ffcc4a..aa91968 100644
--- a/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/language_issue1182.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Foo<self::Foo::S>
     : super core::Object::•()
     ;
-  method test1(generic-covariant-impl self::Foo::S x) → void {
+  method test1(covariant-by-class self::Foo::S x) → void {
     (self::Foo::S) → self::Foo::S f = self::Test|get#test<self::Foo::S>(x);
   }
 }
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.expect
index 19a1ec4..ecbc399 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.expect
@@ -70,8 +70,8 @@
     ;
 }
 class B<X extends core::Object?, Y extends core::Object> extends core::Object {
-  generic-covariant-impl field self::B::X% fieldOfB;
-  generic-covariant-impl field self::B::Y fieldOfB2;
+  covariant-by-class field self::B::X% fieldOfB;
+  covariant-by-class field self::B::Y fieldOfB2;
   constructor foo() → self::B<self::B::X%, self::B::Y>
     : self::B::fieldOfB2 = null, self::B::fieldOfB = null, super core::Object::•()
     ;
@@ -84,22 +84,22 @@
   field core::int fieldOfM = null;
 }
 abstract class N<X extends core::Object?, Y extends core::Object> extends core::Object /*isMixinDeclaration*/  {
-  generic-covariant-impl field self::N::X% fieldOfN = null;
-  generic-covariant-impl field self::N::Y fieldOfN2 = null;
+  covariant-by-class field self::N::X% fieldOfN = null;
+  covariant-by-class field self::N::Y fieldOfN2 = null;
 }
 class C<X extends core::Object?, Y extends core::Object> extends core::Object {
   static field core::int? staticFieldOfX = null;
   static field core::int staticFieldOfXInitialized = 42;
-  generic-covariant-impl field self::C::X? fieldOfX = null;
+  covariant-by-class field self::C::X? fieldOfX = null;
   field core::int? fieldOfX2 = null;
   field dynamic fieldOfX3 = null;
   field Null fieldOfX4 = null;
   field () →? core::int fieldOfX5 = null;
-  generic-covariant-impl field self::C::Y? fieldOfX6 = null;
+  covariant-by-class field self::C::Y? fieldOfX6 = null;
   late static field core::int lateStaticFieldOfC;
   late field core::int fieldOfC7;
-  late generic-covariant-impl field self::C::X% fieldOfC8;
-  late generic-covariant-impl field self::C::Y fieldOfC9;
+  late covariant-by-class field self::C::X% fieldOfC8;
+  late covariant-by-class field self::C::Y fieldOfC9;
   field core::int fieldOfC10;
   constructor foo(core::int fieldOfC10) → self::C<self::C::X%, self::C::Y>
     : self::C::fieldOfC10 = fieldOfC10, super core::Object::•()
@@ -111,16 +111,16 @@
 abstract class L<X extends core::Object?, Y extends core::Object> extends core::Object /*isMixinDeclaration*/  {
   static field core::int? staticFieldOfL = null;
   static field core::int staticFieldOfLInitialized = 42;
-  generic-covariant-impl field self::L::X? fieldOfL = null;
+  covariant-by-class field self::L::X? fieldOfL = null;
   field core::int? fieldOfL2 = null;
   field dynamic fieldOfL3 = null;
   field Null fieldOfL4 = null;
   field () →? core::int fieldOfL5 = null;
-  generic-covariant-impl field self::L::Y? fieldOfL6 = null;
+  covariant-by-class field self::L::Y? fieldOfL6 = null;
   late static field core::int lateStaticFieldOfM;
   late field core::int fieldOfM7;
-  late generic-covariant-impl field self::L::X% fieldOfM8;
-  late generic-covariant-impl field self::L::Y fieldOfM9;
+  late covariant-by-class field self::L::X% fieldOfM8;
+  late covariant-by-class field self::L::Y fieldOfM9;
 }
 extension P on self::Foo {
   static field staticFieldOfE = self::P|staticFieldOfE;
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.transformed.expect
index 19a1ec4..ecbc399 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.strong.transformed.expect
@@ -70,8 +70,8 @@
     ;
 }
 class B<X extends core::Object?, Y extends core::Object> extends core::Object {
-  generic-covariant-impl field self::B::X% fieldOfB;
-  generic-covariant-impl field self::B::Y fieldOfB2;
+  covariant-by-class field self::B::X% fieldOfB;
+  covariant-by-class field self::B::Y fieldOfB2;
   constructor foo() → self::B<self::B::X%, self::B::Y>
     : self::B::fieldOfB2 = null, self::B::fieldOfB = null, super core::Object::•()
     ;
@@ -84,22 +84,22 @@
   field core::int fieldOfM = null;
 }
 abstract class N<X extends core::Object?, Y extends core::Object> extends core::Object /*isMixinDeclaration*/  {
-  generic-covariant-impl field self::N::X% fieldOfN = null;
-  generic-covariant-impl field self::N::Y fieldOfN2 = null;
+  covariant-by-class field self::N::X% fieldOfN = null;
+  covariant-by-class field self::N::Y fieldOfN2 = null;
 }
 class C<X extends core::Object?, Y extends core::Object> extends core::Object {
   static field core::int? staticFieldOfX = null;
   static field core::int staticFieldOfXInitialized = 42;
-  generic-covariant-impl field self::C::X? fieldOfX = null;
+  covariant-by-class field self::C::X? fieldOfX = null;
   field core::int? fieldOfX2 = null;
   field dynamic fieldOfX3 = null;
   field Null fieldOfX4 = null;
   field () →? core::int fieldOfX5 = null;
-  generic-covariant-impl field self::C::Y? fieldOfX6 = null;
+  covariant-by-class field self::C::Y? fieldOfX6 = null;
   late static field core::int lateStaticFieldOfC;
   late field core::int fieldOfC7;
-  late generic-covariant-impl field self::C::X% fieldOfC8;
-  late generic-covariant-impl field self::C::Y fieldOfC9;
+  late covariant-by-class field self::C::X% fieldOfC8;
+  late covariant-by-class field self::C::Y fieldOfC9;
   field core::int fieldOfC10;
   constructor foo(core::int fieldOfC10) → self::C<self::C::X%, self::C::Y>
     : self::C::fieldOfC10 = fieldOfC10, super core::Object::•()
@@ -111,16 +111,16 @@
 abstract class L<X extends core::Object?, Y extends core::Object> extends core::Object /*isMixinDeclaration*/  {
   static field core::int? staticFieldOfL = null;
   static field core::int staticFieldOfLInitialized = 42;
-  generic-covariant-impl field self::L::X? fieldOfL = null;
+  covariant-by-class field self::L::X? fieldOfL = null;
   field core::int? fieldOfL2 = null;
   field dynamic fieldOfL3 = null;
   field Null fieldOfL4 = null;
   field () →? core::int fieldOfL5 = null;
-  generic-covariant-impl field self::L::Y? fieldOfL6 = null;
+  covariant-by-class field self::L::Y? fieldOfL6 = null;
   late static field core::int lateStaticFieldOfM;
   late field core::int fieldOfM7;
-  late generic-covariant-impl field self::L::X% fieldOfM8;
-  late generic-covariant-impl field self::L::Y fieldOfM9;
+  late covariant-by-class field self::L::X% fieldOfM8;
+  late covariant-by-class field self::L::Y fieldOfM9;
 }
 extension P on self::Foo {
   static field staticFieldOfE = self::P|staticFieldOfE;
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.expect
index 19a1ec4..ecbc399 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.expect
@@ -70,8 +70,8 @@
     ;
 }
 class B<X extends core::Object?, Y extends core::Object> extends core::Object {
-  generic-covariant-impl field self::B::X% fieldOfB;
-  generic-covariant-impl field self::B::Y fieldOfB2;
+  covariant-by-class field self::B::X% fieldOfB;
+  covariant-by-class field self::B::Y fieldOfB2;
   constructor foo() → self::B<self::B::X%, self::B::Y>
     : self::B::fieldOfB2 = null, self::B::fieldOfB = null, super core::Object::•()
     ;
@@ -84,22 +84,22 @@
   field core::int fieldOfM = null;
 }
 abstract class N<X extends core::Object?, Y extends core::Object> extends core::Object /*isMixinDeclaration*/  {
-  generic-covariant-impl field self::N::X% fieldOfN = null;
-  generic-covariant-impl field self::N::Y fieldOfN2 = null;
+  covariant-by-class field self::N::X% fieldOfN = null;
+  covariant-by-class field self::N::Y fieldOfN2 = null;
 }
 class C<X extends core::Object?, Y extends core::Object> extends core::Object {
   static field core::int? staticFieldOfX = null;
   static field core::int staticFieldOfXInitialized = 42;
-  generic-covariant-impl field self::C::X? fieldOfX = null;
+  covariant-by-class field self::C::X? fieldOfX = null;
   field core::int? fieldOfX2 = null;
   field dynamic fieldOfX3 = null;
   field Null fieldOfX4 = null;
   field () →? core::int fieldOfX5 = null;
-  generic-covariant-impl field self::C::Y? fieldOfX6 = null;
+  covariant-by-class field self::C::Y? fieldOfX6 = null;
   late static field core::int lateStaticFieldOfC;
   late field core::int fieldOfC7;
-  late generic-covariant-impl field self::C::X% fieldOfC8;
-  late generic-covariant-impl field self::C::Y fieldOfC9;
+  late covariant-by-class field self::C::X% fieldOfC8;
+  late covariant-by-class field self::C::Y fieldOfC9;
   field core::int fieldOfC10;
   constructor foo(core::int fieldOfC10) → self::C<self::C::X%, self::C::Y>
     : self::C::fieldOfC10 = fieldOfC10, super core::Object::•()
@@ -111,16 +111,16 @@
 abstract class L<X extends core::Object?, Y extends core::Object> extends core::Object /*isMixinDeclaration*/  {
   static field core::int? staticFieldOfL = null;
   static field core::int staticFieldOfLInitialized = 42;
-  generic-covariant-impl field self::L::X? fieldOfL = null;
+  covariant-by-class field self::L::X? fieldOfL = null;
   field core::int? fieldOfL2 = null;
   field dynamic fieldOfL3 = null;
   field Null fieldOfL4 = null;
   field () →? core::int fieldOfL5 = null;
-  generic-covariant-impl field self::L::Y? fieldOfL6 = null;
+  covariant-by-class field self::L::Y? fieldOfL6 = null;
   late static field core::int lateStaticFieldOfM;
   late field core::int fieldOfM7;
-  late generic-covariant-impl field self::L::X% fieldOfM8;
-  late generic-covariant-impl field self::L::Y fieldOfM9;
+  late covariant-by-class field self::L::X% fieldOfM8;
+  late covariant-by-class field self::L::Y fieldOfM9;
 }
 extension P on self::Foo {
   static field staticFieldOfE = self::P|staticFieldOfE;
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.outline.expect
index 750e00652..d840616 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.outline.expect
@@ -34,8 +34,8 @@
     ;
 }
 class B<X extends core::Object?, Y extends core::Object> extends core::Object {
-  generic-covariant-impl field self::B::X% fieldOfB;
-  generic-covariant-impl field self::B::Y fieldOfB2;
+  covariant-by-class field self::B::X% fieldOfB;
+  covariant-by-class field self::B::Y fieldOfB2;
   constructor foo() → self::B<self::B::X%, self::B::Y>
     ;
   constructor bar(self::B::X% fieldOfB, self::B::Y fieldOfB2) → self::B<self::B::X%, self::B::Y>
@@ -46,22 +46,22 @@
   field core::int fieldOfM;
 }
 abstract class N<X extends core::Object?, Y extends core::Object> extends core::Object /*isMixinDeclaration*/  {
-  generic-covariant-impl field self::N::X% fieldOfN;
-  generic-covariant-impl field self::N::Y fieldOfN2;
+  covariant-by-class field self::N::X% fieldOfN;
+  covariant-by-class field self::N::Y fieldOfN2;
 }
 class C<X extends core::Object?, Y extends core::Object> extends core::Object {
   static field core::int? staticFieldOfX;
   static field core::int staticFieldOfXInitialized;
-  generic-covariant-impl field self::C::X? fieldOfX;
+  covariant-by-class field self::C::X? fieldOfX;
   field core::int? fieldOfX2;
   field dynamic fieldOfX3;
   field Null fieldOfX4;
   field () →? core::int fieldOfX5;
-  generic-covariant-impl field self::C::Y? fieldOfX6;
+  covariant-by-class field self::C::Y? fieldOfX6;
   late static field core::int lateStaticFieldOfC;
   late field core::int fieldOfC7;
-  late generic-covariant-impl field self::C::X% fieldOfC8;
-  late generic-covariant-impl field self::C::Y fieldOfC9;
+  late covariant-by-class field self::C::X% fieldOfC8;
+  late covariant-by-class field self::C::Y fieldOfC9;
   field core::int fieldOfC10;
   constructor foo(core::int fieldOfC10) → self::C<self::C::X%, self::C::Y>
     ;
@@ -71,16 +71,16 @@
 abstract class L<X extends core::Object?, Y extends core::Object> extends core::Object /*isMixinDeclaration*/  {
   static field core::int? staticFieldOfL;
   static field core::int staticFieldOfLInitialized;
-  generic-covariant-impl field self::L::X? fieldOfL;
+  covariant-by-class field self::L::X? fieldOfL;
   field core::int? fieldOfL2;
   field dynamic fieldOfL3;
   field Null fieldOfL4;
   field () →? core::int fieldOfL5;
-  generic-covariant-impl field self::L::Y? fieldOfL6;
+  covariant-by-class field self::L::Y? fieldOfL6;
   late static field core::int lateStaticFieldOfM;
   late field core::int fieldOfM7;
-  late generic-covariant-impl field self::L::X% fieldOfM8;
-  late generic-covariant-impl field self::L::Y fieldOfM9;
+  late covariant-by-class field self::L::X% fieldOfM8;
+  late covariant-by-class field self::L::Y fieldOfM9;
 }
 extension P on self::Foo {
   static field staticFieldOfE = self::P|staticFieldOfE;
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.transformed.expect
index 19a1ec4..ecbc399 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.transformed.expect
@@ -70,8 +70,8 @@
     ;
 }
 class B<X extends core::Object?, Y extends core::Object> extends core::Object {
-  generic-covariant-impl field self::B::X% fieldOfB;
-  generic-covariant-impl field self::B::Y fieldOfB2;
+  covariant-by-class field self::B::X% fieldOfB;
+  covariant-by-class field self::B::Y fieldOfB2;
   constructor foo() → self::B<self::B::X%, self::B::Y>
     : self::B::fieldOfB2 = null, self::B::fieldOfB = null, super core::Object::•()
     ;
@@ -84,22 +84,22 @@
   field core::int fieldOfM = null;
 }
 abstract class N<X extends core::Object?, Y extends core::Object> extends core::Object /*isMixinDeclaration*/  {
-  generic-covariant-impl field self::N::X% fieldOfN = null;
-  generic-covariant-impl field self::N::Y fieldOfN2 = null;
+  covariant-by-class field self::N::X% fieldOfN = null;
+  covariant-by-class field self::N::Y fieldOfN2 = null;
 }
 class C<X extends core::Object?, Y extends core::Object> extends core::Object {
   static field core::int? staticFieldOfX = null;
   static field core::int staticFieldOfXInitialized = 42;
-  generic-covariant-impl field self::C::X? fieldOfX = null;
+  covariant-by-class field self::C::X? fieldOfX = null;
   field core::int? fieldOfX2 = null;
   field dynamic fieldOfX3 = null;
   field Null fieldOfX4 = null;
   field () →? core::int fieldOfX5 = null;
-  generic-covariant-impl field self::C::Y? fieldOfX6 = null;
+  covariant-by-class field self::C::Y? fieldOfX6 = null;
   late static field core::int lateStaticFieldOfC;
   late field core::int fieldOfC7;
-  late generic-covariant-impl field self::C::X% fieldOfC8;
-  late generic-covariant-impl field self::C::Y fieldOfC9;
+  late covariant-by-class field self::C::X% fieldOfC8;
+  late covariant-by-class field self::C::Y fieldOfC9;
   field core::int fieldOfC10;
   constructor foo(core::int fieldOfC10) → self::C<self::C::X%, self::C::Y>
     : self::C::fieldOfC10 = fieldOfC10, super core::Object::•()
@@ -111,16 +111,16 @@
 abstract class L<X extends core::Object?, Y extends core::Object> extends core::Object /*isMixinDeclaration*/  {
   static field core::int? staticFieldOfL = null;
   static field core::int staticFieldOfLInitialized = 42;
-  generic-covariant-impl field self::L::X? fieldOfL = null;
+  covariant-by-class field self::L::X? fieldOfL = null;
   field core::int? fieldOfL2 = null;
   field dynamic fieldOfL3 = null;
   field Null fieldOfL4 = null;
   field () →? core::int fieldOfL5 = null;
-  generic-covariant-impl field self::L::Y? fieldOfL6 = null;
+  covariant-by-class field self::L::Y? fieldOfL6 = null;
   late static field core::int lateStaticFieldOfM;
   late field core::int fieldOfM7;
-  late generic-covariant-impl field self::L::X% fieldOfM8;
-  late generic-covariant-impl field self::L::Y fieldOfM9;
+  late covariant-by-class field self::L::X% fieldOfM8;
+  late covariant-by-class field self::L::Y fieldOfM9;
 }
 extension P on self::Foo {
   static field staticFieldOfE = self::P|staticFieldOfE;
diff --git a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.expect b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.expect
index 9cb92de..682b905 100644
--- a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method barInt(core::int value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
diff --git a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.transformed.expect
index 9cb92de..682b905 100644
--- a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method barInt(core::int value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
diff --git a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.expect b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.expect
index 9cb92de..682b905 100644
--- a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method barInt(core::int value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
diff --git a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.outline.expect
index ec447de..c018408 100644
--- a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.outline.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A<self::A::T%>
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic
+  method bar(covariant-by-class self::A::T% value) → dynamic
     ;
   method barInt(core::int value) → dynamic
     ;
diff --git a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.transformed.expect
index 9cb92de..682b905 100644
--- a/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/not_definitely_unassigned_late_local_variables.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
     : super core::Object::•()
     ;
   abstract method baz() → self::A::T%;
-  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method bar(covariant-by-class self::A::T% value) → dynamic {}
   method barInt(core::int value) → dynamic {}
   method foo() → dynamic {
     late self::A::T% value;
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.expect
index f2c396a..59d5c75 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.expect
@@ -62,9 +62,9 @@
     : super core::Object::•()
     ;
   abstract get runtimeType() → self::CustomType;
-  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant self::CustomInvocation invocation) → core::String
+  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant-by-declaration self::CustomInvocation invocation) → core::String
     return super.{core::Object::noSuchMethod}(invocation);
-  forwarding-stub forwarding-semi-stub operator ==(covariant self::Class o) → core::bool
+  forwarding-stub forwarding-semi-stub operator ==(covariant-by-declaration self::Class o) → core::bool
     return super.{core::Object::==}(o);
   abstract method toString({core::Object o = #C1}) → core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.transformed.expect
index f2c396a..59d5c75 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.strong.transformed.expect
@@ -62,9 +62,9 @@
     : super core::Object::•()
     ;
   abstract get runtimeType() → self::CustomType;
-  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant self::CustomInvocation invocation) → core::String
+  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant-by-declaration self::CustomInvocation invocation) → core::String
     return super.{core::Object::noSuchMethod}(invocation);
-  forwarding-stub forwarding-semi-stub operator ==(covariant self::Class o) → core::bool
+  forwarding-stub forwarding-semi-stub operator ==(covariant-by-declaration self::Class o) → core::bool
     return super.{core::Object::==}(o);
   abstract method toString({core::Object o = #C1}) → core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.expect
index f2c396a..59d5c75 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.expect
@@ -62,9 +62,9 @@
     : super core::Object::•()
     ;
   abstract get runtimeType() → self::CustomType;
-  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant self::CustomInvocation invocation) → core::String
+  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant-by-declaration self::CustomInvocation invocation) → core::String
     return super.{core::Object::noSuchMethod}(invocation);
-  forwarding-stub forwarding-semi-stub operator ==(covariant self::Class o) → core::bool
+  forwarding-stub forwarding-semi-stub operator ==(covariant-by-declaration self::Class o) → core::bool
     return super.{core::Object::==}(o);
   abstract method toString({core::Object o = #C1}) → core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect
index f472974..b00ea1e 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.outline.expect
@@ -16,9 +16,9 @@
   synthetic constructor •() → self::Class
     ;
   abstract get runtimeType() → self::CustomType;
-  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant self::CustomInvocation invocation) → core::String
+  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant-by-declaration self::CustomInvocation invocation) → core::String
     return super.{core::Object::noSuchMethod}(invocation);
-  forwarding-stub forwarding-semi-stub operator ==(covariant self::Class o) → core::bool
+  forwarding-stub forwarding-semi-stub operator ==(covariant-by-declaration self::Class o) → core::bool
     return super.{core::Object::==}(o);
   abstract method toString({core::Object o}) → core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.transformed.expect
index f2c396a..59d5c75 100644
--- a/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_object_access.dart.weak.transformed.expect
@@ -62,9 +62,9 @@
     : super core::Object::•()
     ;
   abstract get runtimeType() → self::CustomType;
-  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant self::CustomInvocation invocation) → core::String
+  forwarding-stub forwarding-semi-stub method noSuchMethod(covariant-by-declaration self::CustomInvocation invocation) → core::String
     return super.{core::Object::noSuchMethod}(invocation);
-  forwarding-stub forwarding-semi-stub operator ==(covariant self::Class o) → core::bool
+  forwarding-stub forwarding-semi-stub operator ==(covariant-by-declaration self::Class o) → core::bool
     return super.{core::Object::==}(o);
   abstract method toString({core::Object o = #C1}) → core::String;
 }
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.strong.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.strong.expect
index ae3903b..83ec6a1 100644
--- a/pkg/front_end/testcases/nnbd/override_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.strong.expect
@@ -152,8 +152,8 @@
   abstract method method2b(dynamic x) → void;
   abstract method method3a<AT3a extends core::Object? = dynamic>(self::A::method3a::AT3a% x) → void;
   abstract method method3b<AT3b extends core::Object? = dynamic>(self::A::method3b::AT3b% x) → void;
-  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, generic-covariant-impl self::A::AT% y) → void;
-  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, covariant-by-class self::A::AT% y) → void;
+  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, covariant-by-class self::A::AT% y) → void;
   abstract method method5a(core::int x, core::num y) → void;
   abstract method method5b(core::int x, core::num y) → void;
   abstract method method6a({core::int x = #C1, core::num y = #C1}) → void;
@@ -199,8 +199,8 @@
   abstract method method2b(core::Object? x) → void;
   abstract method method3a<BT3a extends core::Object? = dynamic>(self::B::method3a::BT3a% x) → void;
   abstract method method3b<BT3b extends core::Object? = dynamic>(self::B::method3b::BT3b% x) → void;
-  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, generic-covariant-impl self::B::BT% y) → void;
-  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, covariant-by-class self::B::BT% y) → void;
+  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, covariant-by-class self::B::BT% y) → void;
   abstract method method5a(core::num x, core::int y) → void;
   abstract method method5b(core::num x, core::int y) → void;
   abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
@@ -257,8 +257,8 @@
   abstract method method2b(core::Object? x) → void;
   abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
   abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y = #C1]) → void;
-  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, generic-covariant-impl core::num y) → void;
-  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, generic-covariant-impl core::num y, [dynamic z = #C1]) → void;
+  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, covariant-by-class core::num y) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, covariant-by-class core::num y, [dynamic z = #C1]) → void;
   abstract method method5a(invalid-type x, invalid-type y) → void;
   abstract method method5b(core::num x, core::num y, [invalid-type z = #C1]) → void;
   abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.strong.transformed.expect
index ae3903b..83ec6a1 100644
--- a/pkg/front_end/testcases/nnbd/override_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.strong.transformed.expect
@@ -152,8 +152,8 @@
   abstract method method2b(dynamic x) → void;
   abstract method method3a<AT3a extends core::Object? = dynamic>(self::A::method3a::AT3a% x) → void;
   abstract method method3b<AT3b extends core::Object? = dynamic>(self::A::method3b::AT3b% x) → void;
-  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, generic-covariant-impl self::A::AT% y) → void;
-  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, covariant-by-class self::A::AT% y) → void;
+  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, covariant-by-class self::A::AT% y) → void;
   abstract method method5a(core::int x, core::num y) → void;
   abstract method method5b(core::int x, core::num y) → void;
   abstract method method6a({core::int x = #C1, core::num y = #C1}) → void;
@@ -199,8 +199,8 @@
   abstract method method2b(core::Object? x) → void;
   abstract method method3a<BT3a extends core::Object? = dynamic>(self::B::method3a::BT3a% x) → void;
   abstract method method3b<BT3b extends core::Object? = dynamic>(self::B::method3b::BT3b% x) → void;
-  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, generic-covariant-impl self::B::BT% y) → void;
-  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, covariant-by-class self::B::BT% y) → void;
+  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, covariant-by-class self::B::BT% y) → void;
   abstract method method5a(core::num x, core::int y) → void;
   abstract method method5b(core::num x, core::int y) → void;
   abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
@@ -257,8 +257,8 @@
   abstract method method2b(core::Object? x) → void;
   abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
   abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y = #C1]) → void;
-  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, generic-covariant-impl core::num y) → void;
-  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, generic-covariant-impl core::num y, [dynamic z = #C1]) → void;
+  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, covariant-by-class core::num y) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, covariant-by-class core::num y, [dynamic z = #C1]) → void;
   abstract method method5a(invalid-type x, invalid-type y) → void;
   abstract method method5b(core::num x, core::num y, [invalid-type z = #C1]) → void;
   abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.expect
index ae3903b..83ec6a1 100644
--- a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.expect
@@ -152,8 +152,8 @@
   abstract method method2b(dynamic x) → void;
   abstract method method3a<AT3a extends core::Object? = dynamic>(self::A::method3a::AT3a% x) → void;
   abstract method method3b<AT3b extends core::Object? = dynamic>(self::A::method3b::AT3b% x) → void;
-  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, generic-covariant-impl self::A::AT% y) → void;
-  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, covariant-by-class self::A::AT% y) → void;
+  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, covariant-by-class self::A::AT% y) → void;
   abstract method method5a(core::int x, core::num y) → void;
   abstract method method5b(core::int x, core::num y) → void;
   abstract method method6a({core::int x = #C1, core::num y = #C1}) → void;
@@ -199,8 +199,8 @@
   abstract method method2b(core::Object? x) → void;
   abstract method method3a<BT3a extends core::Object? = dynamic>(self::B::method3a::BT3a% x) → void;
   abstract method method3b<BT3b extends core::Object? = dynamic>(self::B::method3b::BT3b% x) → void;
-  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, generic-covariant-impl self::B::BT% y) → void;
-  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, covariant-by-class self::B::BT% y) → void;
+  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, covariant-by-class self::B::BT% y) → void;
   abstract method method5a(core::num x, core::int y) → void;
   abstract method method5b(core::num x, core::int y) → void;
   abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
@@ -257,8 +257,8 @@
   abstract method method2b(core::Object? x) → void;
   abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
   abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y = #C1]) → void;
-  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, generic-covariant-impl core::num y) → void;
-  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, generic-covariant-impl core::num y, [dynamic z = #C1]) → void;
+  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, covariant-by-class core::num y) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, covariant-by-class core::num y, [dynamic z = #C1]) → void;
   abstract method method5a(invalid-type x, invalid-type y) → void;
   abstract method method5b(core::num x, core::num y, [invalid-type z = #C1]) → void;
   abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.outline.expect
index 1599471..1dcea19 100644
--- a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.outline.expect
@@ -151,8 +151,8 @@
   abstract method method2b(dynamic x) → void;
   abstract method method3a<AT3a extends core::Object? = dynamic>(self::A::method3a::AT3a% x) → void;
   abstract method method3b<AT3b extends core::Object? = dynamic>(self::A::method3b::AT3b% x) → void;
-  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, generic-covariant-impl self::A::AT% y) → void;
-  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, covariant-by-class self::A::AT% y) → void;
+  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, covariant-by-class self::A::AT% y) → void;
   abstract method method5a(core::int x, core::num y) → void;
   abstract method method5b(core::int x, core::num y) → void;
   abstract method method6a({core::int x, core::num y}) → void;
@@ -198,8 +198,8 @@
   abstract method method2b(core::Object? x) → void;
   abstract method method3a<BT3a extends core::Object? = dynamic>(self::B::method3a::BT3a% x) → void;
   abstract method method3b<BT3b extends core::Object? = dynamic>(self::B::method3b::BT3b% x) → void;
-  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, generic-covariant-impl self::B::BT% y) → void;
-  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, covariant-by-class self::B::BT% y) → void;
+  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, covariant-by-class self::B::BT% y) → void;
   abstract method method5a(core::num x, core::int y) → void;
   abstract method method5b(core::num x, core::int y) → void;
   abstract method method6a({core::Object x, core::num y}) → void;
@@ -255,8 +255,8 @@
   abstract method method2b(core::Object? x) → void;
   abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
   abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y]) → void;
-  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, generic-covariant-impl core::num y) → void;
-  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, generic-covariant-impl core::num y, [dynamic z]) → void;
+  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, covariant-by-class core::num y) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, covariant-by-class core::num y, [dynamic z]) → void;
   abstract method method5a(invalid-type x, invalid-type y) → void;
   abstract method method5b(core::num x, core::num y, [invalid-type z]) → void;
   abstract method method6a({core::Object x, core::num y}) → void;
diff --git a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.transformed.expect
index ae3903b..83ec6a1 100644
--- a/pkg/front_end/testcases/nnbd/override_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_inference.dart.weak.transformed.expect
@@ -152,8 +152,8 @@
   abstract method method2b(dynamic x) → void;
   abstract method method3a<AT3a extends core::Object? = dynamic>(self::A::method3a::AT3a% x) → void;
   abstract method method3b<AT3b extends core::Object? = dynamic>(self::A::method3b::AT3b% x) → void;
-  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, generic-covariant-impl self::A::AT% y) → void;
-  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, generic-covariant-impl self::A::AT% y) → void;
+  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, covariant-by-class self::A::AT% y) → void;
+  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, covariant-by-class self::A::AT% y) → void;
   abstract method method5a(core::int x, core::num y) → void;
   abstract method method5b(core::int x, core::num y) → void;
   abstract method method6a({core::int x = #C1, core::num y = #C1}) → void;
@@ -199,8 +199,8 @@
   abstract method method2b(core::Object? x) → void;
   abstract method method3a<BT3a extends core::Object? = dynamic>(self::B::method3a::BT3a% x) → void;
   abstract method method3b<BT3b extends core::Object? = dynamic>(self::B::method3b::BT3b% x) → void;
-  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, generic-covariant-impl self::B::BT% y) → void;
-  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, generic-covariant-impl self::B::BT% y) → void;
+  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, covariant-by-class self::B::BT% y) → void;
+  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, covariant-by-class self::B::BT% y) → void;
   abstract method method5a(core::num x, core::int y) → void;
   abstract method method5b(core::num x, core::int y) → void;
   abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
@@ -257,8 +257,8 @@
   abstract method method2b(core::Object? x) → void;
   abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
   abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y = #C1]) → void;
-  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, generic-covariant-impl core::num y) → void;
-  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, generic-covariant-impl core::num y, [dynamic z = #C1]) → void;
+  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, covariant-by-class core::num y) → void;
+  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, covariant-by-class core::num y, [dynamic z = #C1]) → void;
   abstract method method5a(invalid-type x, invalid-type y) → void;
   abstract method method5b(core::num x, core::num y, [invalid-type z = #C1]) → void;
   abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
diff --git a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.strong.expect b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.strong.expect
index a39f6c2..f8836ef 100644
--- a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.strong.expect
@@ -30,11 +30,11 @@
   late field core::int? lz;
   field core::int lv;
   field core::int lu;
-  generic-covariant-impl field self::A::T% lt = null;
-  generic-covariant-impl field self::A::T? ls = null;
-  late generic-covariant-impl field self::A::T% lr;
-  generic-covariant-impl field self::A::T% lp;
-  generic-covariant-impl field self::A::T% lq;
+  covariant-by-class field self::A::T% lt = null;
+  covariant-by-class field self::A::T? ls = null;
+  late covariant-by-class field self::A::T% lr;
+  covariant-by-class field self::A::T% lp;
+  covariant-by-class field self::A::T% lq;
   constructor •(core::int lv, self::A::T% lp, self::A::T% t) → self::A<self::A::T%>
     : self::A::lv = lv, self::A::lp = lp, self::A::lu = 42, self::A::lq = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.strong.transformed.expect
index a39f6c2..f8836ef 100644
--- a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.strong.transformed.expect
@@ -30,11 +30,11 @@
   late field core::int? lz;
   field core::int lv;
   field core::int lu;
-  generic-covariant-impl field self::A::T% lt = null;
-  generic-covariant-impl field self::A::T? ls = null;
-  late generic-covariant-impl field self::A::T% lr;
-  generic-covariant-impl field self::A::T% lp;
-  generic-covariant-impl field self::A::T% lq;
+  covariant-by-class field self::A::T% lt = null;
+  covariant-by-class field self::A::T? ls = null;
+  late covariant-by-class field self::A::T% lr;
+  covariant-by-class field self::A::T% lp;
+  covariant-by-class field self::A::T% lq;
   constructor •(core::int lv, self::A::T% lp, self::A::T% t) → self::A<self::A::T%>
     : self::A::lv = lv, self::A::lp = lp, self::A::lu = 42, self::A::lq = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.expect b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.expect
index a39f6c2..f8836ef 100644
--- a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.expect
@@ -30,11 +30,11 @@
   late field core::int? lz;
   field core::int lv;
   field core::int lu;
-  generic-covariant-impl field self::A::T% lt = null;
-  generic-covariant-impl field self::A::T? ls = null;
-  late generic-covariant-impl field self::A::T% lr;
-  generic-covariant-impl field self::A::T% lp;
-  generic-covariant-impl field self::A::T% lq;
+  covariant-by-class field self::A::T% lt = null;
+  covariant-by-class field self::A::T? ls = null;
+  late covariant-by-class field self::A::T% lr;
+  covariant-by-class field self::A::T% lp;
+  covariant-by-class field self::A::T% lq;
   constructor •(core::int lv, self::A::T% lp, self::A::T% t) → self::A<self::A::T%>
     : self::A::lv = lv, self::A::lp = lp, self::A::lu = 42, self::A::lq = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.outline.expect
index 088b4c8..1b2c0f3 100644
--- a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.outline.expect
@@ -22,11 +22,11 @@
   late field core::int? lz;
   field core::int lv;
   field core::int lu;
-  generic-covariant-impl field self::A::T% lt;
-  generic-covariant-impl field self::A::T? ls;
-  late generic-covariant-impl field self::A::T% lr;
-  generic-covariant-impl field self::A::T% lp;
-  generic-covariant-impl field self::A::T% lq;
+  covariant-by-class field self::A::T% lt;
+  covariant-by-class field self::A::T? ls;
+  late covariant-by-class field self::A::T% lr;
+  covariant-by-class field self::A::T% lp;
+  covariant-by-class field self::A::T% lq;
   constructor •(core::int lv, self::A::T% lp, self::A::T% t) → self::A<self::A::T%>
     ;
 }
diff --git a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.transformed.expect
index a39f6c2..f8836ef 100644
--- a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.transformed.expect
@@ -30,11 +30,11 @@
   late field core::int? lz;
   field core::int lv;
   field core::int lu;
-  generic-covariant-impl field self::A::T% lt = null;
-  generic-covariant-impl field self::A::T? ls = null;
-  late generic-covariant-impl field self::A::T% lr;
-  generic-covariant-impl field self::A::T% lp;
-  generic-covariant-impl field self::A::T% lq;
+  covariant-by-class field self::A::T% lt = null;
+  covariant-by-class field self::A::T? ls = null;
+  late covariant-by-class field self::A::T% lr;
+  covariant-by-class field self::A::T% lp;
+  covariant-by-class field self::A::T% lq;
   constructor •(core::int lv, self::A::T% lp, self::A::T% t) → self::A<self::A::T%>
     : self::A::lv = lv, self::A::lp = lp, self::A::lu = 42, self::A::lq = t, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.expect b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.expect
index 987bcb5..42b09ab8 100644
--- a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.expect
@@ -129,8 +129,8 @@
   synthetic constructor •() → self::Map<self::Map::K%, self::Map::V%>
     : super core::Object::•()
     ;
-  abstract operator [](generic-covariant-impl self::Map::K% index) → self::Map::V%;
-  abstract operator []=(generic-covariant-impl self::Map::K% index, generic-covariant-impl self::Map::V% value) → void;
+  abstract operator [](covariant-by-class self::Map::K% index) → self::Map::V%;
+  abstract operator []=(covariant-by-class self::Map::K% index, covariant-by-class self::Map::V% value) → void;
 }
 class Class extends core::Object {
   synthetic constructor •() → self::Class
diff --git a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.transformed.expect
index 987bcb5..42b09ab8 100644
--- a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.strong.transformed.expect
@@ -129,8 +129,8 @@
   synthetic constructor •() → self::Map<self::Map::K%, self::Map::V%>
     : super core::Object::•()
     ;
-  abstract operator [](generic-covariant-impl self::Map::K% index) → self::Map::V%;
-  abstract operator []=(generic-covariant-impl self::Map::K% index, generic-covariant-impl self::Map::V% value) → void;
+  abstract operator [](covariant-by-class self::Map::K% index) → self::Map::V%;
+  abstract operator []=(covariant-by-class self::Map::K% index, covariant-by-class self::Map::V% value) → void;
 }
 class Class extends core::Object {
   synthetic constructor •() → self::Class
diff --git a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.expect b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.expect
index 987bcb5..42b09ab8 100644
--- a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.expect
@@ -129,8 +129,8 @@
   synthetic constructor •() → self::Map<self::Map::K%, self::Map::V%>
     : super core::Object::•()
     ;
-  abstract operator [](generic-covariant-impl self::Map::K% index) → self::Map::V%;
-  abstract operator []=(generic-covariant-impl self::Map::K% index, generic-covariant-impl self::Map::V% value) → void;
+  abstract operator [](covariant-by-class self::Map::K% index) → self::Map::V%;
+  abstract operator []=(covariant-by-class self::Map::K% index, covariant-by-class self::Map::V% value) → void;
 }
 class Class extends core::Object {
   synthetic constructor •() → self::Class
diff --git a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.outline.expect
index f44d475..6748594 100644
--- a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.outline.expect
@@ -5,8 +5,8 @@
 abstract class Map<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::Map<self::Map::K%, self::Map::V%>
     ;
-  abstract operator [](generic-covariant-impl self::Map::K% index) → self::Map::V%;
-  abstract operator []=(generic-covariant-impl self::Map::K% index, generic-covariant-impl self::Map::V% value) → void;
+  abstract operator [](covariant-by-class self::Map::K% index) → self::Map::V%;
+  abstract operator []=(covariant-by-class self::Map::K% index, covariant-by-class self::Map::V% value) → void;
 }
 class Class extends core::Object {
   synthetic constructor •() → self::Class
diff --git a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.transformed.expect
index 987bcb5..42b09ab8 100644
--- a/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/pure_index_expressions.dart.weak.transformed.expect
@@ -129,8 +129,8 @@
   synthetic constructor •() → self::Map<self::Map::K%, self::Map::V%>
     : super core::Object::•()
     ;
-  abstract operator [](generic-covariant-impl self::Map::K% index) → self::Map::V%;
-  abstract operator []=(generic-covariant-impl self::Map::K% index, generic-covariant-impl self::Map::V% value) → void;
+  abstract operator [](covariant-by-class self::Map::K% index) → self::Map::V%;
+  abstract operator []=(covariant-by-class self::Map::K% index, covariant-by-class self::Map::V% value) → void;
 }
 class Class extends core::Object {
   synthetic constructor •() → self::Class
diff --git a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.expect b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.expect
index bac2c56..1062bac 100644
--- a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T? _current = null;
+  covariant-by-class field self::A::T? _current = null;
   synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.transformed.expect
index 11d4db7..1c842e3 100644
--- a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T? _current = null;
+  covariant-by-class field self::A::T? _current = null;
   synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.expect b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.expect
index bac2c56..1062bac 100644
--- a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T? _current = null;
+  covariant-by-class field self::A::T? _current = null;
   synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.outline.expect
index 82c894b..460f50d 100644
--- a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T? _current;
+  covariant-by-class field self::A::T? _current;
   synthetic constructor •() → self::A<self::A::T%>
     ;
   get current() → self::A::T%
diff --git a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.transformed.expect
index 85eb6b6..9a16943 100644
--- a/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/redundant_type_casts.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::A::T? _current = null;
+  covariant-by-class field self::A::T? _current = null;
   synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd/required.dart.strong.expect b/pkg/front_end/testcases/nnbd/required.dart.strong.expect
index dfe4abf..ccce283 100644
--- a/pkg/front_end/testcases/nnbd/required.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/required.dart.strong.expect
@@ -59,7 +59,7 @@
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  method method({core::int a = #C1, required core::int b = #C2, required final core::int c = #C2, required covariant final core::int d = #C2}) → dynamic {}
+  method method({core::int a = #C1, required core::int b = #C2, required final core::int c = #C2, required covariant-by-declaration final core::int d = #C2}) → dynamic {}
 }
 abstract class A extends core::Object {
   synthetic constructor •() → self::A
diff --git a/pkg/front_end/testcases/nnbd/required.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/required.dart.strong.transformed.expect
index dfe4abf..ccce283 100644
--- a/pkg/front_end/testcases/nnbd/required.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/required.dart.strong.transformed.expect
@@ -59,7 +59,7 @@
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  method method({core::int a = #C1, required core::int b = #C2, required final core::int c = #C2, required covariant final core::int d = #C2}) → dynamic {}
+  method method({core::int a = #C1, required core::int b = #C2, required final core::int c = #C2, required covariant-by-declaration final core::int d = #C2}) → dynamic {}
 }
 abstract class A extends core::Object {
   synthetic constructor •() → self::A
diff --git a/pkg/front_end/testcases/nnbd/required.dart.weak.expect b/pkg/front_end/testcases/nnbd/required.dart.weak.expect
index dfe4abf..ccce283 100644
--- a/pkg/front_end/testcases/nnbd/required.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/required.dart.weak.expect
@@ -59,7 +59,7 @@
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  method method({core::int a = #C1, required core::int b = #C2, required final core::int c = #C2, required covariant final core::int d = #C2}) → dynamic {}
+  method method({core::int a = #C1, required core::int b = #C2, required final core::int c = #C2, required covariant-by-declaration final core::int d = #C2}) → dynamic {}
 }
 abstract class A extends core::Object {
   synthetic constructor •() → self::A
diff --git a/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect
index f5a1db6..c961e36 100644
--- a/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/required.dart.weak.outline.expect
@@ -15,7 +15,7 @@
 class Class extends core::Object {
   synthetic constructor •() → self::Class
     ;
-  method method({core::int a = 42, required core::int b, required final core::int c, required covariant final core::int d}) → dynamic
+  method method({core::int a = 42, required core::int b, required final core::int c, required covariant-by-declaration final core::int d}) → dynamic
     ;
 }
 abstract class A extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd/required.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/required.dart.weak.transformed.expect
index dfe4abf..ccce283 100644
--- a/pkg/front_end/testcases/nnbd/required.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/required.dart.weak.transformed.expect
@@ -59,7 +59,7 @@
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  method method({core::int a = #C1, required core::int b = #C2, required final core::int c = #C2, required covariant final core::int d = #C2}) → dynamic {}
+  method method({core::int a = #C1, required core::int b = #C2, required final core::int c = #C2, required covariant-by-declaration final core::int d = #C2}) → dynamic {}
 }
 abstract class A extends core::Object {
   synthetic constructor •() → self::A
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
index a6d8695..79d95f1 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
@@ -58,17 +58,15 @@
 
 import "dart:async";
 
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class Enum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum> values = #C7;
   static const field self::Enum a = #C3;
   static const field self::Enum b = #C6;
-  const constructor •(core::int index, core::String _name) → self::Enum
-    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::Enum
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::Enum::_name}{core::String};
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
 }
 static method returnImplicit() → core::String {
   core::print("foo");
@@ -223,10 +221,10 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Enum.a"
+  #C2 = "a"
   #C3 = self::Enum {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "Enum.b"
+  #C5 = "b"
   #C6 = self::Enum {index:#C4, _name:#C5}
   #C7 = <self::Enum>[#C3, #C6]
 }
@@ -235,4 +233,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
index 027a6aa..d7034897 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
@@ -58,17 +58,15 @@
 
 import "dart:async";
 
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class Enum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum> values = #C7;
   static const field self::Enum a = #C3;
   static const field self::Enum b = #C6;
-  const constructor •(core::int index, core::String _name) → self::Enum
-    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::Enum
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::Enum::_name}{core::String};
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
 }
 static method returnImplicit() → core::String {
   core::print("foo");
@@ -621,10 +619,10 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Enum.a"
+  #C2 = "a"
   #C3 = self::Enum {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "Enum.b"
+  #C5 = "b"
   #C6 = self::Enum {index:#C4, _name:#C5}
   #C7 = <self::Enum>[#C3, #C6]
 }
@@ -633,4 +631,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
index cb0d622..8c3d6c3 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
@@ -59,17 +59,15 @@
 
 import "dart:async";
 
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class Enum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum> values = #C7;
   static const field self::Enum a = #C3;
   static const field self::Enum b = #C6;
-  const constructor •(core::int index, core::String _name) → self::Enum
-    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::Enum
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::Enum::_name}{core::String};
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
 }
 static method returnImplicit() → core::String {
   core::print("foo");
@@ -230,10 +228,10 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Enum.a"
+  #C2 = "a"
   #C3 = self::Enum {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "Enum.b"
+  #C5 = "b"
   #C6 = self::Enum {index:#C4, _name:#C5}
   #C7 = <self::Enum*>[#C3, #C6]
 }
@@ -242,4 +240,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.outline.expect
index 29d9ba1..39ab74e 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.outline.expect
@@ -5,17 +5,15 @@
 
 import "dart:async";
 
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class Enum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum> values = const <self::Enum>[self::Enum::a, self::Enum::b];
-  static const field self::Enum a = const self::Enum::•(0, "Enum.a");
-  static const field self::Enum b = const self::Enum::•(1, "Enum.b");
-  const constructor •(core::int index, core::String _name) → self::Enum
-    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+  static const field self::Enum a = const self::Enum::•(0, "a");
+  static const field self::Enum b = const self::Enum::•(1, "b");
+  const constructor •(core::int index, core::String name) → self::Enum
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::Enum::_name}{core::String};
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
 }
 static method returnImplicit() → core::String
   ;
@@ -52,7 +50,7 @@
 
 
 Extra constant evaluation status:
-Evaluated: ListLiteral @ org-dartlang-testcase:///return_null.dart:43:6 -> ListConstant(const <Enum*>[const Enum{Enum.index: 0, Enum._name: "Enum.a"}, const Enum{Enum.index: 1, Enum._name: "Enum.b"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///return_null.dart:43:13 -> InstanceConstant(const Enum{Enum.index: 0, Enum._name: "Enum.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///return_null.dart:43:16 -> InstanceConstant(const Enum{Enum.index: 1, Enum._name: "Enum.b"})
-Extra constant evaluation: evaluated: 7, effectively constant: 3
+Evaluated: ListLiteral @ org-dartlang-testcase:///return_null.dart:43:6 -> ListConstant(const <Enum*>[const Enum{_Enum.index: 0, _Enum._name: "a"}, const Enum{_Enum.index: 1, _Enum._name: "b"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///return_null.dart:43:13 -> InstanceConstant(const Enum{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///return_null.dart:43:16 -> InstanceConstant(const Enum{_Enum.index: 1, _Enum._name: "b"})
+Extra constant evaluation: evaluated: 8, effectively constant: 3
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
index 96616e8..7f20e82 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
@@ -59,17 +59,15 @@
 
 import "dart:async";
 
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class Enum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum> values = #C7;
   static const field self::Enum a = #C3;
   static const field self::Enum b = #C6;
-  const constructor •(core::int index, core::String _name) → self::Enum
-    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::Enum
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::Enum::_name}{core::String};
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
 }
 static method returnImplicit() → core::String {
   core::print("foo");
@@ -628,10 +626,10 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Enum.a"
+  #C2 = "a"
   #C3 = self::Enum {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "Enum.b"
+  #C5 = "b"
   #C6 = self::Enum {index:#C4, _name:#C5}
   #C7 = <self::Enum*>[#C3, #C6]
 }
@@ -640,4 +638,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.strong.expect b/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.strong.expect
index 7dda588..b06ed29 100644
--- a/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.strong.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → self::A<self::A::T%, self::A::S>
     : super core::Object::•()
     ;
-  method hest<generic-covariant-impl X extends self::A::T%, Y extends core::List<self::A::hest::X%> = core::List<self::A::T%>, Z extends core::List<self::A::hest::X?> = core::List<self::A::T?>>() → dynamic
+  method hest<covariant-by-class X extends self::A::T%, Y extends core::List<self::A::hest::X%> = core::List<self::A::T%>, Z extends core::List<self::A::hest::X?> = core::List<self::A::T?>>() → dynamic
     return null;
-  method fisk<generic-covariant-impl X extends self::A::S, Y extends core::List<self::A::fisk::X> = core::List<self::A::S>, Z extends core::List<self::A::fisk::X?> = core::List<self::A::S?>>() → dynamic
+  method fisk<covariant-by-class X extends self::A::S, Y extends core::List<self::A::fisk::X> = core::List<self::A::S>, Z extends core::List<self::A::fisk::X?> = core::List<self::A::S?>>() → dynamic
     return null;
   method mus<X extends core::Object?, Y extends core::List<self::A::mus::X%> = core::List<core::Object?>, Z extends core::List<self::A::mus::X?> = core::List<core::Object?>>() → dynamic
     return null;
diff --git a/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.strong.transformed.expect
index 7dda588..b06ed29 100644
--- a/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.strong.transformed.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → self::A<self::A::T%, self::A::S>
     : super core::Object::•()
     ;
-  method hest<generic-covariant-impl X extends self::A::T%, Y extends core::List<self::A::hest::X%> = core::List<self::A::T%>, Z extends core::List<self::A::hest::X?> = core::List<self::A::T?>>() → dynamic
+  method hest<covariant-by-class X extends self::A::T%, Y extends core::List<self::A::hest::X%> = core::List<self::A::T%>, Z extends core::List<self::A::hest::X?> = core::List<self::A::T?>>() → dynamic
     return null;
-  method fisk<generic-covariant-impl X extends self::A::S, Y extends core::List<self::A::fisk::X> = core::List<self::A::S>, Z extends core::List<self::A::fisk::X?> = core::List<self::A::S?>>() → dynamic
+  method fisk<covariant-by-class X extends self::A::S, Y extends core::List<self::A::fisk::X> = core::List<self::A::S>, Z extends core::List<self::A::fisk::X?> = core::List<self::A::S?>>() → dynamic
     return null;
   method mus<X extends core::Object?, Y extends core::List<self::A::mus::X%> = core::List<core::Object?>, Z extends core::List<self::A::mus::X?> = core::List<core::Object?>>() → dynamic
     return null;
diff --git a/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.expect b/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.expect
index 7dda588..b06ed29 100644
--- a/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → self::A<self::A::T%, self::A::S>
     : super core::Object::•()
     ;
-  method hest<generic-covariant-impl X extends self::A::T%, Y extends core::List<self::A::hest::X%> = core::List<self::A::T%>, Z extends core::List<self::A::hest::X?> = core::List<self::A::T?>>() → dynamic
+  method hest<covariant-by-class X extends self::A::T%, Y extends core::List<self::A::hest::X%> = core::List<self::A::T%>, Z extends core::List<self::A::hest::X?> = core::List<self::A::T?>>() → dynamic
     return null;
-  method fisk<generic-covariant-impl X extends self::A::S, Y extends core::List<self::A::fisk::X> = core::List<self::A::S>, Z extends core::List<self::A::fisk::X?> = core::List<self::A::S?>>() → dynamic
+  method fisk<covariant-by-class X extends self::A::S, Y extends core::List<self::A::fisk::X> = core::List<self::A::S>, Z extends core::List<self::A::fisk::X?> = core::List<self::A::S?>>() → dynamic
     return null;
   method mus<X extends core::Object?, Y extends core::List<self::A::mus::X%> = core::List<core::Object?>, Z extends core::List<self::A::mus::X?> = core::List<core::Object?>>() → dynamic
     return null;
diff --git a/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.outline.expect
index 091ebb6..a422ecf 100644
--- a/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.outline.expect
@@ -5,9 +5,9 @@
 class A<T extends core::Object?, S extends core::Object> extends core::Object {
   synthetic constructor •() → self::A<self::A::T%, self::A::S>
     ;
-  method hest<generic-covariant-impl X extends self::A::T%, Y extends core::List<self::A::hest::X%> = core::List<self::A::T%>, Z extends core::List<self::A::hest::X?> = core::List<self::A::T?>>() → dynamic
+  method hest<covariant-by-class X extends self::A::T%, Y extends core::List<self::A::hest::X%> = core::List<self::A::T%>, Z extends core::List<self::A::hest::X?> = core::List<self::A::T?>>() → dynamic
     ;
-  method fisk<generic-covariant-impl X extends self::A::S, Y extends core::List<self::A::fisk::X> = core::List<self::A::S>, Z extends core::List<self::A::fisk::X?> = core::List<self::A::S?>>() → dynamic
+  method fisk<covariant-by-class X extends self::A::S, Y extends core::List<self::A::fisk::X> = core::List<self::A::S>, Z extends core::List<self::A::fisk::X?> = core::List<self::A::S?>>() → dynamic
     ;
   method mus<X extends core::Object?, Y extends core::List<self::A::mus::X%> = core::List<core::Object?>, Z extends core::List<self::A::mus::X?> = core::List<core::Object?>>() → dynamic
     ;
diff --git a/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.transformed.expect
index 7dda588..b06ed29 100644
--- a/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/substitution_in_inference.dart.weak.transformed.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → self::A<self::A::T%, self::A::S>
     : super core::Object::•()
     ;
-  method hest<generic-covariant-impl X extends self::A::T%, Y extends core::List<self::A::hest::X%> = core::List<self::A::T%>, Z extends core::List<self::A::hest::X?> = core::List<self::A::T?>>() → dynamic
+  method hest<covariant-by-class X extends self::A::T%, Y extends core::List<self::A::hest::X%> = core::List<self::A::T%>, Z extends core::List<self::A::hest::X?> = core::List<self::A::T?>>() → dynamic
     return null;
-  method fisk<generic-covariant-impl X extends self::A::S, Y extends core::List<self::A::fisk::X> = core::List<self::A::S>, Z extends core::List<self::A::fisk::X?> = core::List<self::A::S?>>() → dynamic
+  method fisk<covariant-by-class X extends self::A::S, Y extends core::List<self::A::fisk::X> = core::List<self::A::S>, Z extends core::List<self::A::fisk::X?> = core::List<self::A::S?>>() → dynamic
     return null;
   method mus<X extends core::Object?, Y extends core::List<self::A::mus::X%> = core::List<core::Object?>, Z extends core::List<self::A::mus::X?> = core::List<core::Object?>>() → dynamic
     return null;
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
index 199a6cb..c152a0b 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
@@ -9,17 +9,15 @@
 import self as self;
 import "dart:core" as core;
 
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class Enum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum> values = #C7;
   static const field self::Enum e1 = #C3;
   static const field self::Enum e2 = #C6;
-  const constructor •(core::int index, core::String _name) → self::Enum
-    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::Enum
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::Enum::_name}{core::String};
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
 }
 static method method1(self::Enum? e) → core::int {
   switch(e) {
@@ -102,10 +100,10 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Enum.e1"
+  #C2 = "e1"
   #C3 = self::Enum {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "Enum.e2"
+  #C5 = "e2"
   #C6 = self::Enum {index:#C4, _name:#C5}
   #C7 = <self::Enum>[#C3, #C6]
   #C8 = null
@@ -115,4 +113,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
index 199a6cb..c152a0b 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
@@ -9,17 +9,15 @@
 import self as self;
 import "dart:core" as core;
 
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class Enum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum> values = #C7;
   static const field self::Enum e1 = #C3;
   static const field self::Enum e2 = #C6;
-  const constructor •(core::int index, core::String _name) → self::Enum
-    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::Enum
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::Enum::_name}{core::String};
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
 }
 static method method1(self::Enum? e) → core::int {
   switch(e) {
@@ -102,10 +100,10 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Enum.e1"
+  #C2 = "e1"
   #C3 = self::Enum {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "Enum.e2"
+  #C5 = "e2"
   #C6 = self::Enum {index:#C4, _name:#C5}
   #C7 = <self::Enum>[#C3, #C6]
   #C8 = null
@@ -115,4 +113,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
index f73e2a7..da9cc12 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
@@ -10,17 +10,15 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class Enum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum> values = #C7;
   static const field self::Enum e1 = #C3;
   static const field self::Enum e2 = #C6;
-  const constructor •(core::int index, core::String _name) → self::Enum
-    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::Enum
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::Enum::_name}{core::String};
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
 }
 static method method1(self::Enum? e) → core::int {
   switch(e) {
@@ -106,10 +104,10 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Enum.e1"
+  #C2 = "e1"
   #C3 = self::Enum {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "Enum.e2"
+  #C5 = "e2"
   #C6 = self::Enum {index:#C4, _name:#C5}
   #C7 = <self::Enum*>[#C3, #C6]
   #C8 = null
@@ -119,4 +117,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.outline.expect
index ed400bb..0c365ed 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.outline.expect
@@ -2,17 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class Enum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum> values = const <self::Enum>[self::Enum::e1, self::Enum::e2];
-  static const field self::Enum e1 = const self::Enum::•(0, "Enum.e1");
-  static const field self::Enum e2 = const self::Enum::•(1, "Enum.e2");
-  const constructor •(core::int index, core::String _name) → self::Enum
-    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+  static const field self::Enum e1 = const self::Enum::•(0, "e1");
+  static const field self::Enum e2 = const self::Enum::•(1, "e2");
+  const constructor •(core::int index, core::String name) → self::Enum
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::Enum::_name}{core::String};
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
 }
 static method method1(self::Enum? e) → core::int
   ;
@@ -31,7 +29,7 @@
 
 
 Extra constant evaluation status:
-Evaluated: ListLiteral @ org-dartlang-testcase:///switch_nullable_enum.dart:5:6 -> ListConstant(const <Enum*>[const Enum{Enum.index: 0, Enum._name: "Enum.e1"}, const Enum{Enum.index: 1, Enum._name: "Enum.e2"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///switch_nullable_enum.dart:5:13 -> InstanceConstant(const Enum{Enum.index: 0, Enum._name: "Enum.e1"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///switch_nullable_enum.dart:5:17 -> InstanceConstant(const Enum{Enum.index: 1, Enum._name: "Enum.e2"})
-Extra constant evaluation: evaluated: 7, effectively constant: 3
+Evaluated: ListLiteral @ org-dartlang-testcase:///switch_nullable_enum.dart:5:6 -> ListConstant(const <Enum*>[const Enum{_Enum.index: 0, _Enum._name: "e1"}, const Enum{_Enum.index: 1, _Enum._name: "e2"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///switch_nullable_enum.dart:5:13 -> InstanceConstant(const Enum{_Enum.index: 0, _Enum._name: "e1"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///switch_nullable_enum.dart:5:17 -> InstanceConstant(const Enum{_Enum.index: 1, _Enum._name: "e2"})
+Extra constant evaluation: evaluated: 8, effectively constant: 3
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
index f73e2a7..da9cc12 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
@@ -10,17 +10,15 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-class Enum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class Enum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Enum> values = #C7;
   static const field self::Enum e1 = #C3;
   static const field self::Enum e2 = #C6;
-  const constructor •(core::int index, core::String _name) → self::Enum
-    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::Enum
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::Enum::_name}{core::String};
+    return "Enum.${this.{core::_Enum::_name}{core::String}}";
 }
 static method method1(self::Enum? e) → core::int {
   switch(e) {
@@ -106,10 +104,10 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Enum.e1"
+  #C2 = "e1"
   #C3 = self::Enum {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "Enum.e2"
+  #C5 = "e2"
   #C6 = self::Enum {index:#C4, _name:#C5}
   #C7 = <self::Enum*>[#C3, #C6]
   #C8 = null
@@ -119,4 +117,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/type_parameter_types.dart.strong.expect b/pkg/front_end/testcases/nnbd/type_parameter_types.dart.strong.expect
index 9f2387d..bc5e887 100644
--- a/pkg/front_end/testcases/nnbd/type_parameter_types.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/type_parameter_types.dart.strong.expect
@@ -17,19 +17,19 @@
   synthetic constructor •() → self::B<self::B::X, self::B::Y%>
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::B::X x, generic-covariant-impl self::B::Y% y) → dynamic {}
+  method foo(covariant-by-class self::B::X x, covariant-by-class self::B::Y% y) → dynamic {}
 }
 class C<X extends core::List<self::C::Y%>? = core::List<dynamic>?, Y extends core::List<self::C::X%>? = core::List<dynamic>?> extends core::Object {
   synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → dynamic {}
+  method foo(covariant-by-class self::C::X% x, covariant-by-class self::C::Y% y) → dynamic {}
 }
 class D<X extends self::D::Y% = dynamic, Y extends self::D::Z% = dynamic, Z extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::D<self::D::X%, self::D::Y%, self::D::Z%>
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::D::X% x, generic-covariant-impl self::D::Y% y, generic-covariant-impl self::D::Z% z) → dynamic {}
+  method foo(covariant-by-class self::D::X% x, covariant-by-class self::D::Y% y, covariant-by-class self::D::Z% z) → dynamic {}
 }
 static method never() → Never
   return throw "Never";
diff --git a/pkg/front_end/testcases/nnbd/type_parameter_types.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/type_parameter_types.dart.strong.transformed.expect
index 9f2387d..bc5e887 100644
--- a/pkg/front_end/testcases/nnbd/type_parameter_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/type_parameter_types.dart.strong.transformed.expect
@@ -17,19 +17,19 @@
   synthetic constructor •() → self::B<self::B::X, self::B::Y%>
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::B::X x, generic-covariant-impl self::B::Y% y) → dynamic {}
+  method foo(covariant-by-class self::B::X x, covariant-by-class self::B::Y% y) → dynamic {}
 }
 class C<X extends core::List<self::C::Y%>? = core::List<dynamic>?, Y extends core::List<self::C::X%>? = core::List<dynamic>?> extends core::Object {
   synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → dynamic {}
+  method foo(covariant-by-class self::C::X% x, covariant-by-class self::C::Y% y) → dynamic {}
 }
 class D<X extends self::D::Y% = dynamic, Y extends self::D::Z% = dynamic, Z extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::D<self::D::X%, self::D::Y%, self::D::Z%>
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::D::X% x, generic-covariant-impl self::D::Y% y, generic-covariant-impl self::D::Z% z) → dynamic {}
+  method foo(covariant-by-class self::D::X% x, covariant-by-class self::D::Y% y, covariant-by-class self::D::Z% z) → dynamic {}
 }
 static method never() → Never
   return throw "Never";
diff --git a/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.expect b/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.expect
index 5992af3..220ce86 100644
--- a/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.expect
@@ -18,19 +18,19 @@
   synthetic constructor •() → self::B<self::B::X, self::B::Y%>
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::B::X x, generic-covariant-impl self::B::Y% y) → dynamic {}
+  method foo(covariant-by-class self::B::X x, covariant-by-class self::B::Y% y) → dynamic {}
 }
 class C<X extends core::List<self::C::Y%>? = core::List<dynamic>?, Y extends core::List<self::C::X%>? = core::List<dynamic>?> extends core::Object {
   synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → dynamic {}
+  method foo(covariant-by-class self::C::X% x, covariant-by-class self::C::Y% y) → dynamic {}
 }
 class D<X extends self::D::Y% = dynamic, Y extends self::D::Z% = dynamic, Z extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::D<self::D::X%, self::D::Y%, self::D::Z%>
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::D::X% x, generic-covariant-impl self::D::Y% y, generic-covariant-impl self::D::Z% z) → dynamic {}
+  method foo(covariant-by-class self::D::X% x, covariant-by-class self::D::Y% y, covariant-by-class self::D::Z% z) → dynamic {}
 }
 static method never() → Never
   return throw "Never";
diff --git a/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.outline.expect
index e50ba48..2d034c8 100644
--- a/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.outline.expect
@@ -15,19 +15,19 @@
 class B<X extends core::List<self::B::Y%> = core::List<core::Object?>, Y extends core::Object?> extends core::Object {
   synthetic constructor •() → self::B<self::B::X, self::B::Y%>
     ;
-  method foo(generic-covariant-impl self::B::X x, generic-covariant-impl self::B::Y% y) → dynamic
+  method foo(covariant-by-class self::B::X x, covariant-by-class self::B::Y% y) → dynamic
     ;
 }
 class C<X extends core::List<self::C::Y%>? = core::List<dynamic>?, Y extends core::List<self::C::X%>? = core::List<dynamic>?> extends core::Object {
   synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     ;
-  method foo(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → dynamic
+  method foo(covariant-by-class self::C::X% x, covariant-by-class self::C::Y% y) → dynamic
     ;
 }
 class D<X extends self::D::Y% = dynamic, Y extends self::D::Z% = dynamic, Z extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::D<self::D::X%, self::D::Y%, self::D::Z%>
     ;
-  method foo(generic-covariant-impl self::D::X% x, generic-covariant-impl self::D::Y% y, generic-covariant-impl self::D::Z% z) → dynamic
+  method foo(covariant-by-class self::D::X% x, covariant-by-class self::D::Y% y, covariant-by-class self::D::Z% z) → dynamic
     ;
 }
 static method never() → Never
diff --git a/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.transformed.expect
index 5992af3..220ce86 100644
--- a/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/type_parameter_types.dart.weak.transformed.expect
@@ -18,19 +18,19 @@
   synthetic constructor •() → self::B<self::B::X, self::B::Y%>
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::B::X x, generic-covariant-impl self::B::Y% y) → dynamic {}
+  method foo(covariant-by-class self::B::X x, covariant-by-class self::B::Y% y) → dynamic {}
 }
 class C<X extends core::List<self::C::Y%>? = core::List<dynamic>?, Y extends core::List<self::C::X%>? = core::List<dynamic>?> extends core::Object {
   synthetic constructor •() → self::C<self::C::X%, self::C::Y%>
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::C::X% x, generic-covariant-impl self::C::Y% y) → dynamic {}
+  method foo(covariant-by-class self::C::X% x, covariant-by-class self::C::Y% y) → dynamic {}
 }
 class D<X extends self::D::Y% = dynamic, Y extends self::D::Z% = dynamic, Z extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::D<self::D::X%, self::D::Y%, self::D::Z%>
     : super core::Object::•()
     ;
-  method foo(generic-covariant-impl self::D::X% x, generic-covariant-impl self::D::Y% y, generic-covariant-impl self::D::Z% z) → dynamic {}
+  method foo(covariant-by-class self::D::X% x, covariant-by-class self::D::Y% y, covariant-by-class self::D::Z% z) → dynamic {}
 }
 static method never() → Never
   return throw "Never";
diff --git a/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.expect
index 433878f..a18752a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::_SubClass&Class&Mixin*
     : super cov::Class::•()
     ;
-  abstract member-signature method covariant(covariant cov::Class* cls) → void; -> cov::Class::covariant
+  abstract member-signature method covariant(covariant-by-declaration cov::Class* cls) → void; -> cov::Class::covariant
   abstract member-signature method invariant(cov::Class* cls) → void; -> cov::Class::invariant
   abstract member-signature method contravariant(cov::Class* cls) → void; -> cov::Class::contravariant
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -40,7 +40,7 @@
   synthetic constructor •() → self::SubClass*
     : super self::_SubClass&Class&Mixin::•()
     ;
-  method covariant(covariant self::SubClass* cls) → void {}
+  method covariant(covariant-by-declaration self::SubClass* cls) → void {}
   method invariant(self::SubClass* cls) → void {}
   method contravariant(core::Object* cls) → void {}
 }
@@ -56,7 +56,7 @@
   synthetic constructor •() → cov::Class
     : super core::Object::•()
     ;
-  abstract method covariant(covariant cov::Class cls) → void;
+  abstract method covariant(covariant-by-declaration cov::Class cls) → void;
   abstract method invariant(cov::Class cls) → void;
   abstract method contravariant(cov::Class cls) → void;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.outline.expect
index a3f4752..5004c96 100644
--- a/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/covariant_from_opt_in.dart.weak.outline.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::_SubClass&Class&Mixin*
     : super cov::Class::•()
     ;
-  abstract member-signature method covariant(covariant cov::Class* cls) → void; -> cov::Class::covariant
+  abstract member-signature method covariant(covariant-by-declaration cov::Class* cls) → void; -> cov::Class::covariant
   abstract member-signature method invariant(cov::Class* cls) → void; -> cov::Class::invariant
   abstract member-signature method contravariant(cov::Class* cls) → void; -> cov::Class::contravariant
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -39,7 +39,7 @@
 class SubClass extends self::_SubClass&Class&Mixin {
   synthetic constructor •() → self::SubClass*
     ;
-  method covariant(covariant self::SubClass* cls) → void
+  method covariant(covariant-by-declaration self::SubClass* cls) → void
     ;
   method invariant(self::SubClass* cls) → void
     ;
@@ -58,7 +58,7 @@
 abstract class Class extends core::Object {
   synthetic constructor •() → cov::Class
     ;
-  abstract method covariant(covariant cov::Class cls) → void;
+  abstract method covariant(covariant-by-declaration cov::Class cls) → void;
   abstract method invariant(cov::Class cls) → void;
   abstract method contravariant(cov::Class cls) → void;
 }
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect
index e60d718..a86bf71 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.expect
@@ -15,8 +15,8 @@
   synthetic constructor •() → self::Interface
     : super core::Object::•()
     ;
-  method extendedConcreteMixedInAbstractImplementedMethod(covariant core::num i) → void {}
-  method extendedConcreteMixedInConcreteImplementedMethod(covariant core::num i) → void {}
+  method extendedConcreteMixedInAbstractImplementedMethod(covariant-by-declaration core::num i) → void {}
+  method extendedConcreteMixedInConcreteImplementedMethod(covariant-by-declaration core::num i) → void {}
 }
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
   abstract method extendedConcreteMixedInAbstractMethod() → void;
@@ -31,9 +31,9 @@
   abstract mixin-stub method extendedConcreteMixedInAbstractMethod() → void; -> self::Mixin::extendedConcreteMixedInAbstractMethod
   mixin-super-stub method extendedConcreteMixedInConcreteMethod() → void
     return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}();
-  forwarding-stub method extendedConcreteMixedInAbstractImplementedMethod(covariant core::int i) → void
+  forwarding-stub method extendedConcreteMixedInAbstractImplementedMethod(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteMixedInAbstractImplementedMethod}(i);
-  forwarding-stub method extendedConcreteMixedInConcreteImplementedMethod(covariant core::int i) → void
+  forwarding-stub method extendedConcreteMixedInConcreteImplementedMethod(covariant-by-declaration core::int i) → void
     return super.{self::Mixin::extendedConcreteMixedInConcreteImplementedMethod}(i);
 }
 class Sub extends self::Class {
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.outline.expect
index 8a768bf..9e88134 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.outline.expect
@@ -17,9 +17,9 @@
 class Interface extends core::Object {
   synthetic constructor •() → self::Interface
     ;
-  method extendedConcreteMixedInAbstractImplementedMethod(covariant core::num i) → void
+  method extendedConcreteMixedInAbstractImplementedMethod(covariant-by-declaration core::num i) → void
     ;
-  method extendedConcreteMixedInConcreteImplementedMethod(covariant core::num i) → void
+  method extendedConcreteMixedInConcreteImplementedMethod(covariant-by-declaration core::num i) → void
     ;
 }
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
@@ -37,9 +37,9 @@
   abstract mixin-stub method extendedConcreteMixedInAbstractMethod() → void; -> self::Mixin::extendedConcreteMixedInAbstractMethod
   mixin-super-stub method extendedConcreteMixedInConcreteMethod() → void
     return super.{self::Mixin::extendedConcreteMixedInConcreteMethod}();
-  forwarding-stub method extendedConcreteMixedInAbstractImplementedMethod(covariant core::int i) → void
+  forwarding-stub method extendedConcreteMixedInAbstractImplementedMethod(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteMixedInAbstractImplementedMethod}(i);
-  forwarding-stub method extendedConcreteMixedInConcreteImplementedMethod(covariant core::int i) → void
+  forwarding-stub method extendedConcreteMixedInConcreteImplementedMethod(covariant-by-declaration core::int i) → void
     return super.{self::Mixin::extendedConcreteMixedInConcreteImplementedMethod}(i);
 }
 class Sub extends self::Class {
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect
index 92c7fe5..1dd4d41 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/abstract_mixin.dart.weak.transformed.expect
@@ -15,8 +15,8 @@
   synthetic constructor •() → self::Interface
     : super core::Object::•()
     ;
-  method extendedConcreteMixedInAbstractImplementedMethod(covariant core::num i) → void {}
-  method extendedConcreteMixedInConcreteImplementedMethod(covariant core::num i) → void {}
+  method extendedConcreteMixedInAbstractImplementedMethod(covariant-by-declaration core::num i) → void {}
+  method extendedConcreteMixedInConcreteImplementedMethod(covariant-by-declaration core::num i) → void {}
 }
 abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
   abstract method extendedConcreteMixedInAbstractMethod() → void;
@@ -30,9 +30,9 @@
     ;
   abstract method extendedConcreteMixedInAbstractMethod() → void;
   method extendedConcreteMixedInConcreteMethod() → void {}
-  method extendedConcreteMixedInAbstractImplementedMethod(covariant core::int i) → void
+  method extendedConcreteMixedInAbstractImplementedMethod(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteMixedInAbstractImplementedMethod}(i);
-  method extendedConcreteMixedInConcreteImplementedMethod(covariant core::int i) → void {}
+  method extendedConcreteMixedInConcreteImplementedMethod(covariant-by-declaration core::int i) → void {}
 }
 class Sub extends self::Class {
   synthetic constructor •() → self::Sub
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.expect
index 17fd9e4..2e8e69d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.expect
@@ -6,26 +6,26 @@
   synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  method method(covariant core::int a, core::int b) → dynamic {}
+  method method(covariant-by-declaration core::int a, core::int b) → dynamic {}
 }
 class M2 extends core::Object {
   synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
-  method method(core::int a, covariant core::int b) → dynamic {}
+  method method(core::int a, covariant-by-declaration core::int b) → dynamic {}
 }
 abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&M1
     : super core::Object::•()
     ;
-  mixin-super-stub method method(covariant core::int a, core::int b) → dynamic
+  mixin-super-stub method method(covariant-by-declaration core::int a, core::int b) → dynamic
     return super.{self::M1::method}(a, b);
 }
 abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&M1&M2
     : super self::_C&Object&M1::•()
     ;
-  forwarding-stub method method(covariant core::int a, covariant core::int b) → dynamic
+  forwarding-stub method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b) → dynamic
     return super.{self::M2::method}(a, b);
 }
 class C extends self::_C&Object&M1&M2 {
@@ -37,9 +37,9 @@
   synthetic constructor •() → self::Direct
     : super core::Object::•()
     ;
-  method positional(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
-  method optional([covariant core::int a = #C1, core::int b = #C1, covariant core::int c = #C1, core::int d = #C1]) → void {}
-  method named({covariant core::int a = #C1, core::int b = #C1, covariant core::int c = #C1, core::int d = #C1}) → void {}
+  method positional(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
+  method optional([covariant-by-declaration core::int a = #C1, core::int b = #C1, covariant-by-declaration core::int c = #C1, core::int d = #C1]) → void {}
+  method named({covariant-by-declaration core::int a = #C1, core::int b = #C1, covariant-by-declaration core::int c = #C1, core::int d = #C1}) → void {}
 }
 class Inherited extends self::Direct {
   synthetic constructor •() → self::Inherited
@@ -50,99 +50,99 @@
   synthetic constructor •() → self::Override1
     : super core::Object::•()
     ;
-  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
 }
 class Override2 extends self::Override1 {
   synthetic constructor •() → self::Override2
     : super self::Override1::•()
     ;
-  method method(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+  method method(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
 }
 class Override3 extends self::Override2 {
   synthetic constructor •() → self::Override3
     : super self::Override2::•()
     ;
-  method method(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+  method method(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
 }
 abstract class Implement1 extends core::Object {
   synthetic constructor •() → self::Implement1
     : super core::Object::•()
     ;
-  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
 }
 class Implement2 extends core::Object {
   synthetic constructor •() → self::Implement2
     : super core::Object::•()
     ;
-  method method(core::int a, covariant core::int b, core::int c, core::int d, core::int e) → void {}
+  method method(core::int a, covariant-by-declaration core::int b, core::int c, core::int d, core::int e) → void {}
 }
 class Implement3 extends core::Object {
   synthetic constructor •() → self::Implement3
     : super core::Object::•()
     ;
-  method method(core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
 }
 class Implement4 extends core::Object implements self::Implement3 {
   synthetic constructor •() → self::Implement4
     : super core::Object::•()
     ;
-  method method(core::int a, core::int b, covariant core::int c, covariant core::int d, core::int e) → void {}
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, core::int e) → void {}
 }
 class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
   synthetic constructor •() → self::Implement5
     : super core::Object::•()
     ;
-  method method(covariant core::int a, covariant core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void {}
+  method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void {}
 }
 class Interface1 extends core::Object {
   synthetic constructor •() → self::Interface1
     : super core::Object::•()
     ;
-  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
 }
 class Interface2 extends core::Object {
   synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
-  method method(core::int a, covariant core::int b, core::int c, core::int d, core::int e) → void {}
+  method method(core::int a, covariant-by-declaration core::int b, core::int c, core::int d, core::int e) → void {}
 }
 class Mixin1 extends core::Object {
   synthetic constructor •() → self::Mixin1
     : super core::Object::•()
     ;
-  method method(core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
 }
 class Mixin2 extends core::Object {
   synthetic constructor •() → self::Mixin2
     : super core::Object::•()
     ;
-  method method(core::int a, core::int b, core::int c, covariant core::int d, core::int e) → void {}
+  method method(core::int a, core::int b, core::int c, covariant-by-declaration core::int d, core::int e) → void {}
 }
 class Superclass extends core::Object {
   synthetic constructor •() → self::Superclass
     : super core::Object::•()
     ;
-  method method(core::int a, core::int b, core::int c, core::int d, covariant core::int e) → void {}
+  method method(core::int a, core::int b, core::int c, core::int d, covariant-by-declaration core::int e) → void {}
 }
 abstract class _Mixed&Superclass&Mixin1 = self::Superclass with self::Mixin1 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1
     : super self::Superclass::•()
     ;
-  forwarding-stub method method(core::int a, core::int b, covariant core::int c, core::int d, covariant core::int e) → void
+  forwarding-stub method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, covariant-by-declaration core::int e) → void
     return super.{self::Mixin1::method}(a, b, c, d, e);
 }
 abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2
     : super self::_Mixed&Superclass&Mixin1::•()
     ;
-  forwarding-stub method method(core::int a, core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void
+  forwarding-stub method method(core::int a, core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::Mixed
     : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
     ;
-  forwarding-stub method method(covariant core::int a, covariant core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void
+  forwarding-stub method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.outline.expect
index ac23e5b..cd1db8f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.outline.expect
@@ -5,27 +5,27 @@
 class M1 extends core::Object {
   synthetic constructor •() → self::M1
     ;
-  method method(covariant core::int a, core::int b) → dynamic
+  method method(covariant-by-declaration core::int a, core::int b) → dynamic
     ;
 }
 class M2 extends core::Object {
   synthetic constructor •() → self::M2
     ;
-  method method(core::int a, covariant core::int b) → dynamic
+  method method(core::int a, covariant-by-declaration core::int b) → dynamic
     ;
 }
 abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&M1
     : super core::Object::•()
     ;
-  mixin-super-stub method method(covariant core::int a, core::int b) → dynamic
+  mixin-super-stub method method(covariant-by-declaration core::int a, core::int b) → dynamic
     return super.{self::M1::method}(a, b);
 }
 abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&M1&M2
     : super self::_C&Object&M1::•()
     ;
-  forwarding-stub method method(covariant core::int a, covariant core::int b) → dynamic
+  forwarding-stub method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b) → dynamic
     return super.{self::M2::method}(a, b);
 }
 class C extends self::_C&Object&M1&M2 {
@@ -35,11 +35,11 @@
 class Direct extends core::Object {
   synthetic constructor •() → self::Direct
     ;
-  method positional(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void
+  method positional(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void
     ;
-  method optional([covariant core::int a = 0, core::int b = 0, covariant core::int c = 0, core::int d = 0]) → void
+  method optional([covariant-by-declaration core::int a = 0, core::int b = 0, covariant-by-declaration core::int c = 0, core::int d = 0]) → void
     ;
-  method named({covariant core::int a = 0, core::int b = 0, covariant core::int c = 0, core::int d = 0}) → void
+  method named({covariant-by-declaration core::int a = 0, core::int b = 0, covariant-by-declaration core::int c = 0, core::int d = 0}) → void
     ;
 }
 class Inherited extends self::Direct {
@@ -49,99 +49,99 @@
 class Override1 extends core::Object {
   synthetic constructor •() → self::Override1
     ;
-  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void
+  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void
     ;
 }
 class Override2 extends self::Override1 {
   synthetic constructor •() → self::Override2
     ;
-  method method(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void
+  method method(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void
     ;
 }
 class Override3 extends self::Override2 {
   synthetic constructor •() → self::Override3
     ;
-  method method(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void
+  method method(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void
     ;
 }
 abstract class Implement1 extends core::Object {
   synthetic constructor •() → self::Implement1
     ;
-  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void
+  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void
     ;
 }
 class Implement2 extends core::Object {
   synthetic constructor •() → self::Implement2
     ;
-  method method(core::int a, covariant core::int b, core::int c, core::int d, core::int e) → void
+  method method(core::int a, covariant-by-declaration core::int b, core::int c, core::int d, core::int e) → void
     ;
 }
 class Implement3 extends core::Object {
   synthetic constructor •() → self::Implement3
     ;
-  method method(core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void
     ;
 }
 class Implement4 extends core::Object implements self::Implement3 {
   synthetic constructor •() → self::Implement4
     ;
-  method method(core::int a, core::int b, covariant core::int c, covariant core::int d, core::int e) → void
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, core::int e) → void
     ;
 }
 class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
   synthetic constructor •() → self::Implement5
     ;
-  method method(covariant core::int a, covariant core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void
+  method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void
     ;
 }
 class Interface1 extends core::Object {
   synthetic constructor •() → self::Interface1
     ;
-  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void
+  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void
     ;
 }
 class Interface2 extends core::Object {
   synthetic constructor •() → self::Interface2
     ;
-  method method(core::int a, covariant core::int b, core::int c, core::int d, core::int e) → void
+  method method(core::int a, covariant-by-declaration core::int b, core::int c, core::int d, core::int e) → void
     ;
 }
 class Mixin1 extends core::Object {
   synthetic constructor •() → self::Mixin1
     ;
-  method method(core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void
     ;
 }
 class Mixin2 extends core::Object {
   synthetic constructor •() → self::Mixin2
     ;
-  method method(core::int a, core::int b, core::int c, covariant core::int d, core::int e) → void
+  method method(core::int a, core::int b, core::int c, covariant-by-declaration core::int d, core::int e) → void
     ;
 }
 class Superclass extends core::Object {
   synthetic constructor •() → self::Superclass
     ;
-  method method(core::int a, core::int b, core::int c, core::int d, covariant core::int e) → void
+  method method(core::int a, core::int b, core::int c, core::int d, covariant-by-declaration core::int e) → void
     ;
 }
 abstract class _Mixed&Superclass&Mixin1 = self::Superclass with self::Mixin1 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1
     : super self::Superclass::•()
     ;
-  forwarding-stub method method(core::int a, core::int b, covariant core::int c, core::int d, covariant core::int e) → void
+  forwarding-stub method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, covariant-by-declaration core::int e) → void
     return super.{self::Mixin1::method}(a, b, c, d, e);
 }
 abstract class _Mixed&Superclass&Mixin1&Mixin2 = self::_Mixed&Superclass&Mixin1 with self::Mixin2 /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2
     : super self::_Mixed&Superclass&Mixin1::•()
     ;
-  forwarding-stub method method(core::int a, core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void
+  forwarding-stub method method(core::int a, core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::Mixed
     ;
-  forwarding-stub method method(covariant core::int a, covariant core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void
+  forwarding-stub method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.transformed.expect
index 62abc3c..56bff8d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariance.dart.weak.transformed.expect
@@ -6,25 +6,25 @@
   synthetic constructor •() → self::M1
     : super core::Object::•()
     ;
-  method method(covariant core::int a, core::int b) → dynamic {}
+  method method(covariant-by-declaration core::int a, core::int b) → dynamic {}
 }
 class M2 extends core::Object {
   synthetic constructor •() → self::M2
     : super core::Object::•()
     ;
-  method method(core::int a, covariant core::int b) → dynamic {}
+  method method(core::int a, covariant-by-declaration core::int b) → dynamic {}
 }
 abstract class _C&Object&M1 extends core::Object implements self::M1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&M1
     : super core::Object::•()
     ;
-  method method(covariant core::int a, core::int b) → dynamic {}
+  method method(covariant-by-declaration core::int a, core::int b) → dynamic {}
 }
 abstract class _C&Object&M1&M2 extends self::_C&Object&M1 implements self::M2 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •() → self::_C&Object&M1&M2
     : super self::_C&Object&M1::•()
     ;
-  method method(covariant core::int a, covariant core::int b) → dynamic {}
+  method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b) → dynamic {}
 }
 class C extends self::_C&Object&M1&M2 {
   synthetic constructor •() → self::C
@@ -35,9 +35,9 @@
   synthetic constructor •() → self::Direct
     : super core::Object::•()
     ;
-  method positional(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
-  method optional([covariant core::int a = #C1, core::int b = #C1, covariant core::int c = #C1, core::int d = #C1]) → void {}
-  method named({covariant core::int a = #C1, core::int b = #C1, covariant core::int c = #C1, core::int d = #C1}) → void {}
+  method positional(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
+  method optional([covariant-by-declaration core::int a = #C1, core::int b = #C1, covariant-by-declaration core::int c = #C1, core::int d = #C1]) → void {}
+  method named({covariant-by-declaration core::int a = #C1, core::int b = #C1, covariant-by-declaration core::int c = #C1, core::int d = #C1}) → void {}
 }
 class Inherited extends self::Direct {
   synthetic constructor •() → self::Inherited
@@ -48,97 +48,97 @@
   synthetic constructor •() → self::Override1
     : super core::Object::•()
     ;
-  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
 }
 class Override2 extends self::Override1 {
   synthetic constructor •() → self::Override2
     : super self::Override1::•()
     ;
-  method method(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+  method method(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
 }
 class Override3 extends self::Override2 {
   synthetic constructor •() → self::Override3
     : super self::Override2::•()
     ;
-  method method(covariant core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+  method method(covariant-by-declaration core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
 }
 abstract class Implement1 extends core::Object {
   synthetic constructor •() → self::Implement1
     : super core::Object::•()
     ;
-  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
 }
 class Implement2 extends core::Object {
   synthetic constructor •() → self::Implement2
     : super core::Object::•()
     ;
-  method method(core::int a, covariant core::int b, core::int c, core::int d, core::int e) → void {}
+  method method(core::int a, covariant-by-declaration core::int b, core::int c, core::int d, core::int e) → void {}
 }
 class Implement3 extends core::Object {
   synthetic constructor •() → self::Implement3
     : super core::Object::•()
     ;
-  method method(core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
 }
 class Implement4 extends core::Object implements self::Implement3 {
   synthetic constructor •() → self::Implement4
     : super core::Object::•()
     ;
-  method method(core::int a, core::int b, covariant core::int c, covariant core::int d, core::int e) → void {}
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, core::int e) → void {}
 }
 class Implement5 extends core::Object implements self::Implement1, self::Implement2, self::Implement4 {
   synthetic constructor •() → self::Implement5
     : super core::Object::•()
     ;
-  method method(covariant core::int a, covariant core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void {}
+  method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void {}
 }
 class Interface1 extends core::Object {
   synthetic constructor •() → self::Interface1
     : super core::Object::•()
     ;
-  method method(covariant core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
+  method method(covariant-by-declaration core::int a, core::int b, core::int c, core::int d, core::int e) → void {}
 }
 class Interface2 extends core::Object {
   synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
-  method method(core::int a, covariant core::int b, core::int c, core::int d, core::int e) → void {}
+  method method(core::int a, covariant-by-declaration core::int b, core::int c, core::int d, core::int e) → void {}
 }
 class Mixin1 extends core::Object {
   synthetic constructor •() → self::Mixin1
     : super core::Object::•()
     ;
-  method method(core::int a, core::int b, covariant core::int c, core::int d, core::int e) → void {}
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, core::int e) → void {}
 }
 class Mixin2 extends core::Object {
   synthetic constructor •() → self::Mixin2
     : super core::Object::•()
     ;
-  method method(core::int a, core::int b, core::int c, covariant core::int d, core::int e) → void {}
+  method method(core::int a, core::int b, core::int c, covariant-by-declaration core::int d, core::int e) → void {}
 }
 class Superclass extends core::Object {
   synthetic constructor •() → self::Superclass
     : super core::Object::•()
     ;
-  method method(core::int a, core::int b, core::int c, core::int d, covariant core::int e) → void {}
+  method method(core::int a, core::int b, core::int c, core::int d, covariant-by-declaration core::int e) → void {}
 }
 abstract class _Mixed&Superclass&Mixin1 extends self::Superclass implements self::Mixin1 /*isAnonymousMixin,isEliminatedMixin*/  {
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1
     : super self::Superclass::•()
     ;
-  method method(core::int a, core::int b, covariant core::int c, core::int d, covariant core::int e) → void {}
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, core::int d, covariant-by-declaration core::int e) → void {}
 }
 abstract class _Mixed&Superclass&Mixin1&Mixin2 extends self::_Mixed&Superclass&Mixin1 implements self::Mixin2 /*isAnonymousMixin,isEliminatedMixin*/  {
   synthetic constructor •() → self::_Mixed&Superclass&Mixin1&Mixin2
     : super self::_Mixed&Superclass&Mixin1::•()
     ;
-  method method(core::int a, core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void {}
+  method method(core::int a, core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void {}
 }
 class Mixed extends self::_Mixed&Superclass&Mixin1&Mixin2 implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::Mixed
     : super self::_Mixed&Superclass&Mixin1&Mixin2::•()
     ;
-  forwarding-stub method method(covariant core::int a, covariant core::int b, covariant core::int c, covariant core::int d, covariant core::int e) → void
+  forwarding-stub method method(covariant-by-declaration core::int a, covariant-by-declaration core::int b, covariant-by-declaration core::int c, covariant-by-declaration core::int d, covariant-by-declaration core::int e) → void
     return super.{self::Mixin2::method}(a, b, c, d, e);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.expect
index 7ffa395..42a0eb1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
-  operator ==(covariant self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
     return true;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -22,14 +22,14 @@
   synthetic constructor •() → self::B*
     : super self::A::•()
     ;
-  operator ==(covariant self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
     return true;
 }
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  operator ==(covariant generic-covariant-impl self::C<self::C::T*>* other) → core::bool*
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T*>* other) → core::bool*
     return true;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.outline.expect
index 971fdd2..078914c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   synthetic constructor •() → self::A*
     ;
-  operator ==(covariant self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -20,13 +20,13 @@
 class B extends self::A {
   synthetic constructor •() → self::B*
     ;
-  operator ==(covariant self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
     ;
 }
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  operator ==(covariant generic-covariant-impl self::C<self::C::T*>* other) → core::bool*
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T*>* other) → core::bool*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.transformed.expect
index 7ffa395..42a0eb1 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/covariant_equals.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
-  operator ==(covariant self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
     return true;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -22,14 +22,14 @@
   synthetic constructor •() → self::B*
     : super self::A::•()
     ;
-  operator ==(covariant self::A* other) → core::bool*
+  operator ==(covariant-by-declaration self::A* other) → core::bool*
     return true;
 }
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  operator ==(covariant generic-covariant-impl self::C<self::C::T*>* other) → core::bool*
+  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T*>* other) → core::bool*
     return true;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect
index c1f6edc..be2afd3 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.expect
@@ -109,15 +109,15 @@
   field core::num field1 = 0;
   field core::num field2 = 0;
   field core::num field3 = 0;
-  covariant field core::num field4 = 0;
-  covariant field core::int field5 = 0;
+  covariant-by-declaration field core::num field4 = 0;
+  covariant-by-declaration field core::int field5 = 0;
   synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
 }
 class Interface extends core::Object {
-  covariant field core::int field1 = 0;
-  covariant field core::int field2 = 0;
+  covariant-by-declaration field core::int field1 = 0;
+  covariant-by-declaration field core::int field2 = 0;
   field core::int field4 = 0;
   field core::int field5 = 0;
   synthetic constructor •() → self::Interface
@@ -129,16 +129,16 @@
     : super self::Super::•()
     ;
   abstract get field1() → core::int;
-  forwarding-stub forwarding-semi-stub set field1(covariant core::int #externalFieldValue) → void
+  forwarding-stub forwarding-semi-stub set field1(covariant-by-declaration core::int #externalFieldValue) → void
     return super.{self::Super::field1} = #externalFieldValue;
   abstract get field2() → core::String;
-  forwarding-stub forwarding-semi-stub set field2(covariant core::String #externalFieldValue) → void
+  forwarding-stub forwarding-semi-stub set field2(covariant-by-declaration core::String #externalFieldValue) → void
     return super.{self::Super::field2} = #externalFieldValue as core::num;
   abstract get field3() → core::int;
   abstract set field3(core::int #externalFieldValue) → void;
   abstract get field4() → core::int;
-  abstract set field4(covariant core::int #externalFieldValue) → void;
+  abstract set field4(covariant-by-declaration core::int #externalFieldValue) → void;
   abstract get field5() → core::num;
-  abstract set field5(covariant core::num #externalFieldValue) → void;
+  abstract set field5(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.outline.expect
index f0a2a73..ca4fea2 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_field.dart.weak.outline.expect
@@ -109,14 +109,14 @@
   field core::num field1;
   field core::num field2;
   field core::num field3;
-  covariant field core::num field4;
-  covariant field core::int field5;
+  covariant-by-declaration field core::num field4;
+  covariant-by-declaration field core::int field5;
   synthetic constructor •() → self::Super
     ;
 }
 class Interface extends core::Object {
-  covariant field core::int field1;
-  covariant field core::int field2;
+  covariant-by-declaration field core::int field1;
+  covariant-by-declaration field core::int field2;
   field core::int field4;
   field core::int field5;
   synthetic constructor •() → self::Interface
@@ -126,17 +126,17 @@
   synthetic constructor •() → self::Class
     ;
   abstract get field1() → core::int;
-  forwarding-stub forwarding-semi-stub set field1(covariant core::int #externalFieldValue) → void
+  forwarding-stub forwarding-semi-stub set field1(covariant-by-declaration core::int #externalFieldValue) → void
     return super.{self::Super::field1} = #externalFieldValue;
   abstract get field2() → core::String;
-  forwarding-stub forwarding-semi-stub set field2(covariant core::String #externalFieldValue) → void
+  forwarding-stub forwarding-semi-stub set field2(covariant-by-declaration core::String #externalFieldValue) → void
     return super.{self::Super::field2} = #externalFieldValue as core::num;
   abstract get field3() → core::int;
   abstract set field3(core::int #externalFieldValue) → void;
   abstract get field4() → core::int;
-  abstract set field4(covariant core::int #externalFieldValue) → void;
+  abstract set field4(covariant-by-declaration core::int #externalFieldValue) → void;
   abstract get field5() → core::num;
-  abstract set field5(covariant core::num #externalFieldValue) → void;
+  abstract set field5(covariant-by-declaration core::num #externalFieldValue) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect
index 3588a5b..e670210f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.expect
@@ -47,15 +47,15 @@
   method method1(core::num n) → void {}
   method method2(core::num n) → void {}
   method method3(core::num n) → void {}
-  method method4(covariant core::num i) → void {}
-  method method5(covariant core::int i) → void {}
+  method method4(covariant-by-declaration core::num i) → void {}
+  method method5(covariant-by-declaration core::int i) → void {}
 }
 class Interface extends core::Object {
   synthetic constructor •() → self::Interface
     : super core::Object::•()
     ;
-  method method1(covariant core::int i) → void {}
-  method method2(covariant core::int i) → void {}
+  method method1(covariant-by-declaration core::int i) → void {}
+  method method2(covariant-by-declaration core::int i) → void {}
   method method4(core::int i) → void {}
   method method5(core::int i) → void {}
 }
@@ -63,12 +63,12 @@
   synthetic constructor •() → self::Class
     : super self::Super::•()
     ;
-  forwarding-stub forwarding-semi-stub method method1(covariant core::int i) → void
+  forwarding-stub forwarding-semi-stub method method1(covariant-by-declaration core::int i) → void
     return super.{self::Super::method1}(i);
-  forwarding-stub forwarding-semi-stub method method2(covariant core::String i) → void
+  forwarding-stub forwarding-semi-stub method method2(covariant-by-declaration core::String i) → void
     return super.{self::Super::method2}(i as core::num);
   abstract method method3(core::int i) → void;
-  abstract method method4(covariant core::int i) → void;
-  abstract method method5(covariant core::num n) → void;
+  abstract method method4(covariant-by-declaration core::int i) → void;
+  abstract method method5(covariant-by-declaration core::num n) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.outline.expect
index 8e6faa3..dc87ebf 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_method.dart.weak.outline.expect
@@ -49,17 +49,17 @@
     ;
   method method3(core::num n) → void
     ;
-  method method4(covariant core::num i) → void
+  method method4(covariant-by-declaration core::num i) → void
     ;
-  method method5(covariant core::int i) → void
+  method method5(covariant-by-declaration core::int i) → void
     ;
 }
 class Interface extends core::Object {
   synthetic constructor •() → self::Interface
     ;
-  method method1(covariant core::int i) → void
+  method method1(covariant-by-declaration core::int i) → void
     ;
-  method method2(covariant core::int i) → void
+  method method2(covariant-by-declaration core::int i) → void
     ;
   method method4(core::int i) → void
     ;
@@ -69,13 +69,13 @@
 class Class extends self::Super implements self::Interface {
   synthetic constructor •() → self::Class
     ;
-  forwarding-stub forwarding-semi-stub method method1(covariant core::int i) → void
+  forwarding-stub forwarding-semi-stub method method1(covariant-by-declaration core::int i) → void
     return super.{self::Super::method1}(i);
-  forwarding-stub forwarding-semi-stub method method2(covariant core::String i) → void
+  forwarding-stub forwarding-semi-stub method method2(covariant-by-declaration core::String i) → void
     return super.{self::Super::method2}(i as core::num);
   abstract method method3(core::int i) → void;
-  abstract method method4(covariant core::int i) → void;
-  abstract method method5(covariant core::num n) → void;
+  abstract method method4(covariant-by-declaration core::int i) → void;
+  abstract method method5(covariant-by-declaration core::num n) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect
index 897ac2d..f6fdb96 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.expect
@@ -47,15 +47,15 @@
   set setter1(core::num n) → void {}
   set setter2(core::num n) → void {}
   set setter3(core::num n) → void {}
-  set setter4(covariant core::num i) → void {}
-  set setter5(covariant core::int i) → void {}
+  set setter4(covariant-by-declaration core::num i) → void {}
+  set setter5(covariant-by-declaration core::int i) → void {}
 }
 class Interface extends core::Object {
   synthetic constructor •() → self::Interface
     : super core::Object::•()
     ;
-  set setter1(covariant core::int i) → void {}
-  set setter2(covariant core::int i) → void {}
+  set setter1(covariant-by-declaration core::int i) → void {}
+  set setter2(covariant-by-declaration core::int i) → void {}
   set setter4(core::int i) → void {}
   set setter5(core::int i) → void {}
 }
@@ -63,12 +63,12 @@
   synthetic constructor •() → self::Class
     : super self::Super::•()
     ;
-  forwarding-stub forwarding-semi-stub set setter1(covariant core::int i) → void
+  forwarding-stub forwarding-semi-stub set setter1(covariant-by-declaration core::int i) → void
     return super.{self::Super::setter1} = i;
-  forwarding-stub forwarding-semi-stub set setter2(covariant core::String i) → void
+  forwarding-stub forwarding-semi-stub set setter2(covariant-by-declaration core::String i) → void
     return super.{self::Super::setter2} = i as core::num;
   abstract set setter3(core::int i) → void;
-  abstract set setter4(covariant core::int i) → void;
-  abstract set setter5(covariant core::num n) → void;
+  abstract set setter4(covariant-by-declaration core::int i) → void;
+  abstract set setter5(covariant-by-declaration core::num n) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.outline.expect
index 7431f4c..1ac459f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_semi_stub_setter.dart.weak.outline.expect
@@ -49,17 +49,17 @@
     ;
   set setter3(core::num n) → void
     ;
-  set setter4(covariant core::num i) → void
+  set setter4(covariant-by-declaration core::num i) → void
     ;
-  set setter5(covariant core::int i) → void
+  set setter5(covariant-by-declaration core::int i) → void
     ;
 }
 class Interface extends core::Object {
   synthetic constructor •() → self::Interface
     ;
-  set setter1(covariant core::int i) → void
+  set setter1(covariant-by-declaration core::int i) → void
     ;
-  set setter2(covariant core::int i) → void
+  set setter2(covariant-by-declaration core::int i) → void
     ;
   set setter4(core::int i) → void
     ;
@@ -69,13 +69,13 @@
 class Class extends self::Super implements self::Interface {
   synthetic constructor •() → self::Class
     ;
-  forwarding-stub forwarding-semi-stub set setter1(covariant core::int i) → void
+  forwarding-stub forwarding-semi-stub set setter1(covariant-by-declaration core::int i) → void
     return super.{self::Super::setter1} = i;
-  forwarding-stub forwarding-semi-stub set setter2(covariant core::String i) → void
+  forwarding-stub forwarding-semi-stub set setter2(covariant-by-declaration core::String i) → void
     return super.{self::Super::setter2} = i as core::num;
   abstract set setter3(core::int i) → void;
-  abstract set setter4(covariant core::int i) → void;
-  abstract set setter5(covariant core::num n) → void;
+  abstract set setter4(covariant-by-declaration core::int i) → void;
+  abstract set setter5(covariant-by-declaration core::num n) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.expect
index bb5cf3f..a15a8cc 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Super<self::Super::T%>
     : super core::Object::•()
     ;
-  method method(generic-covariant-impl self::Super::T% t) → void {}
+  method method(covariant-by-class self::Super::T% t) → void {}
 }
 class Mixin extends core::Object {
   synthetic constructor •() → self::Mixin
@@ -18,7 +18,7 @@
   synthetic constructor •() → self::Class
     : super self::Super::•()
     ;
-  forwarding-stub method method(generic-covariant-impl core::int t) → void
+  forwarding-stub method method(covariant-by-class core::int t) → void
     return super.{self::Mixin::method}(t);
 }
 class Subclass extends self::Class {
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.outline.expect
index 035eb65..3e78979 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class Super<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::Super<self::Super::T%>
     ;
-  method method(generic-covariant-impl self::Super::T% t) → void
+  method method(covariant-by-class self::Super::T% t) → void
     ;
 }
 class Mixin extends core::Object {
@@ -18,7 +18,7 @@
   synthetic constructor •() → self::Class
     : super self::Super::•()
     ;
-  forwarding-stub method method(generic-covariant-impl core::int t) → void
+  forwarding-stub method method(covariant-by-class core::int t) → void
     return super.{self::Mixin::method}(t);
 }
 class Subclass extends self::Class {
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.transformed.expect
index 88c7f59..5236cd2 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stub_call.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::Super<self::Super::T%>
     : super core::Object::•()
     ;
-  method method(generic-covariant-impl self::Super::T% t) → void {}
+  method method(covariant-by-class self::Super::T% t) → void {}
 }
 class Mixin extends core::Object {
   synthetic constructor •() → self::Mixin
@@ -18,7 +18,7 @@
   synthetic constructor •() → self::Class
     : super self::Super::•()
     ;
-  method method(generic-covariant-impl core::int t) → void {}
+  method method(covariant-by-class core::int t) → void {}
 }
 class Subclass extends self::Class {
   synthetic constructor •() → self::Subclass
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.expect
index e9fa156..16ebb44 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.expect
@@ -122,25 +122,25 @@
 import "dart:core" as core;
 
 abstract class Super extends core::Object {
-  covariant field core::int extendedConcreteCovariantField = 0;
-  covariant field core::int extendedConcreteCovariantImplementedField = 0;
+  covariant-by-declaration field core::int extendedConcreteCovariantField = 0;
+  covariant-by-declaration field core::int extendedConcreteCovariantImplementedField = 0;
   field core::int extendedConcreteImplementedCovariantField = 0;
   synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
   abstract get extendedAbstractCovariantField() → core::int;
-  abstract set extendedAbstractCovariantField(covariant core::int #externalFieldValue) → void;
+  abstract set extendedAbstractCovariantField(covariant-by-declaration core::int #externalFieldValue) → void;
   abstract get extendedAbstractCovariantImplementedField() → core::int;
-  abstract set extendedAbstractCovariantImplementedField(covariant core::int #externalFieldValue) → void;
+  abstract set extendedAbstractCovariantImplementedField(covariant-by-declaration core::int #externalFieldValue) → void;
   abstract get extendedAbstractImplementedCovariantField() → core::int;
   abstract set extendedAbstractImplementedCovariantField(core::int #externalFieldValue) → void;
 }
 class Interface1 extends core::Object {
   field core::int extendedConcreteCovariantImplementedField = 0;
   field core::int extendedAbstractCovariantImplementedField = 0;
-  covariant field core::int extendedConcreteImplementedCovariantField = 0;
-  covariant field core::int extendedAbstractImplementedCovariantField = 0;
-  covariant field core::int implementsMultipleCovariantField1 = 0;
+  covariant-by-declaration field core::int extendedConcreteImplementedCovariantField = 0;
+  covariant-by-declaration field core::int extendedAbstractImplementedCovariantField = 0;
+  covariant-by-declaration field core::int implementsMultipleCovariantField1 = 0;
   field core::int implementsMultipleCovariantField2 = 0;
   synthetic constructor •() → self::Interface1
     : super core::Object::•()
@@ -148,7 +148,7 @@
 }
 class Interface2 extends core::Object {
   field core::int implementsMultipleCovariantField1 = 0;
-  covariant field core::int implementsMultipleCovariantField2 = 0;
+  covariant-by-declaration field core::int implementsMultipleCovariantField2 = 0;
   synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
@@ -157,10 +157,10 @@
   synthetic constructor •() → self::AbstractClass
     : super self::Super::•()
     ;
-  forwarding-stub set extendedConcreteImplementedCovariantField(covariant core::int value) → void
+  forwarding-stub set extendedConcreteImplementedCovariantField(covariant-by-declaration core::int value) → void
     return super.{self::Super::extendedConcreteImplementedCovariantField} = value;
-  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant core::int #externalFieldValue) → void;
-  abstract forwarding-stub set implementsMultipleCovariantField2(covariant core::int value) → void;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant-by-declaration core::int #externalFieldValue) → void;
+  abstract forwarding-stub set implementsMultipleCovariantField2(covariant-by-declaration core::int value) → void;
 }
 class ConcreteSub extends self::AbstractClass {
   synthetic constructor •() → self::ConcreteSub
@@ -171,9 +171,9 @@
   synthetic constructor •() → self::ConcreteClass
     : super self::Super::•()
     ;
-  forwarding-stub set extendedConcreteImplementedCovariantField(covariant core::int value) → void
+  forwarding-stub set extendedConcreteImplementedCovariantField(covariant-by-declaration core::int value) → void
     return super.{self::Super::extendedConcreteImplementedCovariantField} = value;
-  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant core::int #externalFieldValue) → void;
-  abstract forwarding-stub set implementsMultipleCovariantField2(covariant core::int value) → void;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant-by-declaration core::int #externalFieldValue) → void;
+  abstract forwarding-stub set implementsMultipleCovariantField2(covariant-by-declaration core::int value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.outline.expect
index 9c30a70..c09bd68 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.outline.expect
@@ -122,41 +122,41 @@
 import "dart:core" as core;
 
 abstract class Super extends core::Object {
-  covariant field core::int extendedConcreteCovariantField;
-  covariant field core::int extendedConcreteCovariantImplementedField;
+  covariant-by-declaration field core::int extendedConcreteCovariantField;
+  covariant-by-declaration field core::int extendedConcreteCovariantImplementedField;
   field core::int extendedConcreteImplementedCovariantField;
   synthetic constructor •() → self::Super
     ;
   abstract get extendedAbstractCovariantField() → core::int;
-  abstract set extendedAbstractCovariantField(covariant core::int #externalFieldValue) → void;
+  abstract set extendedAbstractCovariantField(covariant-by-declaration core::int #externalFieldValue) → void;
   abstract get extendedAbstractCovariantImplementedField() → core::int;
-  abstract set extendedAbstractCovariantImplementedField(covariant core::int #externalFieldValue) → void;
+  abstract set extendedAbstractCovariantImplementedField(covariant-by-declaration core::int #externalFieldValue) → void;
   abstract get extendedAbstractImplementedCovariantField() → core::int;
   abstract set extendedAbstractImplementedCovariantField(core::int #externalFieldValue) → void;
 }
 class Interface1 extends core::Object {
   field core::int extendedConcreteCovariantImplementedField;
   field core::int extendedAbstractCovariantImplementedField;
-  covariant field core::int extendedConcreteImplementedCovariantField;
-  covariant field core::int extendedAbstractImplementedCovariantField;
-  covariant field core::int implementsMultipleCovariantField1;
+  covariant-by-declaration field core::int extendedConcreteImplementedCovariantField;
+  covariant-by-declaration field core::int extendedAbstractImplementedCovariantField;
+  covariant-by-declaration field core::int implementsMultipleCovariantField1;
   field core::int implementsMultipleCovariantField2;
   synthetic constructor •() → self::Interface1
     ;
 }
 class Interface2 extends core::Object {
   field core::int implementsMultipleCovariantField1;
-  covariant field core::int implementsMultipleCovariantField2;
+  covariant-by-declaration field core::int implementsMultipleCovariantField2;
   synthetic constructor •() → self::Interface2
     ;
 }
 abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::AbstractClass
     ;
-  forwarding-stub set extendedConcreteImplementedCovariantField(covariant core::int value) → void
+  forwarding-stub set extendedConcreteImplementedCovariantField(covariant-by-declaration core::int value) → void
     return super.{self::Super::extendedConcreteImplementedCovariantField} = value;
-  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant core::int #externalFieldValue) → void;
-  abstract forwarding-stub set implementsMultipleCovariantField2(covariant core::int value) → void;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant-by-declaration core::int #externalFieldValue) → void;
+  abstract forwarding-stub set implementsMultipleCovariantField2(covariant-by-declaration core::int value) → void;
 }
 class ConcreteSub extends self::AbstractClass {
   synthetic constructor •() → self::ConcreteSub
@@ -165,10 +165,10 @@
 class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::ConcreteClass
     ;
-  forwarding-stub set extendedConcreteImplementedCovariantField(covariant core::int value) → void
+  forwarding-stub set extendedConcreteImplementedCovariantField(covariant-by-declaration core::int value) → void
     return super.{self::Super::extendedConcreteImplementedCovariantField} = value;
-  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant core::int #externalFieldValue) → void;
-  abstract forwarding-stub set implementsMultipleCovariantField2(covariant core::int value) → void;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant-by-declaration core::int #externalFieldValue) → void;
+  abstract forwarding-stub set implementsMultipleCovariantField2(covariant-by-declaration core::int value) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.transformed.expect
index e9fa156..16ebb44 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_field.dart.weak.transformed.expect
@@ -122,25 +122,25 @@
 import "dart:core" as core;
 
 abstract class Super extends core::Object {
-  covariant field core::int extendedConcreteCovariantField = 0;
-  covariant field core::int extendedConcreteCovariantImplementedField = 0;
+  covariant-by-declaration field core::int extendedConcreteCovariantField = 0;
+  covariant-by-declaration field core::int extendedConcreteCovariantImplementedField = 0;
   field core::int extendedConcreteImplementedCovariantField = 0;
   synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
   abstract get extendedAbstractCovariantField() → core::int;
-  abstract set extendedAbstractCovariantField(covariant core::int #externalFieldValue) → void;
+  abstract set extendedAbstractCovariantField(covariant-by-declaration core::int #externalFieldValue) → void;
   abstract get extendedAbstractCovariantImplementedField() → core::int;
-  abstract set extendedAbstractCovariantImplementedField(covariant core::int #externalFieldValue) → void;
+  abstract set extendedAbstractCovariantImplementedField(covariant-by-declaration core::int #externalFieldValue) → void;
   abstract get extendedAbstractImplementedCovariantField() → core::int;
   abstract set extendedAbstractImplementedCovariantField(core::int #externalFieldValue) → void;
 }
 class Interface1 extends core::Object {
   field core::int extendedConcreteCovariantImplementedField = 0;
   field core::int extendedAbstractCovariantImplementedField = 0;
-  covariant field core::int extendedConcreteImplementedCovariantField = 0;
-  covariant field core::int extendedAbstractImplementedCovariantField = 0;
-  covariant field core::int implementsMultipleCovariantField1 = 0;
+  covariant-by-declaration field core::int extendedConcreteImplementedCovariantField = 0;
+  covariant-by-declaration field core::int extendedAbstractImplementedCovariantField = 0;
+  covariant-by-declaration field core::int implementsMultipleCovariantField1 = 0;
   field core::int implementsMultipleCovariantField2 = 0;
   synthetic constructor •() → self::Interface1
     : super core::Object::•()
@@ -148,7 +148,7 @@
 }
 class Interface2 extends core::Object {
   field core::int implementsMultipleCovariantField1 = 0;
-  covariant field core::int implementsMultipleCovariantField2 = 0;
+  covariant-by-declaration field core::int implementsMultipleCovariantField2 = 0;
   synthetic constructor •() → self::Interface2
     : super core::Object::•()
     ;
@@ -157,10 +157,10 @@
   synthetic constructor •() → self::AbstractClass
     : super self::Super::•()
     ;
-  forwarding-stub set extendedConcreteImplementedCovariantField(covariant core::int value) → void
+  forwarding-stub set extendedConcreteImplementedCovariantField(covariant-by-declaration core::int value) → void
     return super.{self::Super::extendedConcreteImplementedCovariantField} = value;
-  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant core::int #externalFieldValue) → void;
-  abstract forwarding-stub set implementsMultipleCovariantField2(covariant core::int value) → void;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant-by-declaration core::int #externalFieldValue) → void;
+  abstract forwarding-stub set implementsMultipleCovariantField2(covariant-by-declaration core::int value) → void;
 }
 class ConcreteSub extends self::AbstractClass {
   synthetic constructor •() → self::ConcreteSub
@@ -171,9 +171,9 @@
   synthetic constructor •() → self::ConcreteClass
     : super self::Super::•()
     ;
-  forwarding-stub set extendedConcreteImplementedCovariantField(covariant core::int value) → void
+  forwarding-stub set extendedConcreteImplementedCovariantField(covariant-by-declaration core::int value) → void
     return super.{self::Super::extendedConcreteImplementedCovariantField} = value;
-  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant core::int #externalFieldValue) → void;
-  abstract forwarding-stub set implementsMultipleCovariantField2(covariant core::int value) → void;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantField(covariant-by-declaration core::int #externalFieldValue) → void;
+  abstract forwarding-stub set implementsMultipleCovariantField2(covariant-by-declaration core::int value) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.expect
index e15c8ba..c62e3f2 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.expect
@@ -101,10 +101,10 @@
   synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
-  method extendedConcreteCovariantMethod(covariant core::int i) → void {}
-  abstract method extendedAbstractCovariantMethod(covariant core::int i) → void;
-  method extendedConcreteCovariantImplementedMethod(covariant core::int i) → void {}
-  abstract method extendedAbstractCovariantImplementedMethod(covariant core::int i) → void;
+  method extendedConcreteCovariantMethod(covariant-by-declaration core::int i) → void {}
+  abstract method extendedAbstractCovariantMethod(covariant-by-declaration core::int i) → void;
+  method extendedConcreteCovariantImplementedMethod(covariant-by-declaration core::int i) → void {}
+  abstract method extendedAbstractCovariantImplementedMethod(covariant-by-declaration core::int i) → void;
   method extendedConcreteImplementedCovariantMethod(core::int i) → void {}
   abstract method extendedAbstractImplementedCovariantMethod(core::int i) → void;
 }
@@ -114,9 +114,9 @@
     ;
   method extendedConcreteCovariantImplementedMethod(core::int i) → void {}
   method extendedAbstractCovariantImplementedMethod(core::int i) → void {}
-  method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void {}
-  method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void {}
-  method implementsMultipleCovariantMethod1(covariant core::int i) → void {}
+  method extendedConcreteImplementedCovariantMethod(covariant-by-declaration core::int i) → void {}
+  method extendedAbstractImplementedCovariantMethod(covariant-by-declaration core::int i) → void {}
+  method implementsMultipleCovariantMethod1(covariant-by-declaration core::int i) → void {}
   method implementsMultipleCovariantMethod2(core::int i) → void {}
 }
 class Interface2 extends core::Object {
@@ -124,16 +124,16 @@
     : super core::Object::•()
     ;
   method implementsMultipleCovariantMethod1(core::int i) → void {}
-  method implementsMultipleCovariantMethod2(covariant core::int i) → void {}
+  method implementsMultipleCovariantMethod2(covariant-by-declaration core::int i) → void {}
 }
 abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::AbstractClass
     : super self::Super::•()
     ;
-  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void
+  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteImplementedCovariantMethod}(i);
-  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void;
-  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant core::int i) → void;
+  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant-by-declaration core::int i) → void;
 }
 class ConcreteSub extends self::AbstractClass {
   synthetic constructor •() → self::ConcreteSub
@@ -144,9 +144,9 @@
   synthetic constructor •() → self::ConcreteClass
     : super self::Super::•()
     ;
-  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void
+  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteImplementedCovariantMethod}(i);
-  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void;
-  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant core::int i) → void;
+  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant-by-declaration core::int i) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.outline.expect
index 78bd6c1..009a47a 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.outline.expect
@@ -100,12 +100,12 @@
 abstract class Super extends core::Object {
   synthetic constructor •() → self::Super
     ;
-  method extendedConcreteCovariantMethod(covariant core::int i) → void
+  method extendedConcreteCovariantMethod(covariant-by-declaration core::int i) → void
     ;
-  abstract method extendedAbstractCovariantMethod(covariant core::int i) → void;
-  method extendedConcreteCovariantImplementedMethod(covariant core::int i) → void
+  abstract method extendedAbstractCovariantMethod(covariant-by-declaration core::int i) → void;
+  method extendedConcreteCovariantImplementedMethod(covariant-by-declaration core::int i) → void
     ;
-  abstract method extendedAbstractCovariantImplementedMethod(covariant core::int i) → void;
+  abstract method extendedAbstractCovariantImplementedMethod(covariant-by-declaration core::int i) → void;
   method extendedConcreteImplementedCovariantMethod(core::int i) → void
     ;
   abstract method extendedAbstractImplementedCovariantMethod(core::int i) → void;
@@ -117,11 +117,11 @@
     ;
   method extendedAbstractCovariantImplementedMethod(core::int i) → void
     ;
-  method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void
+  method extendedConcreteImplementedCovariantMethod(covariant-by-declaration core::int i) → void
     ;
-  method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void
+  method extendedAbstractImplementedCovariantMethod(covariant-by-declaration core::int i) → void
     ;
-  method implementsMultipleCovariantMethod1(covariant core::int i) → void
+  method implementsMultipleCovariantMethod1(covariant-by-declaration core::int i) → void
     ;
   method implementsMultipleCovariantMethod2(core::int i) → void
     ;
@@ -131,16 +131,16 @@
     ;
   method implementsMultipleCovariantMethod1(core::int i) → void
     ;
-  method implementsMultipleCovariantMethod2(covariant core::int i) → void
+  method implementsMultipleCovariantMethod2(covariant-by-declaration core::int i) → void
     ;
 }
 abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::AbstractClass
     ;
-  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void
+  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteImplementedCovariantMethod}(i);
-  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void;
-  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant core::int i) → void;
+  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant-by-declaration core::int i) → void;
 }
 class ConcreteSub extends self::AbstractClass {
   synthetic constructor •() → self::ConcreteSub
@@ -149,10 +149,10 @@
 class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::ConcreteClass
     ;
-  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void
+  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteImplementedCovariantMethod}(i);
-  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void;
-  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant core::int i) → void;
+  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant-by-declaration core::int i) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.transformed.expect
index e15c8ba..c62e3f2 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_method.dart.weak.transformed.expect
@@ -101,10 +101,10 @@
   synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
-  method extendedConcreteCovariantMethod(covariant core::int i) → void {}
-  abstract method extendedAbstractCovariantMethod(covariant core::int i) → void;
-  method extendedConcreteCovariantImplementedMethod(covariant core::int i) → void {}
-  abstract method extendedAbstractCovariantImplementedMethod(covariant core::int i) → void;
+  method extendedConcreteCovariantMethod(covariant-by-declaration core::int i) → void {}
+  abstract method extendedAbstractCovariantMethod(covariant-by-declaration core::int i) → void;
+  method extendedConcreteCovariantImplementedMethod(covariant-by-declaration core::int i) → void {}
+  abstract method extendedAbstractCovariantImplementedMethod(covariant-by-declaration core::int i) → void;
   method extendedConcreteImplementedCovariantMethod(core::int i) → void {}
   abstract method extendedAbstractImplementedCovariantMethod(core::int i) → void;
 }
@@ -114,9 +114,9 @@
     ;
   method extendedConcreteCovariantImplementedMethod(core::int i) → void {}
   method extendedAbstractCovariantImplementedMethod(core::int i) → void {}
-  method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void {}
-  method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void {}
-  method implementsMultipleCovariantMethod1(covariant core::int i) → void {}
+  method extendedConcreteImplementedCovariantMethod(covariant-by-declaration core::int i) → void {}
+  method extendedAbstractImplementedCovariantMethod(covariant-by-declaration core::int i) → void {}
+  method implementsMultipleCovariantMethod1(covariant-by-declaration core::int i) → void {}
   method implementsMultipleCovariantMethod2(core::int i) → void {}
 }
 class Interface2 extends core::Object {
@@ -124,16 +124,16 @@
     : super core::Object::•()
     ;
   method implementsMultipleCovariantMethod1(core::int i) → void {}
-  method implementsMultipleCovariantMethod2(covariant core::int i) → void {}
+  method implementsMultipleCovariantMethod2(covariant-by-declaration core::int i) → void {}
 }
 abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::AbstractClass
     : super self::Super::•()
     ;
-  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void
+  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteImplementedCovariantMethod}(i);
-  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void;
-  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant core::int i) → void;
+  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant-by-declaration core::int i) → void;
 }
 class ConcreteSub extends self::AbstractClass {
   synthetic constructor •() → self::ConcreteSub
@@ -144,9 +144,9 @@
   synthetic constructor •() → self::ConcreteClass
     : super self::Super::•()
     ;
-  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant core::int i) → void
+  forwarding-stub method extendedConcreteImplementedCovariantMethod(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteImplementedCovariantMethod}(i);
-  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant core::int i) → void;
-  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant core::int i) → void;
+  abstract forwarding-stub method extendedAbstractImplementedCovariantMethod(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub method implementsMultipleCovariantMethod2(covariant-by-declaration core::int i) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.expect
index bb95986..ac74f0f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.expect
@@ -101,10 +101,10 @@
   synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
-  set extendedConcreteCovariantSetter(covariant core::int i) → void {}
-  abstract set extendedAbstractCovariantSetter(covariant core::int i) → void;
-  set extendedConcreteCovariantImplementedSetter(covariant core::int i) → void {}
-  abstract set extendedAbstractCovariantImplementedSetter(covariant core::int i) → void;
+  set extendedConcreteCovariantSetter(covariant-by-declaration core::int i) → void {}
+  abstract set extendedAbstractCovariantSetter(covariant-by-declaration core::int i) → void;
+  set extendedConcreteCovariantImplementedSetter(covariant-by-declaration core::int i) → void {}
+  abstract set extendedAbstractCovariantImplementedSetter(covariant-by-declaration core::int i) → void;
   set extendedConcreteImplementedCovariantSetter(core::int i) → void {}
   abstract set extendedAbstractImplementedCovariantSetter(core::int i) → void;
 }
@@ -114,9 +114,9 @@
     ;
   set extendedConcreteCovariantImplementedSetter(core::int i) → void {}
   set extendedAbstractCovariantImplementedSetter(core::int i) → void {}
-  set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void {}
-  set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void {}
-  set implementsMultipleCovariantSetter1(covariant core::int i) → void {}
+  set extendedConcreteImplementedCovariantSetter(covariant-by-declaration core::int i) → void {}
+  set extendedAbstractImplementedCovariantSetter(covariant-by-declaration core::int i) → void {}
+  set implementsMultipleCovariantSetter1(covariant-by-declaration core::int i) → void {}
   set implementsMultipleCovariantSetter2(core::int i) → void {}
 }
 class Interface2 extends core::Object {
@@ -124,16 +124,16 @@
     : super core::Object::•()
     ;
   set implementsMultipleCovariantSetter1(core::int i) → void {}
-  set implementsMultipleCovariantSetter2(covariant core::int i) → void {}
+  set implementsMultipleCovariantSetter2(covariant-by-declaration core::int i) → void {}
 }
 abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::AbstractClass
     : super self::Super::•()
     ;
-  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void
+  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteImplementedCovariantSetter} = i;
-  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void;
-  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant core::int i) → void;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant-by-declaration core::int i) → void;
 }
 class ConcreteSub extends self::AbstractClass {
   synthetic constructor •() → self::ConcreteSub
@@ -144,9 +144,9 @@
   synthetic constructor •() → self::ConcreteClass
     : super self::Super::•()
     ;
-  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void
+  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteImplementedCovariantSetter} = i;
-  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void;
-  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant core::int i) → void;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant-by-declaration core::int i) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.outline.expect
index 07387a9..22bb84b 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.outline.expect
@@ -100,12 +100,12 @@
 abstract class Super extends core::Object {
   synthetic constructor •() → self::Super
     ;
-  set extendedConcreteCovariantSetter(covariant core::int i) → void
+  set extendedConcreteCovariantSetter(covariant-by-declaration core::int i) → void
     ;
-  abstract set extendedAbstractCovariantSetter(covariant core::int i) → void;
-  set extendedConcreteCovariantImplementedSetter(covariant core::int i) → void
+  abstract set extendedAbstractCovariantSetter(covariant-by-declaration core::int i) → void;
+  set extendedConcreteCovariantImplementedSetter(covariant-by-declaration core::int i) → void
     ;
-  abstract set extendedAbstractCovariantImplementedSetter(covariant core::int i) → void;
+  abstract set extendedAbstractCovariantImplementedSetter(covariant-by-declaration core::int i) → void;
   set extendedConcreteImplementedCovariantSetter(core::int i) → void
     ;
   abstract set extendedAbstractImplementedCovariantSetter(core::int i) → void;
@@ -117,11 +117,11 @@
     ;
   set extendedAbstractCovariantImplementedSetter(core::int i) → void
     ;
-  set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void
+  set extendedConcreteImplementedCovariantSetter(covariant-by-declaration core::int i) → void
     ;
-  set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void
+  set extendedAbstractImplementedCovariantSetter(covariant-by-declaration core::int i) → void
     ;
-  set implementsMultipleCovariantSetter1(covariant core::int i) → void
+  set implementsMultipleCovariantSetter1(covariant-by-declaration core::int i) → void
     ;
   set implementsMultipleCovariantSetter2(core::int i) → void
     ;
@@ -131,16 +131,16 @@
     ;
   set implementsMultipleCovariantSetter1(core::int i) → void
     ;
-  set implementsMultipleCovariantSetter2(covariant core::int i) → void
+  set implementsMultipleCovariantSetter2(covariant-by-declaration core::int i) → void
     ;
 }
 abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::AbstractClass
     ;
-  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void
+  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteImplementedCovariantSetter} = i;
-  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void;
-  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant core::int i) → void;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant-by-declaration core::int i) → void;
 }
 class ConcreteSub extends self::AbstractClass {
   synthetic constructor •() → self::ConcreteSub
@@ -149,10 +149,10 @@
 class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::ConcreteClass
     ;
-  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void
+  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteImplementedCovariantSetter} = i;
-  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void;
-  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant core::int i) → void;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant-by-declaration core::int i) → void;
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.transformed.expect
index bb95986..ac74f0f 100644
--- a/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/hierarchy/forwarding_stubs_setter.dart.weak.transformed.expect
@@ -101,10 +101,10 @@
   synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
-  set extendedConcreteCovariantSetter(covariant core::int i) → void {}
-  abstract set extendedAbstractCovariantSetter(covariant core::int i) → void;
-  set extendedConcreteCovariantImplementedSetter(covariant core::int i) → void {}
-  abstract set extendedAbstractCovariantImplementedSetter(covariant core::int i) → void;
+  set extendedConcreteCovariantSetter(covariant-by-declaration core::int i) → void {}
+  abstract set extendedAbstractCovariantSetter(covariant-by-declaration core::int i) → void;
+  set extendedConcreteCovariantImplementedSetter(covariant-by-declaration core::int i) → void {}
+  abstract set extendedAbstractCovariantImplementedSetter(covariant-by-declaration core::int i) → void;
   set extendedConcreteImplementedCovariantSetter(core::int i) → void {}
   abstract set extendedAbstractImplementedCovariantSetter(core::int i) → void;
 }
@@ -114,9 +114,9 @@
     ;
   set extendedConcreteCovariantImplementedSetter(core::int i) → void {}
   set extendedAbstractCovariantImplementedSetter(core::int i) → void {}
-  set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void {}
-  set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void {}
-  set implementsMultipleCovariantSetter1(covariant core::int i) → void {}
+  set extendedConcreteImplementedCovariantSetter(covariant-by-declaration core::int i) → void {}
+  set extendedAbstractImplementedCovariantSetter(covariant-by-declaration core::int i) → void {}
+  set implementsMultipleCovariantSetter1(covariant-by-declaration core::int i) → void {}
   set implementsMultipleCovariantSetter2(core::int i) → void {}
 }
 class Interface2 extends core::Object {
@@ -124,16 +124,16 @@
     : super core::Object::•()
     ;
   set implementsMultipleCovariantSetter1(core::int i) → void {}
-  set implementsMultipleCovariantSetter2(covariant core::int i) → void {}
+  set implementsMultipleCovariantSetter2(covariant-by-declaration core::int i) → void {}
 }
 abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
   synthetic constructor •() → self::AbstractClass
     : super self::Super::•()
     ;
-  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void
+  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteImplementedCovariantSetter} = i;
-  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void;
-  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant core::int i) → void;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant-by-declaration core::int i) → void;
 }
 class ConcreteSub extends self::AbstractClass {
   synthetic constructor •() → self::ConcreteSub
@@ -144,9 +144,9 @@
   synthetic constructor •() → self::ConcreteClass
     : super self::Super::•()
     ;
-  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant core::int i) → void
+  forwarding-stub set extendedConcreteImplementedCovariantSetter(covariant-by-declaration core::int i) → void
     return super.{self::Super::extendedConcreteImplementedCovariantSetter} = i;
-  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant core::int i) → void;
-  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant core::int i) → void;
+  abstract forwarding-stub set extendedAbstractImplementedCovariantSetter(covariant-by-declaration core::int i) → void;
+  abstract forwarding-stub set implementsMultipleCovariantSetter2(covariant-by-declaration core::int i) → void;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.expect
index facc484..7e095fc 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.expect
@@ -56,7 +56,7 @@
   constructor •(iss::Iterable::E% element) → iss::Iterable<iss::Iterable::E%>
     : iss::Iterable::element = element, super core::Object::•()
     ;
-  method singleWhere((iss::Iterable::E%) → core::bool test, {generic-covariant-impl () →? iss::Iterable::E% orElse = #C1}) → iss::Iterable::E% {
+  method singleWhere((iss::Iterable::E%) → core::bool test, {covariant-by-class () →? iss::Iterable::E% orElse = #C1}) → iss::Iterable::E% {
     if(test(this.{iss::Iterable::element}{iss::Iterable::E%}){(iss::Iterable::E%) → core::bool}) {
       return this.{iss::Iterable::element}{iss::Iterable::E%};
     }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.outline.expect
index 3e3f2f4..8ed2bcc 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.outline.expect
@@ -46,7 +46,7 @@
   final field iss::Iterable::E% element;
   constructor •(iss::Iterable::E% element) → iss::Iterable<iss::Iterable::E%>
     ;
-  method singleWhere((iss::Iterable::E%) → core::bool test, {generic-covariant-impl () →? iss::Iterable::E% orElse}) → iss::Iterable::E%
+  method singleWhere((iss::Iterable::E%) → core::bool test, {covariant-by-class () →? iss::Iterable::E% orElse}) → iss::Iterable::E%
     ;
 }
 static method foo(() → iss::Map<core::String, core::String> f) → void
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.transformed.expect
index facc484..7e095fc 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue41180.dart.weak.transformed.expect
@@ -56,7 +56,7 @@
   constructor •(iss::Iterable::E% element) → iss::Iterable<iss::Iterable::E%>
     : iss::Iterable::element = element, super core::Object::•()
     ;
-  method singleWhere((iss::Iterable::E%) → core::bool test, {generic-covariant-impl () →? iss::Iterable::E% orElse = #C1}) → iss::Iterable::E% {
+  method singleWhere((iss::Iterable::E%) → core::bool test, {covariant-by-class () →? iss::Iterable::E% orElse = #C1}) → iss::Iterable::E% {
     if(test(this.{iss::Iterable::element}{iss::Iterable::E%}){(iss::Iterable::E%) → core::bool}) {
       return this.{iss::Iterable::element}{iss::Iterable::E%};
     }
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect
index b315eec..b9925e3 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_E1&Object&A&D*
     : super self::_E1&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E1&Object&A::method}(i, s: s);
 }
 class E1 extends self::_E1&Object&A&D {
@@ -55,7 +55,7 @@
   const synthetic constructor •() → self::E2*
     : super self::_E2&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E2&Object&A::method}(i, s: s);
 }
 abstract class _E3&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/  {
@@ -94,7 +94,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant core::String* a = #C2]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a = #C2]) → dynamic;
 }
 abstract class C8 extends mai::C5 implements mai::C7 {
   synthetic constructor •() → self::C8*
@@ -110,7 +110,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant core::String* a = #C2, core::num* b = #C2]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a = #C2, core::num* b = #C2]) → dynamic;
 }
 static method main() → dynamic {}
 
@@ -128,7 +128,7 @@
   synthetic constructor •() → mai::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int i) → core::String;
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements mai::Interface /*isMixinDeclaration*/  {
   method method(core::num i, {core::String s = #C1}) → core::String
@@ -138,7 +138,7 @@
   synthetic constructor •() → mai::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num i) → core::String;
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements mai::Interface {
   synthetic constructor •() → mai::F
@@ -167,13 +167,13 @@
   synthetic constructor •() → mai::C4
     : super core::Object::•()
     ;
-  abstract method method2([covariant core::String a = #C2]) → dynamic;
+  abstract method method2([covariant-by-declaration core::String a = #C2]) → dynamic;
 }
 abstract class C5 extends mai::C3 implements mai::C4 {
   synthetic constructor •() → mai::C5
     : super mai::C3::•()
     ;
-  abstract forwarding-stub method method2([covariant core::String a = #C2]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String a = #C2]) → dynamic;
 }
 abstract class C7 extends core::Object {
   synthetic constructor •() → mai::C7
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.outline.expect
index 8754194..794d06d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.outline.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_E1&Object&A&D*
     : super self::_E1&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
     return super.{self::_E1&Object&A::method}(i, s: s);
 }
 class E1 extends self::_E1&Object&A&D {
@@ -54,7 +54,7 @@
   const synthetic constructor •() → self::E2*
     : super self::_E2&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
     return super.{self::_E2&Object&A::method}(i, s: s);
 }
 abstract class _E3&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/  {
@@ -92,7 +92,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant core::String* a]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a]) → dynamic;
 }
 abstract class C8 extends mai::C5 implements mai::C7 {
   synthetic constructor •() → self::C8*
@@ -107,7 +107,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant core::String* a, core::num* b]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a, core::num* b]) → dynamic;
 }
 static method main() → dynamic
   ;
@@ -124,7 +124,7 @@
 abstract class Interface2 extends core::Object {
   synthetic constructor •() → mai::Interface2
     ;
-  abstract method method(covariant core::int i) → core::String;
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements mai::Interface /*isMixinDeclaration*/  {
   method method(core::num i, {core::String s = #C1}) → core::String
@@ -133,7 +133,7 @@
 abstract class D extends core::Object implements mai::Interface, mai::Interface2 {
   synthetic constructor •() → mai::D
     ;
-  abstract forwarding-stub method method(covariant core::num i) → core::String;
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements mai::Interface {
   synthetic constructor •() → mai::F
@@ -157,12 +157,12 @@
 abstract class C4 extends core::Object {
   synthetic constructor •() → mai::C4
     ;
-  abstract method method2([covariant core::String a]) → dynamic;
+  abstract method method2([covariant-by-declaration core::String a]) → dynamic;
 }
 abstract class C5 extends mai::C3 implements mai::C4 {
   synthetic constructor •() → mai::C5
     ;
-  abstract forwarding-stub method method2([covariant core::String a]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String a]) → dynamic;
 }
 abstract class C7 extends core::Object {
   synthetic constructor •() → mai::C7
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect
index f366369..1755648 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_E1&Object&A&D*
     : super self::_E1&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E1&Object&A::method}(i, s: s);
 }
 class E1 extends self::_E1&Object&A&D {
@@ -55,7 +55,7 @@
   const synthetic constructor •() → self::E2*
     : super self::_E2&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E2&Object&A::method}(i, s: s);
 }
 abstract class _E3&Object&A extends core::Object implements mai::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
@@ -94,7 +94,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant core::String* a = #C2]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a = #C2]) → dynamic;
 }
 abstract class C8 extends mai::C5 implements mai::C7 {
   synthetic constructor •() → self::C8*
@@ -110,7 +110,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant core::String* a = #C2, core::num* b = #C2]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a = #C2, core::num* b = #C2]) → dynamic;
 }
 static method main() → dynamic {}
 
@@ -128,7 +128,7 @@
   synthetic constructor •() → mai::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int i) → core::String;
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements mai::Interface /*isMixinDeclaration*/  {
   method method(core::num i, {core::String s = #C1}) → core::String
@@ -138,7 +138,7 @@
   synthetic constructor •() → mai::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num i) → core::String;
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements mai::Interface {
   synthetic constructor •() → mai::F
@@ -167,13 +167,13 @@
   synthetic constructor •() → mai::C4
     : super core::Object::•()
     ;
-  abstract method method2([covariant core::String a = #C2]) → dynamic;
+  abstract method method2([covariant-by-declaration core::String a = #C2]) → dynamic;
 }
 abstract class C5 extends mai::C3 implements mai::C4 {
   synthetic constructor •() → mai::C5
     : super mai::C3::•()
     ;
-  abstract forwarding-stub method method2([covariant core::String a = #C2]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String a = #C2]) → dynamic;
 }
 abstract class C7 extends core::Object {
   synthetic constructor •() → mai::C7
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.expect
index f9f739d..76b963e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_E1&Object&A&D*
     : super self::_E1&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E1&Object&A::method}(i, s: s);
 }
 class E1 extends self::_E1&Object&A&D {
@@ -55,7 +55,7 @@
   const synthetic constructor •() → self::E2*
     : super self::_E2&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E2&Object&A::method}(i, s: s);
 }
 abstract class _E3&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/  {
@@ -94,7 +94,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant core::String* a]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a]) → dynamic;
 }
 abstract class C8 extends mai::C5 implements mai::C7 {
   synthetic constructor •() → self::C8*
@@ -110,7 +110,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant core::String* a = #C2, core::num* b = #C2]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a = #C2, core::num* b = #C2]) → dynamic;
 }
 static method main() → dynamic {}
 
@@ -128,7 +128,7 @@
   synthetic constructor •() → mai::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int i) → core::String;
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements mai::Interface /*isMixinDeclaration*/  {
   method method(core::num i, {core::String s = #C1}) → core::String
@@ -138,7 +138,7 @@
   synthetic constructor •() → mai::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num i) → core::String;
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements mai::Interface {
   synthetic constructor •() → mai::F
@@ -167,13 +167,13 @@
   synthetic constructor •() → mai::C4
     : super core::Object::•()
     ;
-  abstract method method2([covariant core::String a = #C2]) → dynamic;
+  abstract method method2([covariant-by-declaration core::String a = #C2]) → dynamic;
 }
 abstract class C5 extends mai::C3 implements mai::C4 {
   synthetic constructor •() → mai::C5
     : super mai::C3::•()
     ;
-  abstract forwarding-stub method method2([covariant core::String a = #C2]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String a = #C2]) → dynamic;
 }
 abstract class C7 extends core::Object {
   synthetic constructor •() → mai::C7
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.outline.expect
index 52ca0c6..4e1eec5 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.outline.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_E1&Object&A&D*
     : super self::_E1&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
     return super.{self::_E1&Object&A::method}(i, s: s);
 }
 class E1 extends self::_E1&Object&A&D {
@@ -54,7 +54,7 @@
   const synthetic constructor •() → self::E2*
     : super self::_E2&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s}) → core::String*
     return super.{self::_E2&Object&A::method}(i, s: s);
 }
 abstract class _E3&Object&A = core::Object with mai::A /*isAnonymousMixin,hasConstConstructor*/  {
@@ -92,7 +92,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant core::String* a]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a]) → dynamic;
 }
 abstract class C8 extends mai::C5 implements mai::C7 {
   synthetic constructor •() → self::C8*
@@ -107,7 +107,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant core::String* a, core::num* b]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a, core::num* b]) → dynamic;
 }
 static method main() → dynamic
   ;
@@ -124,7 +124,7 @@
 abstract class Interface2 extends core::Object {
   synthetic constructor •() → mai::Interface2
     ;
-  abstract method method(covariant core::int i) → core::String;
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements mai::Interface /*isMixinDeclaration*/  {
   method method(core::num i, {core::String s = "hello"}) → core::String
@@ -133,7 +133,7 @@
 abstract class D extends core::Object implements mai::Interface, mai::Interface2 {
   synthetic constructor •() → mai::D
     ;
-  abstract forwarding-stub method method(covariant core::num i) → core::String;
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements mai::Interface {
   synthetic constructor •() → mai::F
@@ -157,12 +157,12 @@
 abstract class C4 extends core::Object {
   synthetic constructor •() → mai::C4
     ;
-  abstract method method2([covariant core::String a]) → dynamic;
+  abstract method method2([covariant-by-declaration core::String a]) → dynamic;
 }
 abstract class C5 extends mai::C3 implements mai::C4 {
   synthetic constructor •() → mai::C5
     ;
-  abstract forwarding-stub method method2([covariant core::String a]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String a]) → dynamic;
 }
 abstract class C7 extends core::Object {
   synthetic constructor •() → mai::C7
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.transformed.expect
index 2645eb5..c979ec6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/issue43988/main.no_link.dart.weak.transformed.expect
@@ -26,7 +26,7 @@
   const synthetic constructor •() → self::_E1&Object&A&D*
     : super self::_E1&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E1&Object&A::method}(i, s: s);
 }
 class E1 extends self::_E1&Object&A&D {
@@ -55,7 +55,7 @@
   const synthetic constructor •() → self::E2*
     : super self::_E2&Object&A::•()
     ;
-  forwarding-stub method method(covariant core::num* i, {core::String* s = #C1}) → core::String*
+  forwarding-stub method method(covariant-by-declaration core::num* i, {core::String* s = #C1}) → core::String*
     return super.{self::_E2&Object&A::method}(i, s: s);
 }
 abstract class _E3&Object&A extends core::Object implements mai::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
@@ -94,7 +94,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant core::String* a]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a]) → dynamic;
 }
 abstract class C8 extends mai::C5 implements mai::C7 {
   synthetic constructor •() → self::C8*
@@ -110,7 +110,7 @@
   abstract member-signature method toString() → core::String*; -> core::Object::toString
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-  abstract forwarding-stub method method2([covariant core::String* a = #C2, core::num* b = #C2]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String* a = #C2, core::num* b = #C2]) → dynamic;
 }
 static method main() → dynamic {}
 
@@ -128,7 +128,7 @@
   synthetic constructor •() → mai::Interface2
     : super core::Object::•()
     ;
-  abstract method method(covariant core::int i) → core::String;
+  abstract method method(covariant-by-declaration core::int i) → core::String;
 }
 abstract class A extends core::Object implements mai::Interface /*isMixinDeclaration*/  {
   method method(core::num i, {core::String s = #C1}) → core::String
@@ -138,7 +138,7 @@
   synthetic constructor •() → mai::D
     : super core::Object::•()
     ;
-  abstract forwarding-stub method method(covariant core::num i) → core::String;
+  abstract forwarding-stub method method(covariant-by-declaration core::num i) → core::String;
 }
 abstract class F extends core::Object implements mai::Interface {
   synthetic constructor •() → mai::F
@@ -167,13 +167,13 @@
   synthetic constructor •() → mai::C4
     : super core::Object::•()
     ;
-  abstract method method2([covariant core::String a = #C2]) → dynamic;
+  abstract method method2([covariant-by-declaration core::String a = #C2]) → dynamic;
 }
 abstract class C5 extends mai::C3 implements mai::C4 {
   synthetic constructor •() → mai::C5
     : super mai::C3::•()
     ;
-  abstract forwarding-stub method method2([covariant core::String a = #C2]) → dynamic;
+  abstract forwarding-stub method method2([covariant-by-declaration core::String a = #C2]) → dynamic;
 }
 abstract class C7 extends core::Object {
   synthetic constructor •() → mai::C7
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.expect
index 3d387ff..a8b5e14 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.expect
@@ -79,7 +79,7 @@
     return false;
 }
 abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
-  generic-covariant-impl field mai::RenderObjectWithChildMixin::ChildType? _child = null;
+  covariant-by-class field mai::RenderObjectWithChildMixin::ChildType? _child = null;
   get child() → mai::RenderObjectWithChildMixin::ChildType?
     return this.{mai::RenderObjectWithChildMixin::_child}{mai::RenderObjectWithChildMixin::ChildType?};
 }
@@ -95,7 +95,7 @@
   }
 }
 abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin extends mai::RenderBox implements mai::RenderObjectWithChildMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
-  generic-covariant-impl field mai::RenderBox? _child = null;
+  covariant-by-class field mai::RenderBox? _child = null;
   synthetic constructor •() → mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin
     : super mai::RenderBox::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.outline.expect
index 9cec757..c282428 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.outline.expect
@@ -70,7 +70,7 @@
     ;
 }
 abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
-  generic-covariant-impl field mai::RenderObjectWithChildMixin::ChildType? _child;
+  covariant-by-class field mai::RenderObjectWithChildMixin::ChildType? _child;
   get child() → mai::RenderObjectWithChildMixin::ChildType?
     ;
 }
@@ -84,7 +84,7 @@
     ;
 }
 abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin extends mai::RenderBox implements mai::RenderObjectWithChildMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
-  generic-covariant-impl field mai::RenderBox? _child;
+  covariant-by-class field mai::RenderBox? _child;
   synthetic constructor •() → mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin
     : super mai::RenderBox::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.transformed.expect
index 03d4e82..04fe3fa 100644
--- a/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/mixin_from_dill2/main.dart.weak.transformed.expect
@@ -81,7 +81,7 @@
     return false;
 }
 abstract class RenderObjectWithChildMixin<ChildType extends mai::RenderObject> extends mai::RenderObject /*isMixinDeclaration*/  {
-  generic-covariant-impl field mai::RenderObjectWithChildMixin::ChildType? _child = null;
+  covariant-by-class field mai::RenderObjectWithChildMixin::ChildType? _child = null;
   get child() → mai::RenderObjectWithChildMixin::ChildType?
     return this.{mai::RenderObjectWithChildMixin::_child}{mai::RenderObjectWithChildMixin::ChildType?};
 }
@@ -97,7 +97,7 @@
   }
 }
 abstract class _RenderProxyBox&RenderBox&RenderObjectWithChildMixin extends mai::RenderBox implements mai::RenderObjectWithChildMixin<mai::RenderBox> /*isAnonymousMixin,isEliminatedMixin*/  {
-  generic-covariant-impl field mai::RenderBox? _child = null;
+  covariant-by-class field mai::RenderBox? _child = null;
   synthetic constructor •() → mai::_RenderProxyBox&RenderBox&RenderObjectWithChildMixin
     : super mai::RenderBox::•()
     ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.expect
index 64a13f8..1d47863 100644
--- a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.expect
@@ -9,13 +9,13 @@
   synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
-  method method({required covariant core::int named = #C1}) → void {}
+  method method({required covariant-by-declaration core::int named = #C1}) → void {}
 }
 abstract class _Class&Super&Mixin = self::Super with req::Mixin /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Class&Super&Mixin
     : super self::Super::•()
     ;
-  forwarding-stub method /*isLegacy*/ method({covariant core::int* named = #C1}) → void
+  forwarding-stub method /*isLegacy*/ method({covariant-by-declaration core::int* named = #C1}) → void
     return super.{req::Mixin::method}(named: named);
   abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
 }
@@ -28,7 +28,7 @@
   synthetic constructor •() → self::SubClass
     : super self::Class::•()
     ;
-  method method({required covariant core::int named = #C1}) → void {}
+  method method({required covariant-by-declaration core::int named = #C1}) → void {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.outline.expect
index 2e76a53..1e8de64 100644
--- a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.outline.expect
@@ -8,14 +8,14 @@
 class Super extends core::Object {
   synthetic constructor •() → self::Super
     ;
-  method method({required covariant core::int named}) → void
+  method method({required covariant-by-declaration core::int named}) → void
     ;
 }
 abstract class _Class&Super&Mixin = self::Super with req::Mixin /*isAnonymousMixin*/  {
   synthetic constructor •() → self::_Class&Super&Mixin
     : super self::Super::•()
     ;
-  forwarding-stub method /*isLegacy*/ method({covariant core::int* named}) → void
+  forwarding-stub method /*isLegacy*/ method({covariant-by-declaration core::int* named}) → void
     return super.{req::Mixin::method}(named: named);
   abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
 }
@@ -26,7 +26,7 @@
 class SubClass extends self::Class {
   synthetic constructor •() → self::SubClass
     ;
-  method method({required covariant core::int named}) → void
+  method method({required covariant-by-declaration core::int named}) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.transformed.expect
index 548c807..aa7a7ec 100644
--- a/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/required_parameter_mixed_from_opt_out.dart.weak.transformed.expect
@@ -9,13 +9,13 @@
   synthetic constructor •() → self::Super
     : super core::Object::•()
     ;
-  method method({required covariant core::int named = #C1}) → void {}
+  method method({required covariant-by-declaration core::int named = #C1}) → void {}
 }
 abstract class _Class&Super&Mixin extends self::Super implements req::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
   synthetic constructor •() → self::_Class&Super&Mixin
     : super self::Super::•()
     ;
-  method /*isLegacy, from org-dartlang-testcase:///required_parameter_mixed_from_opt_out_lib.dart */ method({covariant core::int* named = #C1}) → void {}
+  method /*isLegacy, from org-dartlang-testcase:///required_parameter_mixed_from_opt_out_lib.dart */ method({covariant-by-declaration core::int* named = #C1}) → void {}
   abstract member-signature operator /*isLegacy*/ ==(dynamic other) → core::bool*; -> core::Object::==
 }
 class Class extends self::_Class&Super&Mixin {
@@ -27,7 +27,7 @@
   synthetic constructor •() → self::SubClass
     : super self::Class::•()
     ;
-  method method({required covariant core::int named = #C1}) → void {}
+  method method({required covariant-by-declaration core::int named = #C1}) → void {}
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.expect
index 184f291..726b3b6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.expect
@@ -9,7 +9,7 @@
   synthetic constructor •() → self::C<self::C::T%, self::C::S%, self::C::U%>
     : super core::Object::•()
     ;
-  method promoteNullable(generic-covariant-impl self::C::T? t) → void {
+  method promoteNullable(covariant-by-class self::C::T? t) → void {
     if(t is{ForNonNullableByDefault} core::int) {
       t{self::C::T? & core::int /* '?' & '!' = '!' */};
     }
@@ -17,7 +17,7 @@
       t{self::C::T? & core::int? /* '?' & '?' = '?' */};
     }
   }
-  method nullableAsUndetermined(generic-covariant-impl self::C::S? s) → void {
+  method nullableAsUndetermined(covariant-by-class self::C::S? s) → void {
     s as{ForNonNullableByDefault} self::C::U%;
   }
 }
@@ -40,7 +40,7 @@
   synthetic constructor •() → typ::D<typ::D::T*>*
     : super core::Object::•()
     ;
-  method promoteLegacy(generic-covariant-impl typ::D::T* t) → void {
+  method promoteLegacy(covariant-by-class typ::D::T* t) → void {
     if(t is core::int*) {
       let final typ::D::T* & core::int* /* '*' & '*' = '*' */ #t1 = t{typ::D::T* & core::int* /* '*' & '*' = '*' */} in #t1 == null ?{core::bool*} null : #t1.{core::int::isEven}{core::bool*};
     }
diff --git a/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.outline.expect
index ef4392a..11e222c 100644
--- a/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.outline.expect
@@ -7,9 +7,9 @@
 class C<T extends core::num?, S extends core::Object? = dynamic, U extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T%, self::C::S%, self::C::U%>
     ;
-  method promoteNullable(generic-covariant-impl self::C::T? t) → void
+  method promoteNullable(covariant-by-class self::C::T? t) → void
     ;
-  method nullableAsUndetermined(generic-covariant-impl self::C::S? s) → void
+  method nullableAsUndetermined(covariant-by-class self::C::S? s) → void
     ;
 }
 static method main() → dynamic
@@ -22,7 +22,7 @@
 class D<T extends core::num*> extends core::Object {
   synthetic constructor •() → self2::D<self2::D::T*>*
     ;
-  method promoteLegacy(generic-covariant-impl self2::D::T* t) → void
+  method promoteLegacy(covariant-by-class self2::D::T* t) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.transformed.expect
index 184f291..726b3b6 100644
--- a/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/type_parameter_nullability.dart.weak.transformed.expect
@@ -9,7 +9,7 @@
   synthetic constructor •() → self::C<self::C::T%, self::C::S%, self::C::U%>
     : super core::Object::•()
     ;
-  method promoteNullable(generic-covariant-impl self::C::T? t) → void {
+  method promoteNullable(covariant-by-class self::C::T? t) → void {
     if(t is{ForNonNullableByDefault} core::int) {
       t{self::C::T? & core::int /* '?' & '!' = '!' */};
     }
@@ -17,7 +17,7 @@
       t{self::C::T? & core::int? /* '?' & '?' = '?' */};
     }
   }
-  method nullableAsUndetermined(generic-covariant-impl self::C::S? s) → void {
+  method nullableAsUndetermined(covariant-by-class self::C::S? s) → void {
     s as{ForNonNullableByDefault} self::C::U%;
   }
 }
@@ -40,7 +40,7 @@
   synthetic constructor •() → typ::D<typ::D::T*>*
     : super core::Object::•()
     ;
-  method promoteLegacy(generic-covariant-impl typ::D::T* t) → void {
+  method promoteLegacy(covariant-by-class typ::D::T* t) → void {
     if(t is core::int*) {
       let final typ::D::T* & core::int* /* '*' & '*' = '*' */ #t1 = t{typ::D::T* & core::int* /* '*' & '*' = '*' */} in #t1 == null ?{core::bool*} null : #t1.{core::int::isEven}{core::bool*};
     }
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
index ead85b1..5076108 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
@@ -428,17 +428,15 @@
     : uns::OptInClass6b::field = field, super core::Object::•()
     ;
 }
-class E extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class E extends core::_Enum /*isEnum*/  {
   static const field core::List<uns::E> values = #C8;
   static const field uns::E e1 = #C3;
   static const field uns::E e2 = #C6;
-  const constructor •(core::int index, core::String _name) → uns::E
-    : uns::E::index = index, uns::E::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → uns::E
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{uns::E::_name}{core::String};
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 extension OptInExtension on uns::OptInClass1 {
   operator [] = uns::OptInExtension|[];
@@ -611,10 +609,10 @@
 
 constants  {
   #C1 = 0
-  #C2 = "E.e1"
+  #C2 = "e1"
   #C3 = uns::E {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "E.e2"
+  #C5 = "e2"
   #C6 = uns::E {index:#C4, _name:#C5}
   #C7 = null
   #C8 = <uns::E*>[#C3, #C6]
@@ -624,4 +622,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///unsound_checks_lib.dart:
 - E. (from org-dartlang-testcase:///unsound_checks_lib.dart:145:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.outline.expect
index 2a7d4ca..f33df52 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.outline.expect
@@ -201,17 +201,15 @@
   constructor •(core::int field) → self2::OptInClass6b
     ;
 }
-class E extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self2::E> values = const <self2::E>[self2::E::e1, self2::E::e2];
-  static const field self2::E e1 = const self2::E::•(0, "E.e1");
-  static const field self2::E e2 = const self2::E::•(1, "E.e2");
-  const constructor •(core::int index, core::String _name) → self2::E
-    : self2::E::index = index, self2::E::_name = _name, super core::Object::•()
+  static const field self2::E e1 = const self2::E::•(0, "e1");
+  static const field self2::E e2 = const self2::E::•(1, "e2");
+  const constructor •(core::int index, core::String name) → self2::E
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self2::E::_name}{core::String};
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 extension OptInExtension on self2::OptInClass1 {
   operator [] = self2::OptInExtension|[];
@@ -296,7 +294,7 @@
 
 
 Extra constant evaluation status:
-Evaluated: ListLiteral @ org-dartlang-testcase:///unsound_checks_lib.dart:145:6 -> ListConstant(const <E*>[const E{E.index: 0, E._name: "E.e1"}, const E{E.index: 1, E._name: "E.e2"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///unsound_checks_lib.dart:145:10 -> InstanceConstant(const E{E.index: 0, E._name: "E.e1"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///unsound_checks_lib.dart:145:14 -> InstanceConstant(const E{E.index: 1, E._name: "E.e2"})
-Extra constant evaluation: evaluated: 7, effectively constant: 3
+Evaluated: ListLiteral @ org-dartlang-testcase:///unsound_checks_lib.dart:145:6 -> ListConstant(const <E*>[const E{_Enum.index: 0, _Enum._name: "e1"}, const E{_Enum.index: 1, _Enum._name: "e2"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///unsound_checks_lib.dart:145:10 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "e1"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///unsound_checks_lib.dart:145:14 -> InstanceConstant(const E{_Enum.index: 1, _Enum._name: "e2"})
+Extra constant evaluation: evaluated: 8, effectively constant: 3
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
index ede6557..e968e87e 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
@@ -428,17 +428,15 @@
     : uns::OptInClass6b::field = field, super core::Object::•()
     ;
 }
-class E extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class E extends core::_Enum /*isEnum*/  {
   static const field core::List<uns::E> values = #C8;
   static const field uns::E e1 = #C3;
   static const field uns::E e2 = #C6;
-  const constructor •(core::int index, core::String _name) → uns::E
-    : uns::E::index = index, uns::E::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → uns::E
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{uns::E::_name}{core::String};
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 extension OptInExtension on uns::OptInClass1 {
   operator [] = uns::OptInExtension|[];
@@ -611,10 +609,10 @@
 
 constants  {
   #C1 = 0
-  #C2 = "E.e1"
+  #C2 = "e1"
   #C3 = uns::E {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "E.e2"
+  #C5 = "e2"
   #C6 = uns::E {index:#C4, _name:#C5}
   #C7 = null
   #C8 = <uns::E*>[#C3, #C6]
@@ -639,10 +637,11 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///unsound_checks_lib.dart:39:56 -> IntConstant(42)
 Evaluated: VariableGet @ org-dartlang-testcase:///unsound_checks_lib.dart:134:5 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///unsound_checks_lib.dart:134:5 -> IntConstant(0)
-Extra constant evaluation: evaluated: 719, effectively constant: 18
+Extra constant evaluation: evaluated: 720, effectively constant: 18
 
 
 Constructor coverage from constants:
 org-dartlang-testcase:///unsound_checks_lib.dart:
 - E. (from org-dartlang-testcase:///unsound_checks_lib.dart:145:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.expect
index 6d0707e..aa77c05 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<X extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field core::List<self::A::X*>* foo = null;
+  covariant-by-class field core::List<self::A::X*>* foo = null;
   synthetic constructor •() → self::A<self::A::X*>*
     : super core::Object::•()
     ;
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get foo() → core::List<core::int*>*
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::List<core::int*>*;
-  no-such-method-forwarder set foo(generic-covariant-impl core::List<core::int*>* value) → void
+  no-such-method-forwarder set foo(covariant-by-class core::List<core::int*>* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method expectTypeError(() →* dynamic callback) → void {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.outline.expect
index a927c80..630a250 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<X extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field core::List<self::A::X*>* foo;
+  covariant-by-class field core::List<self::A::X*>* foo;
   synthetic constructor •() → self::A<self::A::X*>*
     ;
   abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
@@ -33,7 +33,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get foo() → core::List<core::int*>*
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo, 1, const <core::Type*>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::List<core::int*>*;
-  no-such-method-forwarder set foo(generic-covariant-impl core::List<core::int*>* value) → void
+  no-such-method-forwarder set foo(covariant-by-class core::List<core::int*>* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#foo=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[value]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method expectTypeError(() →* dynamic callback) → void
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.transformed.expect
index 4daa123..dd3926e 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_accessors_from_field_with_substitution.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<X extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field core::List<self::A::X*>* foo = null;
+  covariant-by-class field core::List<self::A::X*>* foo = null;
   synthetic constructor •() → self::A<self::A::X*>*
     : super core::Object::•()
     ;
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
   no-such-method-forwarder get foo() → core::List<core::int*>*
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic} as{TypeError,ForDynamic} core::List<core::int*>*;
-  no-such-method-forwarder set foo(generic-covariant-impl core::List<core::int*>* value) → void
+  no-such-method-forwarder set foo(covariant-by-class core::List<core::int*>* value) → void
     return this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(value)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation*) →* dynamic};
 }
 static method expectTypeError(() →* dynamic callback) → void {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.expect
index bfd7e08..a135817 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.expect
@@ -8,7 +8,7 @@
     ;
   no-such-method-forwarder set push(core::int* x) → void
     return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder set float(covariant core::int* x) → void
+  no-such-method-forwarder set float(covariant-by-declaration core::int* x) → void
     return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
     return core::print("${this.{self::Base::runtimeType}{core::Type*}}: ${i.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic}}");
@@ -33,7 +33,7 @@
     ;
   no-such-method-forwarder set push(core::num* x) → void
     return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder set float(covariant core::num* x) → void
+  no-such-method-forwarder set float(covariant-by-declaration core::num* x) → void
     return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 2, #C2, core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.outline.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.outline.expect
index c19ff967..0bfffe0 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.outline.expect
@@ -7,7 +7,7 @@
     ;
   no-such-method-forwarder set push(core::int* x) → void
     return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#push=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder set float(covariant core::int* x) → void
+  no-such-method-forwarder set float(covariant-by-declaration core::int* x) → void
     return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#float=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
     ;
@@ -30,7 +30,7 @@
     ;
   no-such-method-forwarder set push(core::num* x) → void
     return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#push=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder set float(covariant core::num* x) → void
+  no-such-method-forwarder set float(covariant-by-declaration core::num* x) → void
     return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#float=, 2, const <core::Type*>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol*, dynamic>(const <core::Symbol*, dynamic>{}))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.transformed.expect b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.transformed.expect
index b578f00..6307698 100644
--- a/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/no_such_method_forwarders/abstract_override_abstract_different_type.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
     ;
   no-such-method-forwarder set push(core::int* x) → void
     return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder set float(covariant core::int* x) → void
+  no-such-method-forwarder set float(covariant-by-declaration core::int* x) → void
     return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
   method noSuchMethod(core::Invocation* i) → dynamic
     return core::print("${this.{self::Base::runtimeType}{core::Type*}}: ${i.{core::Invocation::positionalArguments}{core::List<dynamic>*}.{core::List::[]}(0){(core::int*) →* dynamic}}");
@@ -33,7 +33,7 @@
     ;
   no-such-method-forwarder set push(core::num* x) → void
     return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
-  no-such-method-forwarder set float(covariant core::num* x) → void
+  no-such-method-forwarder set float(covariant-by-declaration core::num* x) → void
     return this.{self::Base::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 2, #C2, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(x)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C3))){(core::Invocation*) →* dynamic};
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/none/equals.dart.strong.expect b/pkg/front_end/testcases/none/equals.dart.strong.expect
index 52a46e6..48c8140 100644
--- a/pkg/front_end/testcases/none/equals.dart.strong.expect
+++ b/pkg/front_end/testcases/none/equals.dart.strong.expect
@@ -121,7 +121,7 @@
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  operator ==(covariant generic-covariant-impl self::Class<self::Class::T%> other) → core::bool
+  operator ==(covariant-by-declaration covariant-by-class self::Class<self::Class::T%> other) → core::bool
     return true;
   method method(dynamic o) → dynamic {}
 }
diff --git a/pkg/front_end/testcases/none/equals.dart.strong.transformed.expect b/pkg/front_end/testcases/none/equals.dart.strong.transformed.expect
index de9b51d..b78c256 100644
--- a/pkg/front_end/testcases/none/equals.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/none/equals.dart.strong.transformed.expect
@@ -121,7 +121,7 @@
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  operator ==(covariant generic-covariant-impl self::Class<self::Class::T%> other) → core::bool
+  operator ==(covariant-by-declaration covariant-by-class self::Class<self::Class::T%> other) → core::bool
     return true;
   method method(dynamic o) → dynamic {}
 }
diff --git a/pkg/front_end/testcases/none/equals.dart.weak.expect b/pkg/front_end/testcases/none/equals.dart.weak.expect
index c989041..7950f55 100644
--- a/pkg/front_end/testcases/none/equals.dart.weak.expect
+++ b/pkg/front_end/testcases/none/equals.dart.weak.expect
@@ -122,7 +122,7 @@
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  operator ==(covariant generic-covariant-impl self::Class<self::Class::T%> other) → core::bool
+  operator ==(covariant-by-declaration covariant-by-class self::Class<self::Class::T%> other) → core::bool
     return true;
   method method(dynamic o) → dynamic {}
 }
diff --git a/pkg/front_end/testcases/none/equals.dart.weak.outline.expect b/pkg/front_end/testcases/none/equals.dart.weak.outline.expect
index 911e7cd..9d054c2 100644
--- a/pkg/front_end/testcases/none/equals.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/none/equals.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class Class<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::Class<self::Class::T%>
     ;
-  operator ==(covariant generic-covariant-impl self::Class<self::Class::T%> other) → core::bool
+  operator ==(covariant-by-declaration covariant-by-class self::Class<self::Class::T%> other) → core::bool
     ;
   method method(dynamic o) → dynamic
     ;
diff --git a/pkg/front_end/testcases/none/equals.dart.weak.transformed.expect b/pkg/front_end/testcases/none/equals.dart.weak.transformed.expect
index e5de4ea..0a4bf9a 100644
--- a/pkg/front_end/testcases/none/equals.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/none/equals.dart.weak.transformed.expect
@@ -122,7 +122,7 @@
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  operator ==(covariant generic-covariant-impl self::Class<self::Class::T%> other) → core::bool
+  operator ==(covariant-by-declaration covariant-by-class self::Class<self::Class::T%> other) → core::bool
     return true;
   method method(dynamic o) → dynamic {}
 }
diff --git a/pkg/front_end/testcases/none/method_invocation.dart.strong.expect b/pkg/front_end/testcases/none/method_invocation.dart.strong.expect
index be70e1c..78a320a 100644
--- a/pkg/front_end/testcases/none/method_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/none/method_invocation.dart.strong.expect
@@ -111,7 +111,7 @@
     return 0.5;
 }
 class Class2<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::Class2::T% field;
+  covariant-by-class field self::Class2::T% field;
   field core::Function nonNullableFunctionField;
   field core::Function? nullableFunctionField = null;
   field () → void nonNullableFunctionTypedField;
diff --git a/pkg/front_end/testcases/none/method_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/none/method_invocation.dart.strong.transformed.expect
index 4493594..0d8be8a 100644
--- a/pkg/front_end/testcases/none/method_invocation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/none/method_invocation.dart.strong.transformed.expect
@@ -111,7 +111,7 @@
     return 0.5;
 }
 class Class2<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::Class2::T% field;
+  covariant-by-class field self::Class2::T% field;
   field core::Function nonNullableFunctionField;
   field core::Function? nullableFunctionField = null;
   field () → void nonNullableFunctionTypedField;
diff --git a/pkg/front_end/testcases/none/method_invocation.dart.weak.expect b/pkg/front_end/testcases/none/method_invocation.dart.weak.expect
index faa00f4..b20ca89 100644
--- a/pkg/front_end/testcases/none/method_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/none/method_invocation.dart.weak.expect
@@ -112,7 +112,7 @@
     return 0.5;
 }
 class Class2<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::Class2::T% field;
+  covariant-by-class field self::Class2::T% field;
   field core::Function nonNullableFunctionField;
   field core::Function? nullableFunctionField = null;
   field () → void nonNullableFunctionTypedField;
diff --git a/pkg/front_end/testcases/none/method_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/none/method_invocation.dart.weak.outline.expect
index 7358160..69ce7d0 100644
--- a/pkg/front_end/testcases/none/method_invocation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/none/method_invocation.dart.weak.outline.expect
@@ -9,7 +9,7 @@
     ;
 }
 class Class2<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::Class2::T% field;
+  covariant-by-class field self::Class2::T% field;
   field core::Function nonNullableFunctionField;
   field core::Function? nullableFunctionField;
   field () → void nonNullableFunctionTypedField;
diff --git a/pkg/front_end/testcases/none/method_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/none/method_invocation.dart.weak.transformed.expect
index 7908441..4681584 100644
--- a/pkg/front_end/testcases/none/method_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/none/method_invocation.dart.weak.transformed.expect
@@ -112,7 +112,7 @@
     return 0.5;
 }
 class Class2<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::Class2::T% field;
+  covariant-by-class field self::Class2::T% field;
   field core::Function nonNullableFunctionField;
   field core::Function? nullableFunctionField = null;
   field () → void nonNullableFunctionTypedField;
diff --git a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.expect b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.expect
index 940de1e..e88db74 100644
--- a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.expect
+++ b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → mai::SuperClass
     : super core::Object::•()
     ;
-  method method(covariant core::int i) → void {}
+  method method(covariant-by-declaration core::int i) → void {}
 }
 class Mixin extends core::Object {
   synthetic constructor •() → mai::Mixin
@@ -33,7 +33,7 @@
   synthetic constructor •() → mai::_Class&SuperClass&Mixin
     : super mai::SuperClass::•()
     ;
-  forwarding-stub method method(covariant core::num i) → void
+  forwarding-stub method method(covariant-by-declaration core::num i) → void
     return super.{mai::Mixin::method}(i);
 }
 class Class extends mai::_Class&SuperClass&Mixin {
diff --git a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.transformed.expect b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.transformed.expect
index 940de1e..e88db74 100644
--- a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.strong.transformed.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → mai::SuperClass
     : super core::Object::•()
     ;
-  method method(covariant core::int i) → void {}
+  method method(covariant-by-declaration core::int i) → void {}
 }
 class Mixin extends core::Object {
   synthetic constructor •() → mai::Mixin
@@ -33,7 +33,7 @@
   synthetic constructor •() → mai::_Class&SuperClass&Mixin
     : super mai::SuperClass::•()
     ;
-  forwarding-stub method method(covariant core::num i) → void
+  forwarding-stub method method(covariant-by-declaration core::num i) → void
     return super.{mai::Mixin::method}(i);
 }
 class Class extends mai::_Class&SuperClass&Mixin {
diff --git a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.expect b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.expect
index 940de1e..e88db74 100644
--- a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.expect
+++ b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → mai::SuperClass
     : super core::Object::•()
     ;
-  method method(covariant core::int i) → void {}
+  method method(covariant-by-declaration core::int i) → void {}
 }
 class Mixin extends core::Object {
   synthetic constructor •() → mai::Mixin
@@ -33,7 +33,7 @@
   synthetic constructor •() → mai::_Class&SuperClass&Mixin
     : super mai::SuperClass::•()
     ;
-  forwarding-stub method method(covariant core::num i) → void
+  forwarding-stub method method(covariant-by-declaration core::num i) → void
     return super.{mai::Mixin::method}(i);
 }
 class Class extends mai::_Class&SuperClass&Mixin {
diff --git a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.outline.expect b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.outline.expect
index b6f679a..8a68721 100644
--- a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.outline.expect
@@ -18,7 +18,7 @@
 class SuperClass extends core::Object {
   synthetic constructor •() → mai::SuperClass
     ;
-  method method(covariant core::int i) → void
+  method method(covariant-by-declaration core::int i) → void
     ;
 }
 class Mixin extends core::Object {
@@ -31,7 +31,7 @@
   synthetic constructor •() → mai::_Class&SuperClass&Mixin
     : super mai::SuperClass::•()
     ;
-  forwarding-stub method method(covariant core::num i) → void
+  forwarding-stub method method(covariant-by-declaration core::num i) → void
     return super.{mai::Mixin::method}(i);
 }
 class Class extends mai::_Class&SuperClass&Mixin {
diff --git a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.transformed.expect b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.transformed.expect
index 940de1e..e88db74 100644
--- a/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/none/mixin_application_declares/main.dart.weak.transformed.expect
@@ -21,7 +21,7 @@
   synthetic constructor •() → mai::SuperClass
     : super core::Object::•()
     ;
-  method method(covariant core::int i) → void {}
+  method method(covariant-by-declaration core::int i) → void {}
 }
 class Mixin extends core::Object {
   synthetic constructor •() → mai::Mixin
@@ -33,7 +33,7 @@
   synthetic constructor •() → mai::_Class&SuperClass&Mixin
     : super mai::SuperClass::•()
     ;
-  forwarding-stub method method(covariant core::num i) → void
+  forwarding-stub method method(covariant-by-declaration core::num i) → void
     return super.{mai::Mixin::method}(i);
 }
 class Class extends mai::_Class&SuperClass&Mixin {
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect
index 81796a7..ebd8305 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.expect
@@ -10,9 +10,9 @@
     return "Superclass";
   method method2(core::num argument1, core::num argument2) → core::String
     return "Superclass";
-  method method3(core::num argument1, covariant core::int argument2) → core::String
+  method method3(core::num argument1, covariant-by-declaration core::int argument2) → core::String
     return "Superclass";
-  method method4(core::num argument1, covariant core::num argument2) → core::String
+  method method4(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return "Superclass";
 }
 class Mixin extends core::Object {
@@ -21,11 +21,11 @@
     ;
   method method1(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method2(covariant core::int argument1, core::num argument2) → core::String
+  method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return "Mixin";
   method method3(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method4(covariant core::int argument1, core::int argument2) → core::String
+  method method4(covariant-by-declaration core::int argument1, core::int argument2) → core::String
     return "Mixin";
 }
 abstract class _Class&Superclass&Mixin = self::Superclass with self::Mixin /*isAnonymousMixin*/  {
@@ -34,11 +34,11 @@
     ;
   mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
     return super.{self::Mixin::method1}(argument1, argument2);
-  mixin-super-stub method method2(covariant core::int argument1, core::num argument2) → core::String
+  mixin-super-stub method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return super.{self::Mixin::method2}(argument1, argument2);
-  forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
+  forwarding-stub method method3(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return super.{self::Mixin::method3}(argument1, argument2);
-  forwarding-stub method method4(covariant core::int argument1, covariant core::int argument2) → core::String
+  forwarding-stub method method4(covariant-by-declaration core::int argument1, covariant-by-declaration core::int argument2) → core::String
     return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect
index 81796a7..ebd8305 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.strong.transformed.expect
@@ -10,9 +10,9 @@
     return "Superclass";
   method method2(core::num argument1, core::num argument2) → core::String
     return "Superclass";
-  method method3(core::num argument1, covariant core::int argument2) → core::String
+  method method3(core::num argument1, covariant-by-declaration core::int argument2) → core::String
     return "Superclass";
-  method method4(core::num argument1, covariant core::num argument2) → core::String
+  method method4(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return "Superclass";
 }
 class Mixin extends core::Object {
@@ -21,11 +21,11 @@
     ;
   method method1(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method2(covariant core::int argument1, core::num argument2) → core::String
+  method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return "Mixin";
   method method3(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method4(covariant core::int argument1, core::int argument2) → core::String
+  method method4(covariant-by-declaration core::int argument1, core::int argument2) → core::String
     return "Mixin";
 }
 abstract class _Class&Superclass&Mixin = self::Superclass with self::Mixin /*isAnonymousMixin*/  {
@@ -34,11 +34,11 @@
     ;
   mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
     return super.{self::Mixin::method1}(argument1, argument2);
-  mixin-super-stub method method2(covariant core::int argument1, core::num argument2) → core::String
+  mixin-super-stub method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return super.{self::Mixin::method2}(argument1, argument2);
-  forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
+  forwarding-stub method method3(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return super.{self::Mixin::method3}(argument1, argument2);
-  forwarding-stub method method4(covariant core::int argument1, covariant core::int argument2) → core::String
+  forwarding-stub method method4(covariant-by-declaration core::int argument1, covariant-by-declaration core::int argument2) → core::String
     return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.expect
index 81796a7..ebd8305 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.expect
@@ -10,9 +10,9 @@
     return "Superclass";
   method method2(core::num argument1, core::num argument2) → core::String
     return "Superclass";
-  method method3(core::num argument1, covariant core::int argument2) → core::String
+  method method3(core::num argument1, covariant-by-declaration core::int argument2) → core::String
     return "Superclass";
-  method method4(core::num argument1, covariant core::num argument2) → core::String
+  method method4(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return "Superclass";
 }
 class Mixin extends core::Object {
@@ -21,11 +21,11 @@
     ;
   method method1(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method2(covariant core::int argument1, core::num argument2) → core::String
+  method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return "Mixin";
   method method3(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method4(covariant core::int argument1, core::int argument2) → core::String
+  method method4(covariant-by-declaration core::int argument1, core::int argument2) → core::String
     return "Mixin";
 }
 abstract class _Class&Superclass&Mixin = self::Superclass with self::Mixin /*isAnonymousMixin*/  {
@@ -34,11 +34,11 @@
     ;
   mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
     return super.{self::Mixin::method1}(argument1, argument2);
-  mixin-super-stub method method2(covariant core::int argument1, core::num argument2) → core::String
+  mixin-super-stub method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return super.{self::Mixin::method2}(argument1, argument2);
-  forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
+  forwarding-stub method method3(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return super.{self::Mixin::method3}(argument1, argument2);
-  forwarding-stub method method4(covariant core::int argument1, covariant core::int argument2) → core::String
+  forwarding-stub method method4(covariant-by-declaration core::int argument1, covariant-by-declaration core::int argument2) → core::String
     return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.outline.expect
index d858827..a2ed6ce 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.outline.expect
@@ -9,9 +9,9 @@
     ;
   method method2(core::num argument1, core::num argument2) → core::String
     ;
-  method method3(core::num argument1, covariant core::int argument2) → core::String
+  method method3(core::num argument1, covariant-by-declaration core::int argument2) → core::String
     ;
-  method method4(core::num argument1, covariant core::num argument2) → core::String
+  method method4(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     ;
 }
 class Mixin extends core::Object {
@@ -19,11 +19,11 @@
     ;
   method method1(core::num argument1, core::num argument2) → core::String
     ;
-  method method2(covariant core::int argument1, core::num argument2) → core::String
+  method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     ;
   method method3(core::num argument1, core::num argument2) → core::String
     ;
-  method method4(covariant core::int argument1, core::int argument2) → core::String
+  method method4(covariant-by-declaration core::int argument1, core::int argument2) → core::String
     ;
 }
 abstract class _Class&Superclass&Mixin = self::Superclass with self::Mixin /*isAnonymousMixin*/  {
@@ -32,11 +32,11 @@
     ;
   mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
     return super.{self::Mixin::method1}(argument1, argument2);
-  mixin-super-stub method method2(covariant core::int argument1, core::num argument2) → core::String
+  mixin-super-stub method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return super.{self::Mixin::method2}(argument1, argument2);
-  forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
+  forwarding-stub method method3(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return super.{self::Mixin::method3}(argument1, argument2);
-  forwarding-stub method method4(covariant core::int argument1, covariant core::int argument2) → core::String
+  forwarding-stub method method4(covariant-by-declaration core::int argument1, covariant-by-declaration core::int argument2) → core::String
     return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
diff --git a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.transformed.expect
index 81796a7..ebd8305 100644
--- a/pkg/front_end/testcases/none/mixin_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/none/mixin_covariant.dart.weak.transformed.expect
@@ -10,9 +10,9 @@
     return "Superclass";
   method method2(core::num argument1, core::num argument2) → core::String
     return "Superclass";
-  method method3(core::num argument1, covariant core::int argument2) → core::String
+  method method3(core::num argument1, covariant-by-declaration core::int argument2) → core::String
     return "Superclass";
-  method method4(core::num argument1, covariant core::num argument2) → core::String
+  method method4(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return "Superclass";
 }
 class Mixin extends core::Object {
@@ -21,11 +21,11 @@
     ;
   method method1(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method2(covariant core::int argument1, core::num argument2) → core::String
+  method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return "Mixin";
   method method3(core::num argument1, core::num argument2) → core::String
     return "Mixin";
-  method method4(covariant core::int argument1, core::int argument2) → core::String
+  method method4(covariant-by-declaration core::int argument1, core::int argument2) → core::String
     return "Mixin";
 }
 abstract class _Class&Superclass&Mixin = self::Superclass with self::Mixin /*isAnonymousMixin*/  {
@@ -34,11 +34,11 @@
     ;
   mixin-super-stub method method1(core::num argument1, core::num argument2) → core::String
     return super.{self::Mixin::method1}(argument1, argument2);
-  mixin-super-stub method method2(covariant core::int argument1, core::num argument2) → core::String
+  mixin-super-stub method method2(covariant-by-declaration core::int argument1, core::num argument2) → core::String
     return super.{self::Mixin::method2}(argument1, argument2);
-  forwarding-stub method method3(core::num argument1, covariant core::num argument2) → core::String
+  forwarding-stub method method3(core::num argument1, covariant-by-declaration core::num argument2) → core::String
     return super.{self::Mixin::method3}(argument1, argument2);
-  forwarding-stub method method4(covariant core::int argument1, covariant core::int argument2) → core::String
+  forwarding-stub method method4(covariant-by-declaration core::int argument1, covariant-by-declaration core::int argument2) → core::String
     return super.{self::Mixin::method4}(argument1, argument2);
 }
 class Class extends self::_Class&Superclass&Mixin {
diff --git a/pkg/front_end/testcases/none/operator.dart.strong.expect b/pkg/front_end/testcases/none/operator.dart.strong.expect
index 670534d..a272988 100644
--- a/pkg/front_end/testcases/none/operator.dart.strong.expect
+++ b/pkg/front_end/testcases/none/operator.dart.strong.expect
@@ -47,13 +47,13 @@
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  operator +(generic-covariant-impl self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
+  operator +(covariant-by-class self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
     return other;
   operator unary-() → self::Class<self::Class::T%>
     return this;
   operator [](core::int index) → self::Class<self::Class::T%>
     return this;
-  operator []=(core::int index, generic-covariant-impl self::Class<self::Class::T%> value) → void {}
+  operator []=(core::int index, covariant-by-class self::Class<self::Class::T%> value) → void {}
   method method(core::double o) → core::int
     return 42;
 }
diff --git a/pkg/front_end/testcases/none/operator.dart.strong.transformed.expect b/pkg/front_end/testcases/none/operator.dart.strong.transformed.expect
index 8e6c707..657d373 100644
--- a/pkg/front_end/testcases/none/operator.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/none/operator.dart.strong.transformed.expect
@@ -47,13 +47,13 @@
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  operator +(generic-covariant-impl self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
+  operator +(covariant-by-class self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
     return other;
   operator unary-() → self::Class<self::Class::T%>
     return this;
   operator [](core::int index) → self::Class<self::Class::T%>
     return this;
-  operator []=(core::int index, generic-covariant-impl self::Class<self::Class::T%> value) → void {}
+  operator []=(core::int index, covariant-by-class self::Class<self::Class::T%> value) → void {}
   method method(core::double o) → core::int
     return 42;
 }
diff --git a/pkg/front_end/testcases/none/operator.dart.weak.expect b/pkg/front_end/testcases/none/operator.dart.weak.expect
index 712a616..4de73e4 100644
--- a/pkg/front_end/testcases/none/operator.dart.weak.expect
+++ b/pkg/front_end/testcases/none/operator.dart.weak.expect
@@ -48,13 +48,13 @@
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  operator +(generic-covariant-impl self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
+  operator +(covariant-by-class self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
     return other;
   operator unary-() → self::Class<self::Class::T%>
     return this;
   operator [](core::int index) → self::Class<self::Class::T%>
     return this;
-  operator []=(core::int index, generic-covariant-impl self::Class<self::Class::T%> value) → void {}
+  operator []=(core::int index, covariant-by-class self::Class<self::Class::T%> value) → void {}
   method method(core::double o) → core::int
     return 42;
 }
diff --git a/pkg/front_end/testcases/none/operator.dart.weak.outline.expect b/pkg/front_end/testcases/none/operator.dart.weak.outline.expect
index b105389..12e40df 100644
--- a/pkg/front_end/testcases/none/operator.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/none/operator.dart.weak.outline.expect
@@ -5,13 +5,13 @@
 class Class<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::Class<self::Class::T%>
     ;
-  operator +(generic-covariant-impl self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
+  operator +(covariant-by-class self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
     ;
   operator unary-() → self::Class<self::Class::T%>
     ;
   operator [](core::int index) → self::Class<self::Class::T%>
     ;
-  operator []=(core::int index, generic-covariant-impl self::Class<self::Class::T%> value) → void
+  operator []=(core::int index, covariant-by-class self::Class<self::Class::T%> value) → void
     ;
   method method(core::double o) → core::int
     ;
diff --git a/pkg/front_end/testcases/none/operator.dart.weak.transformed.expect b/pkg/front_end/testcases/none/operator.dart.weak.transformed.expect
index 059550b..0614059 100644
--- a/pkg/front_end/testcases/none/operator.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/none/operator.dart.weak.transformed.expect
@@ -48,13 +48,13 @@
   synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  operator +(generic-covariant-impl self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
+  operator +(covariant-by-class self::Class<self::Class::T%> other) → self::Class<self::Class::T%>
     return other;
   operator unary-() → self::Class<self::Class::T%>
     return this;
   operator [](core::int index) → self::Class<self::Class::T%>
     return this;
-  operator []=(core::int index, generic-covariant-impl self::Class<self::Class::T%> value) → void {}
+  operator []=(core::int index, covariant-by-class self::Class<self::Class::T%> value) → void {}
   method method(core::double o) → core::int
     return 42;
 }
diff --git a/pkg/front_end/testcases/none/property_get.dart.strong.expect b/pkg/front_end/testcases/none/property_get.dart.strong.expect
index 4f2e9fa..e4aa752 100644
--- a/pkg/front_end/testcases/none/property_get.dart.strong.expect
+++ b/pkg/front_end/testcases/none/property_get.dart.strong.expect
@@ -47,7 +47,7 @@
     return 0;
 }
 class Class2<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::Class2::T% field;
+  covariant-by-class field self::Class2::T% field;
   constructor •(self::Class2::T% field) → self::Class2<self::Class2::T%>
     : self::Class2::field = field, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/none/property_get.dart.strong.transformed.expect b/pkg/front_end/testcases/none/property_get.dart.strong.transformed.expect
index 4f2e9fa..e4aa752 100644
--- a/pkg/front_end/testcases/none/property_get.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/none/property_get.dart.strong.transformed.expect
@@ -47,7 +47,7 @@
     return 0;
 }
 class Class2<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::Class2::T% field;
+  covariant-by-class field self::Class2::T% field;
   constructor •(self::Class2::T% field) → self::Class2<self::Class2::T%>
     : self::Class2::field = field, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/none/property_get.dart.weak.expect b/pkg/front_end/testcases/none/property_get.dart.weak.expect
index 95f436b..20f72b6 100644
--- a/pkg/front_end/testcases/none/property_get.dart.weak.expect
+++ b/pkg/front_end/testcases/none/property_get.dart.weak.expect
@@ -48,7 +48,7 @@
     return 0;
 }
 class Class2<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::Class2::T% field;
+  covariant-by-class field self::Class2::T% field;
   constructor •(self::Class2::T% field) → self::Class2<self::Class2::T%>
     : self::Class2::field = field, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/none/property_get.dart.weak.outline.expect b/pkg/front_end/testcases/none/property_get.dart.weak.outline.expect
index fcd26f0..8a24ed3 100644
--- a/pkg/front_end/testcases/none/property_get.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/none/property_get.dart.weak.outline.expect
@@ -13,7 +13,7 @@
     ;
 }
 class Class2<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::Class2::T% field;
+  covariant-by-class field self::Class2::T% field;
   constructor •(self::Class2::T% field) → self::Class2<self::Class2::T%>
     ;
   method call() → core::int
diff --git a/pkg/front_end/testcases/none/property_get.dart.weak.transformed.expect b/pkg/front_end/testcases/none/property_get.dart.weak.transformed.expect
index 95f436b..20f72b6 100644
--- a/pkg/front_end/testcases/none/property_get.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/none/property_get.dart.weak.transformed.expect
@@ -48,7 +48,7 @@
     return 0;
 }
 class Class2<T extends core::Object? = dynamic> extends core::Object {
-  generic-covariant-impl field self::Class2::T% field;
+  covariant-by-class field self::Class2::T% field;
   constructor •(self::Class2::T% field) → self::Class2<self::Class2::T%>
     : self::Class2::field = field, super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.expect
index 99090fe..71a6850 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class Foo extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Foo*>* values = #C7;
   static const field self::Foo* ec1 = #C3;
   static const field self::Foo* ec2 = #C6;
-  const constructor •(core::int* index, core::String* _name) → self::Foo*
-    : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::Foo*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Foo::_name}{core::String*};
+    return "Foo.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -27,10 +27,10 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Foo.ec1"
+  #C2 = "ec1"
   #C3 = self::Foo {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "Foo.ec2"
+  #C5 = "ec2"
   #C6 = self::Foo {index:#C4, _name:#C5}
   #C7 = <self::Foo*>[#C3, #C6]
 }
@@ -39,4 +39,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - Foo. (from org-dartlang-testcase:///enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.outline.expect
index 3d39d28..ce9532d 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.outline.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class Foo extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Foo*>* values = const <self::Foo*>[self::Foo::ec1, self::Foo::ec2];
-  static const field self::Foo* ec1 = const self::Foo::•(0, "Foo.ec1");
-  static const field self::Foo* ec2 = const self::Foo::•(1, "Foo.ec2");
-  const constructor •(core::int* index, core::String* _name) → self::Foo*
-    : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
+  static const field self::Foo* ec1 = const self::Foo::•(0, "ec1");
+  static const field self::Foo* ec2 = const self::Foo::•(1, "ec2");
+  const constructor •(core::int* index, core::String* name) → self::Foo*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Foo::_name}{core::String*};
+    return "Foo.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -28,7 +28,7 @@
 
 
 Extra constant evaluation status:
-Evaluated: ListLiteral @ org-dartlang-testcase:///enum.dart:5:6 -> ListConstant(const <Foo*>[const Foo{Foo.index: 0, Foo._name: "Foo.ec1"}, const Foo{Foo.index: 1, Foo._name: "Foo.ec2"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum.dart:6:3 -> InstanceConstant(const Foo{Foo.index: 0, Foo._name: "Foo.ec1"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum.dart:7:3 -> InstanceConstant(const Foo{Foo.index: 1, Foo._name: "Foo.ec2"})
-Extra constant evaluation: evaluated: 7, effectively constant: 3
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum.dart:5:6 -> ListConstant(const <Foo*>[const Foo{_Enum.index: 0, _Enum._name: "ec1"}, const Foo{_Enum.index: 1, _Enum._name: "ec2"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum.dart:6:3 -> InstanceConstant(const Foo{_Enum.index: 0, _Enum._name: "ec1"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum.dart:7:3 -> InstanceConstant(const Foo{_Enum.index: 1, _Enum._name: "ec2"})
+Extra constant evaluation: evaluated: 8, effectively constant: 3
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
index 99090fe..71a6850 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-class Foo extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int* index;
-  final field core::String* _name;
+class Foo extends core::_Enum /*isEnum*/  {
   static const field core::List<self::Foo*>* values = #C7;
   static const field self::Foo* ec1 = #C3;
   static const field self::Foo* ec2 = #C6;
-  const constructor •(core::int* index, core::String* _name) → self::Foo*
-    : self::Foo::index = index, self::Foo::_name = _name, super core::Object::•()
+  const constructor •(core::int* index, core::String* name) → self::Foo*
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String*
-    return this.{self::Foo::_name}{core::String*};
+    return "Foo.${this.{core::_Enum::_name}{core::String}}";
+  abstract member-signature get index() → core::int*; -> core::_Enum::index
+  abstract member-signature get _name() → core::String*; -> core::_Enum::_name
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -27,10 +27,10 @@
 
 constants  {
   #C1 = 0
-  #C2 = "Foo.ec1"
+  #C2 = "ec1"
   #C3 = self::Foo {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "Foo.ec2"
+  #C5 = "ec2"
   #C6 = self::Foo {index:#C4, _name:#C5}
   #C7 = <self::Foo*>[#C3, #C6]
 }
@@ -39,4 +39,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - Foo. (from org-dartlang-testcase:///enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.expect
index 18d9024..a5f9ac1 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.expect
@@ -24,7 +24,7 @@
   get getter() → core::List<self::A::U*>* {
     return this.{self::A::field}{core::List<self::A::U*>*};
   }
-  set setter(generic-covariant-impl self::A::S* s) → void {}
+  set setter(covariant-by-class self::A::S* s) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.outline.expect
index 9e77b8e..5dae040 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.outline.expect
@@ -17,7 +17,7 @@
     ;
   get getter() → core::List<self::A::U*>*
     ;
-  set setter(generic-covariant-impl self::A::S* s) → void
+  set setter(covariant-by-class self::A::S* s) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.transformed.expect
index 9534f31..9cfd4c4 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.weak.transformed.expect
@@ -24,7 +24,7 @@
   get getter() → core::List<self::A::U*>* {
     return this.{self::A::field}{core::List<self::A::U*>*};
   }
-  set setter(generic-covariant-impl self::A::S* s) → void {}
+  set setter(covariant-by-class self::A::S* s) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.expect
index bca934b..e6d1af6 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.expect
@@ -13,13 +13,13 @@
   field dynamic x = self::f();
   field dynamic y = null;
   field dynamic z = null;
-  generic-covariant-impl field self::Mixin::T* t = null;
+  covariant-by-class field self::Mixin::T* t = null;
   synthetic constructor •() → self::Mixin<self::Mixin::T*>*
     : super core::Object::•()
     ;
   method foo() → dynamic
     return super.foo(){dynamic}.+(self::f());
-  method g(generic-covariant-impl self::Mixin::T* a) → self::Mixin::T*
+  method g(covariant-by-class self::Mixin::T* a) → self::Mixin::T*
     return null;
   method h() → dynamic
     return self::V();
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.outline.expect
index f69d1f3..4eb68b3 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.weak.outline.expect
@@ -6,12 +6,12 @@
   field dynamic x;
   field dynamic y;
   field dynamic z;
-  generic-covariant-impl field self::Mixin::T* t;
+  covariant-by-class field self::Mixin::T* t;
   synthetic constructor •() → self::Mixin<self::Mixin::T*>*
     ;
   method foo() → dynamic
     ;
-  method g(generic-covariant-impl self::Mixin::T* a) → self::Mixin::T*
+  method g(covariant-by-class self::Mixin::T* a) → self::Mixin::T*
     ;
   method h() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.expect
index 0c41919..0327051 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.expect
@@ -42,11 +42,11 @@
     return super.{mix::Mixin::z} = value;
   mixin-super-stub get t() → self::_C&Super&Mixin::V*
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(generic-covariant-impl self::_C&Super&Mixin::V* value) → void
+  mixin-super-stub set t(covariant-by-class self::_C&Super&Mixin::V* value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(generic-covariant-impl self::_C&Super&Mixin::V* a) → self::_C&Super&Mixin::V*
+  mixin-super-stub method g(covariant-by-class self::_C&Super&Mixin::V* a) → self::_C&Super&Mixin::V*
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -80,11 +80,11 @@
     return super.{mix::Mixin::z} = value;
   mixin-super-stub get t() → dynamic
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(generic-covariant-impl dynamic value) → void
+  mixin-super-stub set t(covariant-by-class dynamic value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(generic-covariant-impl dynamic a) → dynamic
+  mixin-super-stub method g(covariant-by-class dynamic a) → dynamic
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -118,11 +118,11 @@
     return super.{mix::Mixin::z} = value;
   mixin-super-stub get t() → self::C2::V*
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(generic-covariant-impl self::C2::V* value) → void
+  mixin-super-stub set t(covariant-by-class self::C2::V* value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(generic-covariant-impl self::C2::V* a) → self::C2::V*
+  mixin-super-stub method g(covariant-by-class self::C2::V* a) → self::C2::V*
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -151,11 +151,11 @@
     return super.{mix::Mixin::z} = value;
   mixin-super-stub get t() → dynamic
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(generic-covariant-impl dynamic value) → void
+  mixin-super-stub set t(covariant-by-class dynamic value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(generic-covariant-impl dynamic a) → dynamic
+  mixin-super-stub method g(covariant-by-class dynamic a) → dynamic
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -186,13 +186,13 @@
   field dynamic x = mix::f();
   field dynamic y = null;
   field dynamic z = null;
-  generic-covariant-impl field mix::Mixin::T* t = null;
+  covariant-by-class field mix::Mixin::T* t = null;
   synthetic constructor •() → mix::Mixin<mix::Mixin::T*>*
     : super core::Object::•()
     ;
   method foo() → dynamic
     return super.foo(){dynamic}.+(mix::f());
-  method g(generic-covariant-impl mix::Mixin::T* a) → mix::Mixin::T*
+  method g(covariant-by-class mix::Mixin::T* a) → mix::Mixin::T*
     return null;
   method h() → dynamic
     return mix::V();
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.outline.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.outline.expect
index 81ef6ef..c1b58e7 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.weak.outline.expect
@@ -41,11 +41,11 @@
     return super.{mix::Mixin::z} = value;
   mixin-super-stub get t() → self::_C&Super&Mixin::V*
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(generic-covariant-impl self::_C&Super&Mixin::V* value) → void
+  mixin-super-stub set t(covariant-by-class self::_C&Super&Mixin::V* value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(generic-covariant-impl self::_C&Super&Mixin::V* a) → self::_C&Super&Mixin::V*
+  mixin-super-stub method g(covariant-by-class self::_C&Super&Mixin::V* a) → self::_C&Super&Mixin::V*
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -78,11 +78,11 @@
     return super.{mix::Mixin::z} = value;
   mixin-super-stub get t() → dynamic
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(generic-covariant-impl dynamic value) → void
+  mixin-super-stub set t(covariant-by-class dynamic value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(generic-covariant-impl dynamic a) → dynamic
+  mixin-super-stub method g(covariant-by-class dynamic a) → dynamic
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -115,11 +115,11 @@
     return super.{mix::Mixin::z} = value;
   mixin-super-stub get t() → self::C2::V*
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(generic-covariant-impl self::C2::V* value) → void
+  mixin-super-stub set t(covariant-by-class self::C2::V* value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(generic-covariant-impl self::C2::V* a) → self::C2::V*
+  mixin-super-stub method g(covariant-by-class self::C2::V* a) → self::C2::V*
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -148,11 +148,11 @@
     return super.{mix::Mixin::z} = value;
   mixin-super-stub get t() → dynamic
     return super.{mix::Mixin::t};
-  mixin-super-stub set t(generic-covariant-impl dynamic value) → void
+  mixin-super-stub set t(covariant-by-class dynamic value) → void
     return super.{mix::Mixin::t} = value;
   mixin-super-stub method foo() → dynamic
     return super.{mix::Mixin::foo}();
-  mixin-super-stub method g(generic-covariant-impl dynamic a) → dynamic
+  mixin-super-stub method g(covariant-by-class dynamic a) → dynamic
     return super.{mix::Mixin::g}(a);
   mixin-super-stub method h() → dynamic
     return super.{mix::Mixin::h}();
@@ -174,12 +174,12 @@
   field dynamic x;
   field dynamic y;
   field dynamic z;
-  generic-covariant-impl field mix::Mixin::T* t;
+  covariant-by-class field mix::Mixin::T* t;
   synthetic constructor •() → mix::Mixin<mix::Mixin::T*>*
     ;
   method foo() → dynamic
     ;
-  method g(generic-covariant-impl mix::Mixin::T* a) → mix::Mixin::T*
+  method g(covariant-by-class mix::Mixin::T* a) → mix::Mixin::T*
     ;
   method h() → dynamic
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.expect
index 888b0a2..d641b1f 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.expect
@@ -8,7 +8,7 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f(generic-covariant-impl self::C::T* value) → void {
+  method f(covariant-by-class self::C::T* value) → void {
     let final self::C::T* #t1 = value in this.{self::C::y}{(self::C::T*) →* void}(#t1){(self::C::T*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.outline.expect
index d8bc83f..84a11c2 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.outline.expect
@@ -7,7 +7,7 @@
   field (self::C::T*) →* void y;
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method f(generic-covariant-impl self::C::T* value) → void
+  method f(covariant-by-class self::C::T* value) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.transformed.expect
index b58547d..66836cf 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.weak.transformed.expect
@@ -8,7 +8,7 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f(generic-covariant-impl self::C::T* value) → void {
+  method f(covariant-by-class self::C::T* value) → void {
     let final self::C::T* #t1 = value in this.{self::C::y}{(self::C::T*) →* void}(#t1){(self::C::T*) →* void};
   }
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect
index 2d633a8..23d142c 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.expect
@@ -19,8 +19,8 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f<generic-covariant-impl U extends self::C::T*>(self::C::f::U* x) → void {}
-  method g1<generic-covariant-impl U extends self::C::T*>() → void {
+  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void {}
+  method g1<covariant-by-class U extends self::C::T*>() → void {
     this.{self::C::f}<self::C::g1::U*>(invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
     this.f<U>(1.5);
               ^" in 1.5 as{TypeError} Never){(self::C::g1::U*) →* void};
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.outline.expect
index 133cc4d..a4e9eee9 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.outline.expect
@@ -5,9 +5,9 @@
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method f<generic-covariant-impl U extends self::C::T*>(self::C::f::U* x) → void
+  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void
     ;
-  method g1<generic-covariant-impl U extends self::C::T*>() → void
+  method g1<covariant-by-class U extends self::C::T*>() → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect
index 2d633a8..23d142c 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.weak.transformed.expect
@@ -19,8 +19,8 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f<generic-covariant-impl U extends self::C::T*>(self::C::f::U* x) → void {}
-  method g1<generic-covariant-impl U extends self::C::T*>() → void {
+  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void {}
+  method g1<covariant-by-class U extends self::C::T*>() → void {
     this.{self::C::f}<self::C::g1::U*>(invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:15: Error: The argument type 'double' can't be assigned to the parameter type 'U'.
     this.f<U>(1.5);
               ^" in 1.5 as{TypeError} Never){(self::C::g1::U*) →* void};
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.expect
index 416b83b..2794c16 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f(generic-covariant-impl self::C::T* x) → void {}
+  method f(covariant-by-class self::C::T* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.outline.expect
index aeef163..1c58939 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method f(generic-covariant-impl self::C::T* x) → void
+  method f(covariant-by-class self::C::T* x) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.transformed.expect
index 416b83b..2794c16 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f(generic-covariant-impl self::C::T* x) → void {}
+  method f(covariant-by-class self::C::T* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.expect
index 4cc02bb..41147c6 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f1(generic-covariant-impl core::List<self::C::T*>* x) → void {}
-  method f2(generic-covariant-impl () →* self::C::T* callback) → void {}
-  method f3(generic-covariant-impl (self::C::T*) →* self::C::T* callback) → void {}
+  method f1(covariant-by-class core::List<self::C::T*>* x) → void {}
+  method f2(covariant-by-class () →* self::C::T* callback) → void {}
+  method f3(covariant-by-class (self::C::T*) →* self::C::T* callback) → void {}
   method f4((self::C::T*) →* void callback) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.outline.expect
index 679102f..1482d6b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.outline.expect
@@ -5,11 +5,11 @@
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method f1(generic-covariant-impl core::List<self::C::T*>* x) → void
+  method f1(covariant-by-class core::List<self::C::T*>* x) → void
     ;
-  method f2(generic-covariant-impl () →* self::C::T* callback) → void
+  method f2(covariant-by-class () →* self::C::T* callback) → void
     ;
-  method f3(generic-covariant-impl (self::C::T*) →* self::C::T* callback) → void
+  method f3(covariant-by-class (self::C::T*) →* self::C::T* callback) → void
     ;
   method f4((self::C::T*) →* void callback) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.transformed.expect
index 4cc02bb..41147c6 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.weak.transformed.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f1(generic-covariant-impl core::List<self::C::T*>* x) → void {}
-  method f2(generic-covariant-impl () →* self::C::T* callback) → void {}
-  method f3(generic-covariant-impl (self::C::T*) →* self::C::T* callback) → void {}
+  method f1(covariant-by-class core::List<self::C::T*>* x) → void {}
+  method f2(covariant-by-class () →* self::C::T* callback) → void {}
+  method f3(covariant-by-class (self::C::T*) →* self::C::T* callback) → void {}
   method f4((self::C::T*) →* void callback) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.expect
index b2163ff..b492a06 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.expect
@@ -6,8 +6,8 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f1(generic-covariant-impl self::I::T* x) → void;
-  abstract method f2(generic-covariant-impl self::I::T* x) → void;
+  abstract method f1(covariant-by-class self::I::T* x) → void;
+  abstract method f2(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -23,8 +23,8 @@
   synthetic constructor •() → self::C<self::C::U*>*
     : super core::Object::•()
     ;
-  method f1(generic-covariant-impl core::int* x) → void {}
-  method f2(generic-covariant-impl core::int* x, [generic-covariant-impl self::C::U* y = #C1]) → void {}
+  method f1(covariant-by-class core::int* x) → void {}
+  method f2(covariant-by-class core::int* x, [covariant-by-class self::C::U* y = #C1]) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -40,8 +40,8 @@
   synthetic constructor •() → self::D<self::D::U*>*
     : super self::C::•()
     ;
-  method f1(generic-covariant-impl core::int* x) → void {}
-  method f2(generic-covariant-impl core::int* x, [generic-covariant-impl self::D::U* y = #C1]) → void {}
+  method f1(covariant-by-class core::int* x) → void {}
+  method f2(covariant-by-class core::int* x, [covariant-by-class self::D::U* y = #C1]) → void {}
 }
 static method g1(self::C<core::num*>* c) → void {
   c.{self::C::f1}(1){(core::int*) →* void};
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect
index 6e019d6..d5ecfdf 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.outline.expect
@@ -5,8 +5,8 @@
 abstract class I<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::I<self::I::T*>*
     ;
-  abstract method f1(generic-covariant-impl self::I::T* x) → void;
-  abstract method f2(generic-covariant-impl self::I::T* x) → void;
+  abstract method f1(covariant-by-class self::I::T* x) → void;
+  abstract method f2(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -21,9 +21,9 @@
 class C<U extends core::Object* = dynamic> extends core::Object implements self::I<core::int*> {
   synthetic constructor •() → self::C<self::C::U*>*
     ;
-  method f1(generic-covariant-impl core::int* x) → void
+  method f1(covariant-by-class core::int* x) → void
     ;
-  method f2(generic-covariant-impl core::int* x, [generic-covariant-impl self::C::U* y]) → void
+  method f2(covariant-by-class core::int* x, [covariant-by-class self::C::U* y]) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -39,9 +39,9 @@
 class D<U extends core::Object* = dynamic> extends self::C<self::D::U*> {
   synthetic constructor •() → self::D<self::D::U*>*
     ;
-  method f1(generic-covariant-impl core::int* x) → void
+  method f1(covariant-by-class core::int* x) → void
     ;
-  method f2(generic-covariant-impl core::int* x, [generic-covariant-impl self::D::U* y]) → void
+  method f2(covariant-by-class core::int* x, [covariant-by-class self::D::U* y]) → void
     ;
 }
 static method g1(self::C<core::num*>* c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.transformed.expect
index b2163ff..b492a06 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.weak.transformed.expect
@@ -6,8 +6,8 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f1(generic-covariant-impl self::I::T* x) → void;
-  abstract method f2(generic-covariant-impl self::I::T* x) → void;
+  abstract method f1(covariant-by-class self::I::T* x) → void;
+  abstract method f2(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -23,8 +23,8 @@
   synthetic constructor •() → self::C<self::C::U*>*
     : super core::Object::•()
     ;
-  method f1(generic-covariant-impl core::int* x) → void {}
-  method f2(generic-covariant-impl core::int* x, [generic-covariant-impl self::C::U* y = #C1]) → void {}
+  method f1(covariant-by-class core::int* x) → void {}
+  method f2(covariant-by-class core::int* x, [covariant-by-class self::C::U* y = #C1]) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -40,8 +40,8 @@
   synthetic constructor •() → self::D<self::D::U*>*
     : super self::C::•()
     ;
-  method f1(generic-covariant-impl core::int* x) → void {}
-  method f2(generic-covariant-impl core::int* x, [generic-covariant-impl self::D::U* y = #C1]) → void {}
+  method f1(covariant-by-class core::int* x) → void {}
+  method f2(covariant-by-class core::int* x, [covariant-by-class self::D::U* y = #C1]) → void {}
 }
 static method g1(self::C<core::num*>* c) → void {
   c.{self::C::f1}(1){(core::int*) →* void};
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.expect
index ae3c830..c7a7694 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::I::T* x) → void;
+  abstract method f(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -54,7 +54,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int* x) → void
     return super.{self::M::f}(x);
 }
 static method g1(self::C* c) → void {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.outline.expect
index 6a35bff..9ebe44f 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 abstract class I<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::I<self::I::T*>*
     ;
-  abstract method f(generic-covariant-impl self::I::T* x) → void;
+  abstract method f(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -53,7 +53,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int* x) → void
     return super.{self::M::f}(x);
 }
 static method g1(self::C* c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.transformed.expect
index a88ae80..224bd67 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::I::T* x) → void;
+  abstract method f(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -54,7 +54,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  method f(generic-covariant-impl core::int* x) → void {}
+  method f(covariant-by-class core::int* x) → void {}
 }
 static method g1(self::C* c) → void {
   c.{self::C::f}(1){(core::int*) →* void};
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.expect
index 5cda4e0..5e85a90 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::I::T* x) → void;
+  abstract method f(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int* x) → void
     return super.{self::B::f}(x);
 }
 static method g1(self::C* c) → void {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.outline.expect
index 8452be1..fc3b403 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 abstract class I<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::I<self::I::T*>*
     ;
-  abstract method f(generic-covariant-impl self::I::T* x) → void;
+  abstract method f(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,7 +36,7 @@
 class C extends self::B implements self::I<core::int*> {
   synthetic constructor •() → self::C*
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int* x) → void
     return super.{self::B::f}(x);
 }
 static method g1(self::C* c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.transformed.expect
index 5cda4e0..5e85a90 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::I::T* x) → void;
+  abstract method f(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int* x) → void
     return super.{self::B::f}(x);
 }
 static method g1(self::C* c) → void {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.expect
index b2395d9..e69ba31 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::I::T* x) → void;
+  abstract method f(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -53,7 +53,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int* x) → void
     return super.{self::B::f}(x);
 }
 static method g1(self::C* c) → void {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.outline.expect
index f38ca9d..75621ad 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 abstract class I<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::I<self::I::T*>*
     ;
-  abstract method f(generic-covariant-impl self::I::T* x) → void;
+  abstract method f(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -51,7 +51,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int* x) → void
     return super.{self::B::f}(x);
 }
 static method g1(self::C* c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.transformed.expect
index eb463e7..8aae2e5 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::I::T* x) → void;
+  abstract method f(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -53,7 +53,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x) → void
+  forwarding-stub method f(covariant-by-class core::int* x) → void
     return super.{self::B::f}(x);
 }
 static method g1(self::C* c) → void {
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.expect
index 05ac14b..a63dac3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.expect
@@ -8,8 +8,8 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f1(generic-covariant-impl self::C::T* x) → void {}
-  method f2(generic-covariant-impl core::List<self::C::T*>* x) → self::C::T*
+  method f1(covariant-by-class self::C::T* x) → void {}
+  method f2(covariant-by-class core::List<self::C::T*>* x) → self::C::T*
     return x.{core::Iterable::first}{self::C::T*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.outline.expect
index a478cb7..5ba10bb 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.outline.expect
@@ -7,9 +7,9 @@
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method f1(generic-covariant-impl self::C::T* x) → void
+  method f1(covariant-by-class self::C::T* x) → void
     ;
-  method f2(generic-covariant-impl core::List<self::C::T*>* x) → self::C::T*
+  method f2(covariant-by-class core::List<self::C::T*>* x) → self::C::T*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.transformed.expect
index 05ac14b..a63dac3 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.weak.transformed.expect
@@ -8,8 +8,8 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f1(generic-covariant-impl self::C::T* x) → void {}
-  method f2(generic-covariant-impl core::List<self::C::T*>* x) → self::C::T*
+  method f1(covariant-by-class self::C::T* x) → void {}
+  method f2(covariant-by-class core::List<self::C::T*>* x) → self::C::T*
     return x.{core::Iterable::first}{self::C::T*};
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.expect
index e05a2b1..bf44b39 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.expect
@@ -23,13 +23,13 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  method f(covariant core::int* x) → void {}
+  method f(covariant-by-declaration core::int* x) → void {}
 }
 class E extends self::D {
   synthetic constructor •() → self::E*
     : super self::D::•()
     ;
-  method f(covariant core::int* x) → void {}
+  method f(covariant-by-declaration core::int* x) → void {}
 }
 static method g1(self::C* c) → void {
   c.{self::C::f}(1.5){(core::num*) →* void};
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.outline.expect
index 0936397..24552c4 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.outline.expect
@@ -22,13 +22,13 @@
 class D extends self::C {
   synthetic constructor •() → self::D*
     ;
-  method f(covariant core::int* x) → void
+  method f(covariant-by-declaration core::int* x) → void
     ;
 }
 class E extends self::D {
   synthetic constructor •() → self::E*
     ;
-  method f(covariant core::int* x) → void
+  method f(covariant-by-declaration core::int* x) → void
     ;
 }
 static method g1(self::C* c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.transformed.expect
index e05a2b1..bf44b39 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.weak.transformed.expect
@@ -23,13 +23,13 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  method f(covariant core::int* x) → void {}
+  method f(covariant-by-declaration core::int* x) → void {}
 }
 class E extends self::D {
   synthetic constructor •() → self::E*
     : super self::D::•()
     ;
-  method f(covariant core::int* x) → void {}
+  method f(covariant-by-declaration core::int* x) → void {}
 }
 static method g1(self::C* c) → void {
   c.{self::C::f}(1.5){(core::num*) →* void};
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.expect
index c702cdc..210c2cb 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.expect
@@ -19,7 +19,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant field core::int* x = null;
+  covariant-by-declaration field core::int* x = null;
   synthetic constructor •() → self::D*
     : super core::Object::•()
     ;
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object implements self::D {
-  covariant field core::int* x = null;
+  covariant-by-declaration field core::int* x = null;
   synthetic constructor •() → self::E*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.outline.expect
index e5a5a6c..359e402 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.outline.expect
@@ -18,7 +18,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant field core::int* x;
+  covariant-by-declaration field core::int* x;
   synthetic constructor •() → self::D*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -33,7 +33,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object implements self::D {
-  covariant field core::int* x;
+  covariant-by-declaration field core::int* x;
   synthetic constructor •() → self::E*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.transformed.expect
index c702cdc..210c2cb 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant field core::int* x = null;
+  covariant-by-declaration field core::int* x = null;
   synthetic constructor •() → self::D*
     : super core::Object::•()
     ;
@@ -35,7 +35,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class E extends core::Object implements self::D {
-  covariant field core::int* x = null;
+  covariant-by-declaration field core::int* x = null;
   synthetic constructor •() → self::E*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.expect
index de4fbf1a..2e274f6 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.expect
@@ -19,7 +19,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant field core::int* x = null;
+  covariant-by-declaration field core::int* x = null;
   synthetic constructor •() → self::D*
     : super core::Object::•()
     ;
@@ -40,7 +40,7 @@
     ;
   get x() → core::int*
     return 0;
-  set x(covariant core::int* value) → void {}
+  set x(covariant-by-declaration core::int* value) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.outline.expect
index 990357b..64b3fce 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.outline.expect
@@ -18,7 +18,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant field core::int* x;
+  covariant-by-declaration field core::int* x;
   synthetic constructor •() → self::D*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -37,7 +37,7 @@
     ;
   get x() → core::int*
     ;
-  set x(covariant core::int* value) → void
+  set x(covariant-by-declaration core::int* value) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.transformed.expect
index de4fbf1a..2e274f6 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C {
-  covariant field core::int* x = null;
+  covariant-by-declaration field core::int* x = null;
   synthetic constructor •() → self::D*
     : super core::Object::•()
     ;
@@ -40,7 +40,7 @@
     ;
   get x() → core::int*
     return 0;
-  set x(covariant core::int* value) → void {}
+  set x(covariant-by-declaration core::int* value) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.expect
index fe87ed1..3f5f3e4 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.expect
@@ -22,12 +22,12 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  set x(covariant core::int* value) → void {}
+  set x(covariant-by-declaration core::int* value) → void {}
 }
 class E extends self::D {
   synthetic constructor •() → self::E*
     : super self::D::•()
     ;
-  set x(covariant core::int* value) → void {}
+  set x(covariant-by-declaration core::int* value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.outline.expect
index 809c222..3d21253 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.outline.expect
@@ -21,13 +21,13 @@
 class D extends self::C {
   synthetic constructor •() → self::D*
     ;
-  set x(covariant core::int* value) → void
+  set x(covariant-by-declaration core::int* value) → void
     ;
 }
 class E extends self::D {
   synthetic constructor •() → self::E*
     ;
-  set x(covariant core::int* value) → void
+  set x(covariant-by-declaration core::int* value) → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.transformed.expect
index fe87ed1..3f5f3e4 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.weak.transformed.expect
@@ -22,12 +22,12 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  set x(covariant core::int* value) → void {}
+  set x(covariant-by-declaration core::int* value) → void {}
 }
 class E extends self::D {
   synthetic constructor •() → self::E*
     : super self::D::•()
     ;
-  set x(covariant core::int* value) → void {}
+  set x(covariant-by-declaration core::int* value) → void {}
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.expect
index 1aad0c3..8c69a30 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.expect
@@ -22,10 +22,10 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  set x(covariant core::int* value) → void {}
+  set x(covariant-by-declaration core::int* value) → void {}
 }
 class E extends core::Object implements self::D {
-  covariant field core::int* x = null;
+  covariant-by-declaration field core::int* x = null;
   synthetic constructor •() → self::E*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.outline.expect
index 312098e..28be2c8 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.outline.expect
@@ -21,11 +21,11 @@
 class D extends self::C {
   synthetic constructor •() → self::D*
     ;
-  set x(covariant core::int* value) → void
+  set x(covariant-by-declaration core::int* value) → void
     ;
 }
 class E extends core::Object implements self::D {
-  covariant field core::int* x;
+  covariant-by-declaration field core::int* x;
   synthetic constructor •() → self::E*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.transformed.expect
index 1aad0c3..8c69a30 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.weak.transformed.expect
@@ -22,10 +22,10 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  set x(covariant core::int* value) → void {}
+  set x(covariant-by-declaration core::int* value) → void {}
 }
 class E extends core::Object implements self::D {
-  covariant field core::int* x = null;
+  covariant-by-declaration field core::int* x = null;
   synthetic constructor •() → self::E*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.expect
index 9bd7fc3..dee3331 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.expect
@@ -4,12 +4,12 @@
 
 typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* x = null;
+  covariant-by-class field self::C::T* x = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  set y(generic-covariant-impl self::C::T* value) → void {}
-  method f(generic-covariant-impl self::C::T* value) → void {
+  set y(covariant-by-class self::C::T* value) → void {}
+  method f(covariant-by-class self::C::T* value) → void {
     this.{self::C::x} = value;
     this.{self::C::y} = value;
   }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.outline.expect
index f14fb1d..c431be4 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.outline.expect
@@ -4,12 +4,12 @@
 
 typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* x;
+  covariant-by-class field self::C::T* x;
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  set y(generic-covariant-impl self::C::T* value) → void
+  set y(covariant-by-class self::C::T* value) → void
     ;
-  method f(generic-covariant-impl self::C::T* value) → void
+  method f(covariant-by-class self::C::T* value) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.transformed.expect
index 9bd7fc3..dee3331 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.weak.transformed.expect
@@ -4,12 +4,12 @@
 
 typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* x = null;
+  covariant-by-class field self::C::T* x = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  set y(generic-covariant-impl self::C::T* value) → void {}
-  method f(generic-covariant-impl self::C::T* value) → void {
+  set y(covariant-by-class self::C::T* value) → void {}
+  method f(covariant-by-class self::C::T* value) → void {
     this.{self::C::x} = value;
     this.{self::C::y} = value;
   }
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.expect
index bb26705..3d1a3dc 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f1(generic-covariant-impl self::C::T* x) → void {}
+  method f1(covariant-by-class self::C::T* x) → void {}
   method f2(core::int* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -23,7 +23,7 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  method f1(covariant generic-covariant-impl core::int* x) → void {}
+  method f1(covariant-by-declaration covariant-by-class core::int* x) → void {}
 }
 static method g1(dynamic d) → void {
   d{dynamic}.f1(1.5);
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.outline.expect
index 14fcda1..a2c2b89 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method f1(generic-covariant-impl self::C::T* x) → void
+  method f1(covariant-by-class self::C::T* x) → void
     ;
   method f2(core::int* x) → void
     ;
@@ -23,7 +23,7 @@
 class D extends self::C<core::num*> {
   synthetic constructor •() → self::D*
     ;
-  method f1(covariant generic-covariant-impl core::int* x) → void
+  method f1(covariant-by-declaration covariant-by-class core::int* x) → void
     ;
 }
 static method g1(dynamic d) → void
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.transformed.expect
index bb26705..3d1a3dc 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f1(generic-covariant-impl self::C::T* x) → void {}
+  method f1(covariant-by-class self::C::T* x) → void {}
   method f2(core::int* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -23,7 +23,7 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  method f1(covariant generic-covariant-impl core::int* x) → void {}
+  method f1(covariant-by-declaration covariant-by-class core::int* x) → void {}
 }
 static method g1(dynamic d) → void {
   d{dynamic}.f1(1.5);
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.expect
index 3093b2a..bbd989a 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f<generic-covariant-impl U extends self::C::T*>(self::C::f::U* x) → void {}
+  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.outline.expect
index d66d1485..8d50179 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method f<generic-covariant-impl U extends self::C::T*>(self::C::f::U* x) → void
+  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.transformed.expect
index 3093b2a..bbd989a 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f<generic-covariant-impl U extends self::C::T*>(self::C::f::U* x) → void {}
+  method f<covariant-by-class U extends self::C::T*>(self::C::f::U* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.expect
index 26e36fb..e0143ec 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T* x = null;
+  covariant-by-class field self::B::T* x = null;
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  forwarding-stub set x(generic-covariant-impl core::num* value) → void
+  forwarding-stub set x(covariant-by-class core::num* value) → void
     return super.{self::C::x} = value;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.outline.expect
index bbdac51..17eb717 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T* x;
+  covariant-by-class field self::B::T* x;
   synthetic constructor •() → self::B<self::B::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -35,7 +35,7 @@
 class D extends self::C implements self::B<core::num*> {
   synthetic constructor •() → self::D*
     ;
-  forwarding-stub set x(generic-covariant-impl core::num* value) → void
+  forwarding-stub set x(covariant-by-class core::num* value) → void
     return super.{self::C::x} = value;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.transformed.expect
index 26e36fb..e0143ec 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T* x = null;
+  covariant-by-class field self::B::T* x = null;
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  forwarding-stub set x(generic-covariant-impl core::num* value) → void
+  forwarding-stub set x(covariant-by-class core::num* value) → void
     return super.{self::C::x} = value;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.expect
index 6c001e5..672eea9 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.expect
@@ -33,8 +33,8 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f([generic-covariant-impl self::I::T* x = #C3]) → void;
-  abstract method g({generic-covariant-impl self::I::T* x = #C3}) → void;
+  abstract method f([covariant-by-class self::I::T* x = #C3]) → void;
+  abstract method g({covariant-by-class self::I::T* x = #C3}) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -50,9 +50,9 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f([generic-covariant-impl core::num* x = #C1]) → void
+  forwarding-stub method f([covariant-by-class core::num* x = #C1]) → void
     return super.{self::B::f}(x);
-  forwarding-stub method g({generic-covariant-impl core::num* x = #C2}) → void
+  forwarding-stub method g({covariant-by-class core::num* x = #C2}) → void
     return super.{self::B::g}(x: x);
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect
index 2c58bdb..2528b84 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.outline.expect
@@ -26,8 +26,8 @@
 abstract class I<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::I<self::I::T*>*
     ;
-  abstract method f([generic-covariant-impl self::I::T* x]) → void;
-  abstract method g({generic-covariant-impl self::I::T* x}) → void;
+  abstract method f([covariant-by-class self::I::T* x]) → void;
+  abstract method g({covariant-by-class self::I::T* x}) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -42,9 +42,9 @@
 class C extends self::B implements self::I<core::num*> {
   synthetic constructor •() → self::C*
     ;
-  forwarding-stub method f([generic-covariant-impl core::num* x]) → void
+  forwarding-stub method f([covariant-by-class core::num* x]) → void
     return super.{self::B::f}(x);
-  forwarding-stub method g({generic-covariant-impl core::num* x}) → void
+  forwarding-stub method g({covariant-by-class core::num* x}) → void
     return super.{self::B::g}(x: x);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.transformed.expect
index 6c001e5..672eea9 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.weak.transformed.expect
@@ -33,8 +33,8 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f([generic-covariant-impl self::I::T* x = #C3]) → void;
-  abstract method g({generic-covariant-impl self::I::T* x = #C3}) → void;
+  abstract method f([covariant-by-class self::I::T* x = #C3]) → void;
+  abstract method g({covariant-by-class self::I::T* x = #C3}) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -50,9 +50,9 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f([generic-covariant-impl core::num* x = #C1]) → void
+  forwarding-stub method f([covariant-by-class core::num* x = #C1]) → void
     return super.{self::B::f}(x);
-  forwarding-stub method g({generic-covariant-impl core::num* x = #C2}) → void
+  forwarding-stub method g({covariant-by-class core::num* x = #C2}) → void
     return super.{self::B::g}(x: x);
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.expect
index c84b5a4..76facc74 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::I::T* x, core::int* y) → void;
+  abstract method f(covariant-by-class self::I::T* x, core::int* y) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x, core::int* y) → void
+  forwarding-stub method f(covariant-by-class core::int* x, core::int* y) → void
     return super.{self::B::f}(x, y);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.outline.expect
index 2296905..15a57c7 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 abstract class I<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::I<self::I::T*>*
     ;
-  abstract method f(generic-covariant-impl self::I::T* x, core::int* y) → void;
+  abstract method f(covariant-by-class self::I::T* x, core::int* y) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,7 +36,7 @@
 class C extends self::B implements self::I<core::int*> {
   synthetic constructor •() → self::C*
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x, core::int* y) → void
+  forwarding-stub method f(covariant-by-class core::int* x, core::int* y) → void
     return super.{self::B::f}(x, y);
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.transformed.expect
index c84b5a4..76facc74 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::I::T* x, core::int* y) → void;
+  abstract method f(covariant-by-class self::I::T* x, core::int* y) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x, core::int* y) → void
+  forwarding-stub method f(covariant-by-class core::int* x, core::int* y) → void
     return super.{self::B::f}(x, y);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.expect
index 17ba3f2..2fc5b5a 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* y = null;
+  covariant-by-class field self::C::T* y = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  set x(generic-covariant-impl self::C::T* t) → void {}
+  set x(covariant-by-class self::C::T* t) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -20,8 +20,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C<core::num*> {
-  generic-covariant-impl field core::num* x = null;
-  generic-covariant-impl field core::num* y = null;
+  covariant-by-class field core::num* x = null;
+  covariant-by-class field core::num* y = null;
   synthetic constructor •() → self::D*
     : super core::Object::•()
     ;
@@ -40,10 +40,10 @@
   synthetic constructor •() → self::E*
     : super core::Object::•()
     ;
-  set x(generic-covariant-impl core::num* t) → void {}
+  set x(covariant-by-class core::num* t) → void {}
   get y() → core::num*
     return null;
-  set y(generic-covariant-impl core::num* t) → void {}
+  set y(covariant-by-class core::num* t) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.outline.expect
index cf87cc9..e8177bf 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.outline.expect
@@ -3,10 +3,10 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* y;
+  covariant-by-class field self::C::T* y;
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  set x(generic-covariant-impl self::C::T* t) → void
+  set x(covariant-by-class self::C::T* t) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -20,8 +20,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C<core::num*> {
-  generic-covariant-impl field core::num* x;
-  generic-covariant-impl field core::num* y;
+  covariant-by-class field core::num* x;
+  covariant-by-class field core::num* y;
   synthetic constructor •() → self::D*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -38,11 +38,11 @@
 class E extends core::Object implements self::C<core::num*> {
   synthetic constructor •() → self::E*
     ;
-  set x(generic-covariant-impl core::num* t) → void
+  set x(covariant-by-class core::num* t) → void
     ;
   get y() → core::num*
     ;
-  set y(generic-covariant-impl core::num* t) → void
+  set y(covariant-by-class core::num* t) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.transformed.expect
index 17ba3f2..2fc5b5a 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.weak.transformed.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class C<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::C::T* y = null;
+  covariant-by-class field self::C::T* y = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  set x(generic-covariant-impl self::C::T* t) → void {}
+  set x(covariant-by-class self::C::T* t) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -20,8 +20,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class D extends core::Object implements self::C<core::num*> {
-  generic-covariant-impl field core::num* x = null;
-  generic-covariant-impl field core::num* y = null;
+  covariant-by-class field core::num* x = null;
+  covariant-by-class field core::num* y = null;
   synthetic constructor •() → self::D*
     : super core::Object::•()
     ;
@@ -40,10 +40,10 @@
   synthetic constructor •() → self::E*
     : super core::Object::•()
     ;
-  set x(generic-covariant-impl core::num* t) → void {}
+  set x(covariant-by-class core::num* t) → void {}
   get y() → core::num*
     return null;
-  set y(generic-covariant-impl core::num* t) → void {}
+  set y(covariant-by-class core::num* t) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.expect
index 373de83..3e9000d 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
-  abstract set x(covariant core::Object* value) → void;
+  abstract set x(covariant-by-declaration core::Object* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -19,11 +19,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
-  covariant field core::Object* x = null;
+  covariant-by-declaration field core::Object* x = null;
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
-  method f(covariant core::Object* x) → void {}
+  method f(covariant-by-declaration core::Object* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,11 +36,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends core::Object* = dynamic> extends core::Object implements self::B {
-  covariant generic-covariant-impl field self::C::T* x = null;
+  covariant-by-declaration covariant-by-class field self::C::T* x = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f(covariant generic-covariant-impl self::C::T* x) → void {}
+  method f(covariant-by-declaration covariant-by-class self::C::T* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.outline.expect
index df71989..50fbaa0 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 abstract class A extends core::Object {
   synthetic constructor •() → self::A*
     ;
-  abstract set x(covariant core::Object* value) → void;
+  abstract set x(covariant-by-declaration core::Object* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -18,10 +18,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
-  covariant field core::Object* x;
+  covariant-by-declaration field core::Object* x;
   synthetic constructor •() → self::B*
     ;
-  method f(covariant core::Object* x) → void
+  method f(covariant-by-declaration core::Object* x) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -35,10 +35,10 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends core::Object* = dynamic> extends core::Object implements self::B {
-  covariant generic-covariant-impl field self::C::T* x;
+  covariant-by-declaration covariant-by-class field self::C::T* x;
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method f(covariant generic-covariant-impl self::C::T* x) → void
+  method f(covariant-by-declaration covariant-by-class self::C::T* x) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.transformed.expect
index 373de83..3e9000d 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
-  abstract set x(covariant core::Object* value) → void;
+  abstract set x(covariant-by-declaration core::Object* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -19,11 +19,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object implements self::A {
-  covariant field core::Object* x = null;
+  covariant-by-declaration field core::Object* x = null;
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
-  method f(covariant core::Object* x) → void {}
+  method f(covariant-by-declaration core::Object* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,11 +36,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C<T extends core::Object* = dynamic> extends core::Object implements self::B {
-  covariant generic-covariant-impl field self::C::T* x = null;
+  covariant-by-declaration covariant-by-class field self::C::T* x = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f(covariant generic-covariant-impl self::C::T* x) → void {}
+  method f(covariant-by-declaration covariant-by-class self::C::T* x) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.expect
index e097cfc..761e51b 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::I::T* x) → void;
+  abstract method f(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub forwarding-semi-stub method f(generic-covariant-impl core::num* x) → void
+  forwarding-stub forwarding-semi-stub method f(covariant-by-class core::num* x) → void
     return super.{self::B::f}(x);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.outline.expect
index 3126586..0bf24b3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 abstract class I<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::I<self::I::T*>*
     ;
-  abstract method f(generic-covariant-impl self::I::T* x) → void;
+  abstract method f(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,7 +36,7 @@
 class C extends self::B implements self::I<core::num*> {
   synthetic constructor •() → self::C*
     ;
-  forwarding-stub forwarding-semi-stub method f(generic-covariant-impl core::num* x) → void
+  forwarding-stub forwarding-semi-stub method f(covariant-by-class core::num* x) → void
     return super.{self::B::f}(x);
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.transformed.expect
index e097cfc..761e51b 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::I::T* x) → void;
+  abstract method f(covariant-by-class self::I::T* x) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub forwarding-semi-stub method f(generic-covariant-impl core::num* x) → void
+  forwarding-stub forwarding-semi-stub method f(covariant-by-class core::num* x) → void
     return super.{self::B::f}(x);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.expect
index 76ccf53..1efedac 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.expect
@@ -7,14 +7,14 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f(generic-covariant-impl self::C::T* x) → void {}
-  method g1(generic-covariant-impl self::C::T* x) → void {
+  method f(covariant-by-class self::C::T* x) → void {}
+  method g1(covariant-by-class self::C::T* x) → void {
     this.{self::C::f}(x){(self::C::T*) →* void};
   }
-  method g2(generic-covariant-impl self::C::T* x) → void {
+  method g2(covariant-by-class self::C::T* x) → void {
     this.{self::C::f}(x){(self::C::T*) →* void};
   }
-  method g3(generic-covariant-impl self::C<self::C::T*>* c, generic-covariant-impl self::C::T* x) → void {
+  method g3(covariant-by-class self::C<self::C::T*>* c, covariant-by-class self::C::T* x) → void {
     c.{self::C::f}(x){(self::C::T*) →* void};
   }
   method g4() → (self::C::T*) →* dynamic
@@ -39,7 +39,7 @@
   synthetic constructor •() → self::E*
     : super self::C::•()
     ;
-  method f(covariant generic-covariant-impl core::int* x) → void {}
+  method f(covariant-by-declaration covariant-by-class core::int* x) → void {}
 }
 static method test() → dynamic {
   (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}(){() →* (core::int*) →* dynamic} as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.outline.expect
index d4639d8..92a85fa 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.outline.expect
@@ -6,13 +6,13 @@
 class C<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::C<self::C::T*>*
     ;
-  method f(generic-covariant-impl self::C::T* x) → void
+  method f(covariant-by-class self::C::T* x) → void
     ;
-  method g1(generic-covariant-impl self::C::T* x) → void
+  method g1(covariant-by-class self::C::T* x) → void
     ;
-  method g2(generic-covariant-impl self::C::T* x) → void
+  method g2(covariant-by-class self::C::T* x) → void
     ;
-  method g3(generic-covariant-impl self::C<self::C::T*>* c, generic-covariant-impl self::C::T* x) → void
+  method g3(covariant-by-class self::C<self::C::T*>* c, covariant-by-class self::C::T* x) → void
     ;
   method g4() → (self::C::T*) →* dynamic
     ;
@@ -34,7 +34,7 @@
 class E extends self::C<core::num*> {
   synthetic constructor •() → self::E*
     ;
-  method f(covariant generic-covariant-impl core::int* x) → void
+  method f(covariant-by-declaration covariant-by-class core::int* x) → void
     ;
 }
 static method test() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.transformed.expect
index 76ccf53..1efedac 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.weak.transformed.expect
@@ -7,14 +7,14 @@
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
-  method f(generic-covariant-impl self::C::T* x) → void {}
-  method g1(generic-covariant-impl self::C::T* x) → void {
+  method f(covariant-by-class self::C::T* x) → void {}
+  method g1(covariant-by-class self::C::T* x) → void {
     this.{self::C::f}(x){(self::C::T*) →* void};
   }
-  method g2(generic-covariant-impl self::C::T* x) → void {
+  method g2(covariant-by-class self::C::T* x) → void {
     this.{self::C::f}(x){(self::C::T*) →* void};
   }
-  method g3(generic-covariant-impl self::C<self::C::T*>* c, generic-covariant-impl self::C::T* x) → void {
+  method g3(covariant-by-class self::C<self::C::T*>* c, covariant-by-class self::C::T* x) → void {
     c.{self::C::f}(x){(self::C::T*) →* void};
   }
   method g4() → (self::C::T*) →* dynamic
@@ -39,7 +39,7 @@
   synthetic constructor •() → self::E*
     : super self::C::•()
     ;
-  method f(covariant generic-covariant-impl core::int* x) → void {}
+  method f(covariant-by-declaration covariant-by-class core::int* x) → void {}
 }
 static method test() → dynamic {
   (core::Object*) →* dynamic x = (new self::D::•().{self::C::g4}(){() →* (core::int*) →* dynamic} as{TypeError,CovarianceCheck} (core::int*) →* dynamic) as (core::Object*) →* dynamic;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect
index 5ce91ef..c730f2f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.expect
@@ -30,7 +30,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  operator +(generic-covariant-impl self::B<self::B::T*>* other) → self::B<self::B::T*>*
+  operator +(covariant-by-class self::B<self::B::T*>* other) → self::B<self::B::T*>*
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.outline.expect
index b463ae2..9a52a7e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.outline.expect
@@ -6,7 +6,7 @@
 class B<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::B<self::B::T*>*
     ;
-  operator +(generic-covariant-impl self::B<self::B::T*>* other) → self::B<self::B::T*>*
+  operator +(covariant-by-class self::B<self::B::T*>* other) → self::B<self::B::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect
index 5ce91ef..c730f2f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.weak.transformed.expect
@@ -30,7 +30,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  operator +(generic-covariant-impl self::B<self::B::T*>* other) → self::B<self::B::T*>*
+  operator +(covariant-by-class self::B<self::B::T*>* other) → self::B<self::B::T*>*
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.expect
index 5360289..3769315 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  operator +(generic-covariant-impl self::B<self::B::T*>* other) → self::B<self::B::T*>*
+  operator +(covariant-by-class self::B<self::B::T*>* other) → self::B<self::B::T*>*
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.outline.expect
index 9f6e2e0..d74cdc8 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.outline.expect
@@ -6,7 +6,7 @@
 class B<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::B<self::B::T*>*
     ;
-  operator +(generic-covariant-impl self::B<self::B::T*>* other) → self::B<self::B::T*>*
+  operator +(covariant-by-class self::B<self::B::T*>* other) → self::B<self::B::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.transformed.expect
index 88a3640..6e2827f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.weak.transformed.expect
@@ -7,7 +7,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  operator +(generic-covariant-impl self::B<self::B::T*>* other) → self::B<self::B::T*>*
+  operator +(covariant-by-class self::B<self::B::T*>* other) → self::B<self::B::T*>*
     return null;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.expect
index bbbc3fe..80e45ff 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  method f(generic-covariant-impl self::B::T* x) → void {}
-  method g({generic-covariant-impl self::B::T* x = #C1}) → void {}
-  method h<generic-covariant-impl U extends self::B::T*>() → void {}
+  method f(covariant-by-class self::B::T* x) → void {}
+  method g({covariant-by-class self::B::T* x = #C1}) → void {}
+  method h<covariant-by-class U extends self::B::T*>() → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect
index 2ebc576..06e1b40 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.outline.expect
@@ -5,11 +5,11 @@
 class B<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::B<self::B::T*>*
     ;
-  method f(generic-covariant-impl self::B::T* x) → void
+  method f(covariant-by-class self::B::T* x) → void
     ;
-  method g({generic-covariant-impl self::B::T* x}) → void
+  method g({covariant-by-class self::B::T* x}) → void
     ;
-  method h<generic-covariant-impl U extends self::B::T*>() → void
+  method h<covariant-by-class U extends self::B::T*>() → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.transformed.expect
index bbbc3fe..80e45ff 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.weak.transformed.expect
@@ -6,9 +6,9 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  method f(generic-covariant-impl self::B::T* x) → void {}
-  method g({generic-covariant-impl self::B::T* x = #C1}) → void {}
-  method h<generic-covariant-impl U extends self::B::T*>() → void {}
+  method f(covariant-by-class self::B::T* x) → void {}
+  method g({covariant-by-class self::B::T* x = #C1}) → void {}
+  method h<covariant-by-class U extends self::B::T*>() → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.expect
index 7e27729..985b00d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T* x = null;
+  covariant-by-class field self::B::T* x = null;
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.outline.expect
index 318dc69..07175fc 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T* x;
+  covariant-by-class field self::B::T* x;
   synthetic constructor •() → self::B<self::B::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.transformed.expect
index 7e27729..985b00d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T* x = null;
+  covariant-by-class field self::B::T* x = null;
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.expect
index 0010a96..ec01d37 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  covariant field core::num* x = null;
+  covariant-by-declaration field core::num* x = null;
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
@@ -51,7 +51,7 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  forwarding-stub set x(covariant core::num* value) → void
+  forwarding-stub set x(covariant-by-declaration core::num* value) → void
     return super.{self::C::x} = value as core::int*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.outline.expect
index 9728f52..64b0707 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.outline.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  covariant field core::num* x;
+  covariant-by-declaration field core::num* x;
   synthetic constructor •() → self::B*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -48,7 +48,7 @@
 class D extends self::C implements self::B {
   synthetic constructor •() → self::D*
     ;
-  forwarding-stub set x(covariant core::num* value) → void
+  forwarding-stub set x(covariant-by-declaration core::num* value) → void
     return super.{self::C::x} = value as core::int*;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.transformed.expect
index 0010a96..ec01d37 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.weak.transformed.expect
@@ -16,7 +16,7 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  covariant field core::num* x = null;
+  covariant-by-declaration field core::num* x = null;
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
@@ -51,7 +51,7 @@
   synthetic constructor •() → self::D*
     : super self::C::•()
     ;
-  forwarding-stub set x(covariant core::num* value) → void
+  forwarding-stub set x(covariant-by-declaration core::num* value) → void
     return super.{self::C::x} = value as core::int*;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.expect
index 2d34ef1..7bfe030 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T* x = null;
-  generic-covariant-impl field self::B::T* y = null;
+  covariant-by-class field self::B::T* x = null;
+  covariant-by-class field self::B::T* y = null;
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
@@ -20,12 +20,12 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C<T extends core::Object* = dynamic> extends core::Object implements self::B<core::num*> {
-  generic-covariant-impl field core::num* x = null;
+  covariant-by-class field core::num* x = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
   abstract get y() → core::num*;
-  abstract set y(generic-covariant-impl core::num* value) → void;
+  abstract set y(covariant-by-class core::num* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,12 +38,12 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D<T extends core::Object* = dynamic> extends core::Object implements self::B<self::D::T*> {
-  generic-covariant-impl field self::D::T* x = null;
+  covariant-by-class field self::D::T* x = null;
   synthetic constructor •() → self::D<self::D::T*>*
     : super core::Object::•()
     ;
   abstract get y() → self::D::T*;
-  abstract set y(generic-covariant-impl self::D::T* value) → void;
+  abstract set y(covariant-by-class self::D::T* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.outline.expect
index 6433000..6e07a6c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.outline.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T* x;
-  generic-covariant-impl field self::B::T* y;
+  covariant-by-class field self::B::T* x;
+  covariant-by-class field self::B::T* y;
   synthetic constructor •() → self::B<self::B::T*>*
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
@@ -19,11 +19,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C<T extends core::Object* = dynamic> extends core::Object implements self::B<core::num*> {
-  generic-covariant-impl field core::num* x;
+  covariant-by-class field core::num* x;
   synthetic constructor •() → self::C<self::C::T*>*
     ;
   abstract get y() → core::num*;
-  abstract set y(generic-covariant-impl core::num* value) → void;
+  abstract set y(covariant-by-class core::num* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,11 +36,11 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D<T extends core::Object* = dynamic> extends core::Object implements self::B<self::D::T*> {
-  generic-covariant-impl field self::D::T* x;
+  covariant-by-class field self::D::T* x;
   synthetic constructor •() → self::D<self::D::T*>*
     ;
   abstract get y() → self::D::T*;
-  abstract set y(generic-covariant-impl self::D::T* value) → void;
+  abstract set y(covariant-by-class self::D::T* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.transformed.expect
index 2d34ef1..7bfe030 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.weak.transformed.expect
@@ -3,8 +3,8 @@
 import "dart:core" as core;
 
 class B<T extends core::Object* = dynamic> extends core::Object {
-  generic-covariant-impl field self::B::T* x = null;
-  generic-covariant-impl field self::B::T* y = null;
+  covariant-by-class field self::B::T* x = null;
+  covariant-by-class field self::B::T* y = null;
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
@@ -20,12 +20,12 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class C<T extends core::Object* = dynamic> extends core::Object implements self::B<core::num*> {
-  generic-covariant-impl field core::num* x = null;
+  covariant-by-class field core::num* x = null;
   synthetic constructor •() → self::C<self::C::T*>*
     : super core::Object::•()
     ;
   abstract get y() → core::num*;
-  abstract set y(generic-covariant-impl core::num* value) → void;
+  abstract set y(covariant-by-class core::num* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,12 +38,12 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 abstract class D<T extends core::Object* = dynamic> extends core::Object implements self::B<self::D::T*> {
-  generic-covariant-impl field self::D::T* x = null;
+  covariant-by-class field self::D::T* x = null;
   synthetic constructor •() → self::D<self::D::T*>*
     : super core::Object::•()
     ;
   abstract get y() → self::D::T*;
-  abstract set y(generic-covariant-impl self::D::T* value) → void;
+  abstract set y(covariant-by-class self::D::T* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.expect
index df39d8e..99c30ab 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.expect
@@ -48,9 +48,9 @@
     : super core::Object::•()
     ;
   abstract get x() → self::I::T*;
-  abstract set x(generic-covariant-impl self::I::T* value) → void;
+  abstract set x(covariant-by-class self::I::T* value) → void;
   abstract get y() → core::Object*;
-  abstract set y(covariant core::Object* value) → void;
+  abstract set y(covariant-by-declaration core::Object* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -85,11 +85,11 @@
     ;
   mixin-super-stub get x() → core::int*
     return super.{self::M::x};
-  forwarding-stub set x(generic-covariant-impl core::int* value) → void
+  forwarding-stub set x(covariant-by-class core::int* value) → void
     return super.{self::M::x} = value;
   mixin-super-stub get y() → core::int*
     return super.{self::M::y};
-  forwarding-stub set y(covariant core::int* value) → void
+  forwarding-stub set y(covariant-by-declaration core::int* value) → void
     return super.{self::M::y} = value;
 }
 static method expectTypeError(() →* void callback) → void {
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.outline.expect
index b6f1dad..637dc58 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.outline.expect
@@ -42,9 +42,9 @@
   synthetic constructor •() → self::I<self::I::T*>*
     ;
   abstract get x() → self::I::T*;
-  abstract set x(generic-covariant-impl self::I::T* value) → void;
+  abstract set x(covariant-by-class self::I::T* value) → void;
   abstract get y() → core::Object*;
-  abstract set y(covariant core::Object* value) → void;
+  abstract set y(covariant-by-declaration core::Object* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -78,11 +78,11 @@
     ;
   mixin-super-stub get x() → core::int*
     return super.{self::M::x};
-  forwarding-stub set x(generic-covariant-impl core::int* value) → void
+  forwarding-stub set x(covariant-by-class core::int* value) → void
     return super.{self::M::x} = value;
   mixin-super-stub get y() → core::int*
     return super.{self::M::y};
-  forwarding-stub set y(covariant core::int* value) → void
+  forwarding-stub set y(covariant-by-declaration core::int* value) → void
     return super.{self::M::y} = value;
 }
 static method expectTypeError(() →* void callback) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.transformed.expect
index a92205f..b49f3d7 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.weak.transformed.expect
@@ -48,9 +48,9 @@
     : super core::Object::•()
     ;
   abstract get x() → self::I::T*;
-  abstract set x(generic-covariant-impl self::I::T* value) → void;
+  abstract set x(covariant-by-class self::I::T* value) → void;
   abstract get y() → core::Object*;
-  abstract set y(covariant core::Object* value) → void;
+  abstract set y(covariant-by-declaration core::Object* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -80,8 +80,8 @@
   abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class C extends self::B implements self::I<core::int*>, self::M /*isEliminatedMixin*/  {
-  generic-covariant-impl field core::int* x = null;
-  covariant field core::int* y = null;
+  covariant-by-class field core::int* x = null;
+  covariant-by-declaration field core::int* y = null;
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.expect
index a4f4dfe..83a8031 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.expect
@@ -49,9 +49,9 @@
     : super core::Object::•()
     ;
   abstract get x() → self::I::T*;
-  abstract set x(generic-covariant-impl self::I::T* value) → void;
+  abstract set x(covariant-by-class self::I::T* value) → void;
   abstract get y() → core::Object*;
-  abstract set y(covariant core::Object* value) → void;
+  abstract set y(covariant-by-declaration core::Object* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -94,11 +94,11 @@
     ;
   mixin-super-stub get x() → core::int*
     return super.{self::M::x};
-  forwarding-stub set x(generic-covariant-impl core::int* value) → void
+  forwarding-stub set x(covariant-by-class core::int* value) → void
     return super.{self::M::x} = value;
   mixin-super-stub get y() → core::int*
     return super.{self::M::y};
-  forwarding-stub set y(covariant core::int* value) → void
+  forwarding-stub set y(covariant-by-declaration core::int* value) → void
     return super.{self::M::y} = value;
 }
 static method expectTypeError(() →* void callback) → void {
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.outline.expect
index 3582fa0..349493c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.outline.expect
@@ -43,9 +43,9 @@
   synthetic constructor •() → self::I<self::I::T*>*
     ;
   abstract get x() → self::I::T*;
-  abstract set x(generic-covariant-impl self::I::T* value) → void;
+  abstract set x(covariant-by-class self::I::T* value) → void;
   abstract get y() → core::Object*;
-  abstract set y(covariant core::Object* value) → void;
+  abstract set y(covariant-by-declaration core::Object* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -85,11 +85,11 @@
     ;
   mixin-super-stub get x() → core::int*
     return super.{self::M::x};
-  forwarding-stub set x(generic-covariant-impl core::int* value) → void
+  forwarding-stub set x(covariant-by-class core::int* value) → void
     return super.{self::M::x} = value;
   mixin-super-stub get y() → core::int*
     return super.{self::M::y};
-  forwarding-stub set y(covariant core::int* value) → void
+  forwarding-stub set y(covariant-by-declaration core::int* value) → void
     return super.{self::M::y} = value;
 }
 static method expectTypeError(() →* void callback) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.transformed.expect
index e429a2c..894f787 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.weak.transformed.expect
@@ -49,9 +49,9 @@
     : super core::Object::•()
     ;
   abstract get x() → self::I::T*;
-  abstract set x(generic-covariant-impl self::I::T* value) → void;
+  abstract set x(covariant-by-class self::I::T* value) → void;
   abstract get y() → core::Object*;
-  abstract set y(covariant core::Object* value) → void;
+  abstract set y(covariant-by-declaration core::Object* value) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -94,12 +94,12 @@
     ;
   get x() → core::int*
     return 1;
-  set x(generic-covariant-impl core::int* value) → void {
+  set x(covariant-by-class core::int* value) → void {
     self::expect(value, 2);
   }
   get y() → core::int*
     return 3;
-  set y(covariant core::int* value) → void {
+  set y(covariant-by-declaration core::int* value) → void {
     self::expect(value, 4);
   }
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.expect
index ee57271..0fc6d13 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.expect
@@ -25,7 +25,7 @@
   synthetic constructor •() → self::I*
     : super core::Object::•()
     ;
-  abstract method f(covariant core::Object* x) → core::int*;
+  abstract method f(covariant-by-declaration core::Object* x) → core::int*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -41,7 +41,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant core::Object* x) → core::int*
+  forwarding-stub method f(covariant-by-declaration core::Object* x) → core::int*
     return super.{self::B::f}(x as core::int*);
 }
 static method expectTypeError(() →* void callback) → void {
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.outline.expect
index 91e1f95..7b52144 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 abstract class I extends core::Object {
   synthetic constructor •() → self::I*
     ;
-  abstract method f(covariant core::Object* x) → core::int*;
+  abstract method f(covariant-by-declaration core::Object* x) → core::int*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,7 +36,7 @@
 class C extends self::B implements self::I {
   synthetic constructor •() → self::C*
     ;
-  forwarding-stub method f(covariant core::Object* x) → core::int*
+  forwarding-stub method f(covariant-by-declaration core::Object* x) → core::int*
     return super.{self::B::f}(x as core::int*);
 }
 static method expectTypeError(() →* void callback) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.transformed.expect
index ee57271..0fc6d13 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.weak.transformed.expect
@@ -25,7 +25,7 @@
   synthetic constructor •() → self::I*
     : super core::Object::•()
     ;
-  abstract method f(covariant core::Object* x) → core::int*;
+  abstract method f(covariant-by-declaration core::Object* x) → core::int*;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -41,7 +41,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant core::Object* x) → core::int*
+  forwarding-stub method f(covariant-by-declaration core::Object* x) → core::int*
     return super.{self::B::f}(x as core::int*);
 }
 static method expectTypeError(() →* void callback) → void {
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.expect
index 73153a3..9aacb53 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::I::T* x, core::Object* y) → void;
+  abstract method f(covariant-by-class self::I::T* x, core::Object* y) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x, core::Object* y) → void
+  forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void
     return super.{self::B::f}(x, y as core::int*);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.outline.expect
index 5f74e13..97cd268 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 abstract class I<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::I<self::I::T*>*
     ;
-  abstract method f(generic-covariant-impl self::I::T* x, core::Object* y) → void;
+  abstract method f(covariant-by-class self::I::T* x, core::Object* y) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,7 +36,7 @@
 abstract class C extends self::B implements self::I<core::int*> {
   synthetic constructor •() → self::C*
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x, core::Object* y) → void
+  forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void
     return super.{self::B::f}(x, y as core::int*);
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.transformed.expect
index 73153a3..9aacb53 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I<self::I::T*>*
     : super core::Object::•()
     ;
-  abstract method f(generic-covariant-impl self::I::T* x, core::Object* y) → void;
+  abstract method f(covariant-by-class self::I::T* x, core::Object* y) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(generic-covariant-impl core::int* x, core::Object* y) → void
+  forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void
     return super.{self::B::f}(x, y as core::int*);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.expect
index ecf0024..f0e4b8e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  method f(generic-covariant-impl self::B::T* x, core::int* y) → void {}
+  method f(covariant-by-class self::B::T* x, core::int* y) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,6 +38,6 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  abstract forwarding-stub method f(generic-covariant-impl core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.outline.expect
index c73bcd2..6ea1a07 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class B<T extends core::Object* = dynamic> extends core::Object {
   synthetic constructor •() → self::B<self::B::T*>*
     ;
-  method f(generic-covariant-impl self::B::T* x, core::int* y) → void
+  method f(covariant-by-class self::B::T* x, core::int* y) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -36,7 +36,7 @@
 abstract class C extends self::B<core::int*> implements self::I {
   synthetic constructor •() → self::C*
     ;
-  abstract forwarding-stub method f(generic-covariant-impl core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.transformed.expect
index ecf0024..f0e4b8e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::B<self::B::T*>*
     : super core::Object::•()
     ;
-  method f(generic-covariant-impl self::B::T* x, core::int* y) → void {}
+  method f(covariant-by-class self::B::T* x, core::int* y) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,6 +38,6 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  abstract forwarding-stub method f(generic-covariant-impl core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-class core::int* x, core::Object* y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.expect
index f5af9c6..8f7a060 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I*
     : super core::Object::•()
     ;
-  abstract method f(covariant core::int* x, core::Object* y) → void;
+  abstract method f(covariant-by-declaration core::int* x, core::Object* y) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant core::int* x, core::Object* y) → void
+  forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void
     return super.{self::B::f}(x, y as core::int*);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.outline.expect
index 7ff4383..b2910572 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.outline.expect
@@ -21,7 +21,7 @@
 abstract class I extends core::Object {
   synthetic constructor •() → self::I*
     ;
-  abstract method f(covariant core::int* x, core::Object* y) → void;
+  abstract method f(covariant-by-declaration core::int* x, core::Object* y) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -36,7 +36,7 @@
 abstract class C extends self::B implements self::I {
   synthetic constructor •() → self::C*
     ;
-  forwarding-stub method f(covariant core::int* x, core::Object* y) → void
+  forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void
     return super.{self::B::f}(x, y as core::int*);
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.transformed.expect
index f5af9c6..8f7a060 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.weak.transformed.expect
@@ -22,7 +22,7 @@
   synthetic constructor •() → self::I*
     : super core::Object::•()
     ;
-  abstract method f(covariant core::int* x, core::Object* y) → void;
+  abstract method f(covariant-by-declaration core::int* x, core::Object* y) → void;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,7 +38,7 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  forwarding-stub method f(covariant core::int* x, core::Object* y) → void
+  forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void
     return super.{self::B::f}(x, y as core::int*);
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.expect
index 35ff920..d4b9b44 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
-  method f(covariant core::int* x, core::int* y) → void {}
+  method f(covariant-by-declaration core::int* x, core::int* y) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,6 +38,6 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  abstract forwarding-stub method f(covariant core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.outline.expect
index 129a442..156233f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.outline.expect
@@ -5,7 +5,7 @@
 class B extends core::Object {
   synthetic constructor •() → self::B*
     ;
-  method f(covariant core::int* x, core::int* y) → void
+  method f(covariant-by-declaration core::int* x, core::int* y) → void
     ;
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
@@ -36,7 +36,7 @@
 abstract class C extends self::B implements self::I {
   synthetic constructor •() → self::C*
     ;
-  abstract forwarding-stub method f(covariant core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void;
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.transformed.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.transformed.expect
index 35ff920..d4b9b44 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.weak.transformed.expect
@@ -6,7 +6,7 @@
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
-  method f(covariant core::int* x, core::int* y) → void {}
+  method f(covariant-by-declaration core::int* x, core::int* y) → void {}
   abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
   abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
   abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
@@ -38,6 +38,6 @@
   synthetic constructor •() → self::C*
     : super self::B::•()
     ;
-  abstract forwarding-stub method f(covariant core::int* x, core::Object* y) → void;
+  abstract forwarding-stub method f(covariant-by-declaration core::int* x, core::Object* y) → void;
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
index 6d82f2d..0a517eb 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
@@ -2,26 +2,24 @@
 import self as self;
 import "dart:core" as core;
 
-class A extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class A extends core::_Enum /*isEnum*/  {
   static const field core::List<self::A> values = #C7;
   static const field self::A a = #C3;
   static const field self::A b = #C6;
-  const constructor •(core::int index, core::String _name) → self::A
-    : self::A::index = index, self::A::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::A
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::A::_name}{core::String};
+    return "A.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
 constants  {
   #C1 = 0
-  #C2 = "A.a"
+  #C2 = "a"
   #C3 = self::A {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "A.b"
+  #C5 = "b"
   #C6 = self::A {index:#C4, _name:#C5}
   #C7 = <self::A>[#C3, #C6]
 }
@@ -30,4 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
index 6d82f2d..0a517eb 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
@@ -2,26 +2,24 @@
 import self as self;
 import "dart:core" as core;
 
-class A extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class A extends core::_Enum /*isEnum*/  {
   static const field core::List<self::A> values = #C7;
   static const field self::A a = #C3;
   static const field self::A b = #C6;
-  const constructor •(core::int index, core::String _name) → self::A
-    : self::A::index = index, self::A::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::A
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::A::_name}{core::String};
+    return "A.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
 constants  {
   #C1 = 0
-  #C2 = "A.a"
+  #C2 = "a"
   #C3 = self::A {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "A.b"
+  #C5 = "b"
   #C6 = self::A {index:#C4, _name:#C5}
   #C7 = <self::A>[#C3, #C6]
 }
@@ -30,4 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
index 7609699..4d0ac34 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
@@ -2,26 +2,24 @@
 import self as self;
 import "dart:core" as core;
 
-class A extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class A extends core::_Enum /*isEnum*/  {
   static const field core::List<self::A> values = #C7;
   static const field self::A a = #C3;
   static const field self::A b = #C6;
-  const constructor •(core::int index, core::String _name) → self::A
-    : self::A::index = index, self::A::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::A
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::A::_name}{core::String};
+    return "A.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
 constants  {
   #C1 = 0
-  #C2 = "A.a"
+  #C2 = "a"
   #C3 = self::A {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "A.b"
+  #C5 = "b"
   #C6 = self::A {index:#C4, _name:#C5}
   #C7 = <self::A*>[#C3, #C6]
 }
@@ -30,4 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.outline.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.outline.expect
index 23e0446..a811664 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.outline.expect
@@ -2,24 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-class A extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class A extends core::_Enum /*isEnum*/  {
   static const field core::List<self::A> values = const <self::A>[self::A::a, self::A::b];
-  static const field self::A a = const self::A::•(0, "A.a");
-  static const field self::A b = const self::A::•(1, "A.b");
-  const constructor •(core::int index, core::String _name) → self::A
-    : self::A::index = index, self::A::_name = _name, super core::Object::•()
+  static const field self::A a = const self::A::•(0, "a");
+  static const field self::A b = const self::A::•(1, "b");
+  const constructor •(core::int index, core::String name) → self::A
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::A::_name}{core::String};
+    return "A.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic
   ;
 
 
 Extra constant evaluation status:
-Evaluated: ListLiteral @ org-dartlang-testcase:///enum.dart:5:6 -> ListConstant(const <A*>[const A{A.index: 0, A._name: "A.a"}, const A{A.index: 1, A._name: "A.b"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum.dart:6:3 -> InstanceConstant(const A{A.index: 0, A._name: "A.a"})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum.dart:7:3 -> InstanceConstant(const A{A.index: 1, A._name: "A.b"})
-Extra constant evaluation: evaluated: 7, effectively constant: 3
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum.dart:5:6 -> ListConstant(const <A*>[const A{_Enum.index: 0, _Enum._name: "a"}, const A{_Enum.index: 1, _Enum._name: "b"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum.dart:6:3 -> InstanceConstant(const A{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum.dart:7:3 -> InstanceConstant(const A{_Enum.index: 1, _Enum._name: "b"})
+Extra constant evaluation: evaluated: 8, effectively constant: 3
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
index 7609699..4d0ac34 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
@@ -2,26 +2,24 @@
 import self as self;
 import "dart:core" as core;
 
-class A extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class A extends core::_Enum /*isEnum*/  {
   static const field core::List<self::A> values = #C7;
   static const field self::A a = #C3;
   static const field self::A b = #C6;
-  const constructor •(core::int index, core::String _name) → self::A
-    : self::A::index = index, self::A::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::A
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::A::_name}{core::String};
+    return "A.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
 constants  {
   #C1 = 0
-  #C2 = "A.a"
+  #C2 = "a"
   #C3 = self::A {index:#C1, _name:#C2}
   #C4 = 1
-  #C5 = "A.b"
+  #C5 = "b"
   #C6 = self::A {index:#C4, _name:#C5}
   #C7 = <self::A*>[#C3, #C6]
 }
@@ -30,4 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.expect
index cb41c43..5153118 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.expect
@@ -19,7 +19,7 @@
   synthetic constructor •() → self::A<self::A::T%, self::A::U%, self::A::V%>
     : super core::Object::•()
     ;
-  method method(self::A::T% t, (self::A::U%) → void u, generic-covariant-impl self::A::V% v) → void {}
+  method method(self::A::T% t, (self::A::U%) → void u, covariant-by-class self::A::V% v) → void {}
   method method2(self::A::T% x, [self::A::T? y = #C1]) → void {}
   set x(self::A::T% t) → void {}
   get mapContra() → core::Map<self::A::U%, self::Contravariant<self::A::V%>>
@@ -52,7 +52,7 @@
   synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract method method(generic-covariant-impl self::D::T% x) → core::int;
+  abstract method method(covariant-by-class self::D::T% x) → core::int;
 }
 class E<invariant T extends core::Object? = dynamic> extends core::Object {
   final field (self::E::T%) → void f;
@@ -68,7 +68,7 @@
   constructor •((self::F::T%) → void f) → self::F<self::F::T%>
     : super self::E::•(f)
     ;
-  forwarding-stub method method(generic-covariant-impl self::F::T% x) → core::int
+  forwarding-stub method method(covariant-by-class self::F::T% x) → core::int
     return super.{self::E::method}(x);
 }
 class NoSuchMethod<invariant T extends core::Object? = dynamic> extends core::Object implements self::B<self::NoSuchMethod::T%> {
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
index dc78628..cd364ee 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.outline.expect
@@ -16,7 +16,7 @@
   final field (self::A::T%) →? void field;
   synthetic constructor •() → self::A<self::A::T%, self::A::U%, self::A::V%>
     ;
-  method method(self::A::T% t, (self::A::U%) → void u, generic-covariant-impl self::A::V% v) → void
+  method method(self::A::T% t, (self::A::U%) → void u, covariant-by-class self::A::V% v) → void
     ;
   method method2(self::A::T% x, [self::A::T? y]) → void
     ;
@@ -52,7 +52,7 @@
 abstract class D<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::D<self::D::T%>
     ;
-  abstract method method(generic-covariant-impl self::D::T% x) → core::int;
+  abstract method method(covariant-by-class self::D::T% x) → core::int;
 }
 class E<invariant T extends core::Object? = dynamic> extends core::Object {
   final field (self::E::T%) → void f;
@@ -64,7 +64,7 @@
 class F<invariant T extends core::Object? = dynamic> extends self::E<self::F::T%> implements self::D<self::F::T%> {
   constructor •((self::F::T%) → void f) → self::F<self::F::T%>
     ;
-  forwarding-stub method method(generic-covariant-impl self::F::T% x) → core::int
+  forwarding-stub method method(covariant-by-class self::F::T% x) → core::int
     return super.{self::E::method}(x);
 }
 class NoSuchMethod<invariant T extends core::Object? = dynamic> extends core::Object implements self::B<self::NoSuchMethod::T%> {
diff --git a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.transformed.expect b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.transformed.expect
index 3b09c95..663effd 100644
--- a/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/variance/generic_covariance_sound_variance.dart.weak.transformed.expect
@@ -19,7 +19,7 @@
   synthetic constructor •() → self::A<self::A::T%, self::A::U%, self::A::V%>
     : super core::Object::•()
     ;
-  method method(self::A::T% t, (self::A::U%) → void u, generic-covariant-impl self::A::V% v) → void {}
+  method method(self::A::T% t, (self::A::U%) → void u, covariant-by-class self::A::V% v) → void {}
   method method2(self::A::T% x, [self::A::T? y = #C1]) → void {}
   set x(self::A::T% t) → void {}
   get mapContra() → core::Map<self::A::U%, self::Contravariant<self::A::V%>>
@@ -52,7 +52,7 @@
   synthetic constructor •() → self::D<self::D::T%>
     : super core::Object::•()
     ;
-  abstract method method(generic-covariant-impl self::D::T% x) → core::int;
+  abstract method method(covariant-by-class self::D::T% x) → core::int;
 }
 class E<invariant T extends core::Object? = dynamic> extends core::Object {
   final field (self::E::T%) → void f;
@@ -68,7 +68,7 @@
   constructor •((self::F::T%) → void f) → self::F<self::F::T%>
     : super self::E::•(f)
     ;
-  forwarding-stub method method(generic-covariant-impl self::F::T% x) → core::int
+  forwarding-stub method method(covariant-by-class self::F::T% x) → core::int
     return super.{self::E::method}(x);
 }
 class NoSuchMethod<invariant T extends core::Object? = dynamic> extends core::Object implements self::B<self::NoSuchMethod::T%> {
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 76d102d..ab32dae 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -1387,7 +1387,7 @@
 
   List<Expression> annotations;
 
-  Byte flags (isFinal, isConst, isFieldFormal, isCovariantByDeclaration,
+  Byte flags (isFinal, isConst, isInitializingFormal, isCovariantByDeclaration,
               isCovariantByClass, isLate, isRequired, isLowered);
   // For named parameters, this is the parameter name.
   // For other variables, the name is cosmetic, may be empty,
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 2b27632..14dabff 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -1673,7 +1673,7 @@
   /// The name of the extension member.
   ///
   /// The name of the generated top-level member is mangled to ensure
-  /// uniqueness. This name is used to lookup an extension method the
+  /// uniqueness. This name is used to lookup an extension method in the
   /// extension itself.
   Name name;
 
@@ -10121,7 +10121,7 @@
       int flags: -1,
       bool isFinal: false,
       bool isConst: false,
-      bool isFieldFormal: false,
+      bool isInitializingFormal: false,
       bool isCovariantByDeclaration: false,
       bool isLate: false,
       bool isRequired: false,
@@ -10134,7 +10134,7 @@
     } else {
       this.isFinal = isFinal;
       this.isConst = isConst;
-      this.isFieldFormal = isFieldFormal;
+      this.isInitializingFormal = isInitializingFormal;
       this.isCovariantByDeclaration = isCovariantByDeclaration;
       this.isLate = isLate;
       this.isRequired = isRequired;
@@ -10146,7 +10146,7 @@
   VariableDeclaration.forValue(this.initializer,
       {bool isFinal: true,
       bool isConst: false,
-      bool isFieldFormal: false,
+      bool isInitializingFormal: false,
       bool isLate: false,
       bool isRequired: false,
       bool isLowered: false,
@@ -10156,7 +10156,7 @@
     initializer?.parent = this;
     this.isFinal = isFinal;
     this.isConst = isConst;
-    this.isFieldFormal = isFieldFormal;
+    this.isInitializingFormal = isInitializingFormal;
     this.isLate = isLate;
     this.isRequired = isRequired;
     this.isLowered = isLowered;
@@ -10164,9 +10164,9 @@
 
   static const int FlagFinal = 1 << 0; // Must match serialized bit positions.
   static const int FlagConst = 1 << 1;
-  static const int FlagFieldFormal = 1 << 2;
-  static const int FlagCovariant = 1 << 3;
-  static const int FlagGenericCovariantImpl = 1 << 4;
+  static const int FlagInitializingFormal = 1 << 2;
+  static const int FlagCovariantByDeclaration = 1 << 3;
+  static const int FlagCovariantByClass = 1 << 4;
   static const int FlagLate = 1 << 5;
   static const int FlagRequired = 1 << 6;
   static const int FlagLowered = 1 << 7;
@@ -10176,12 +10176,12 @@
 
   /// Whether the parameter is declared with the `covariant` keyword.
   // TODO(johnniwinther): Rename to isCovariantByDeclaration
-  bool get isCovariantByDeclaration => flags & FlagCovariant != 0;
+  bool get isCovariantByDeclaration => flags & FlagCovariantByDeclaration != 0;
 
-  /// Whether the variable is declared as a field formal parameter of
+  /// Whether the variable is declared as an initializing formal parameter of
   /// a constructor.
   @informative
-  bool get isFieldFormal => flags & FlagFieldFormal != 0;
+  bool get isInitializingFormal => flags & FlagInitializingFormal != 0;
 
   /// If this [VariableDeclaration] is a parameter of a method, indicates
   /// whether the method implementation needs to contain a runtime type check to
@@ -10190,7 +10190,7 @@
   /// When `true`, runtime checks may need to be performed; see
   /// [DispatchCategory] for details.
   // TODO(johnniwinther): Rename to isCovariantByClass
-  bool get isCovariantByClass => flags & FlagGenericCovariantImpl != 0;
+  bool get isCovariantByClass => flags & FlagCovariantByClass != 0;
 
   /// Whether the variable is declared with the `late` keyword.
   ///
@@ -10236,18 +10236,22 @@
   }
 
   void set isCovariantByDeclaration(bool value) {
-    flags = value ? (flags | FlagCovariant) : (flags & ~FlagCovariant);
+    flags = value
+        ? (flags | FlagCovariantByDeclaration)
+        : (flags & ~FlagCovariantByDeclaration);
   }
 
   @informative
-  void set isFieldFormal(bool value) {
-    flags = value ? (flags | FlagFieldFormal) : (flags & ~FlagFieldFormal);
+  void set isInitializingFormal(bool value) {
+    flags = value
+        ? (flags | FlagInitializingFormal)
+        : (flags & ~FlagInitializingFormal);
   }
 
   void set isCovariantByClass(bool value) {
     flags = value
-        ? (flags | FlagGenericCovariantImpl)
-        : (flags & ~FlagGenericCovariantImpl);
+        ? (flags | FlagCovariantByClass)
+        : (flags & ~FlagCovariantByClass);
   }
 
   void set isLate(bool value) {
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 6119f33..faf9eaa 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.isCovariantByDeclaration, 'covariant');
-    writeModifier(node.isCovariantByClass, 'generic-covariant-impl');
+    writeModifier(node.isCovariantByDeclaration, 'covariant-by-declaration');
+    writeModifier(node.isCovariantByClass, 'covariant-by-class');
     writeModifier(node.isFinal, 'final');
     writeModifier(node.isConst, 'const');
     // Only show implicit getter/setter modifiers in cases where they are
@@ -2461,8 +2461,8 @@
     writeModifier(node.isLowered, 'lowered');
     writeModifier(node.isLate, 'late');
     writeModifier(node.isRequired, 'required');
-    writeModifier(node.isCovariantByDeclaration, 'covariant');
-    writeModifier(node.isCovariantByClass, 'generic-covariant-impl');
+    writeModifier(node.isCovariantByDeclaration, 'covariant-by-declaration');
+    writeModifier(node.isCovariantByClass, 'covariant-by-class');
     writeModifier(node.isFinal, 'final');
     writeModifier(node.isConst, 'const');
     // ignore: unnecessary_null_comparison
@@ -2680,7 +2680,7 @@
 
   @override
   void visitTypeParameter(TypeParameter node) {
-    writeModifier(node.isCovariantByClass, 'generic-covariant-impl');
+    writeModifier(node.isCovariantByClass, 'covariant-by-class');
     writeAnnotationList(node.annotations, separateLines: false);
     if (node.variance != Variance.covariant) {
       writeWord(const <String>[
diff --git a/pkg/kernel/lib/text/debug_printer.dart b/pkg/kernel/lib/text/debug_printer.dart
index d42442e..bfa85a7 100644
--- a/pkg/kernel/lib/text/debug_printer.dart
+++ b/pkg/kernel/lib/text/debug_printer.dart
@@ -85,7 +85,7 @@
       'name': '${node.name ?? '--unnamed--'}',
       'isFinal': '${node.isFinal}',
       'isConst': '${node.isConst}',
-      'isFieldFormal': '${node.isFieldFormal}'
+      'isInitializingFormal': '${node.isInitializingFormal}'
     });
     node.visitChildren(this);
     closeNode();
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index aec6e35..3c00de0 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -1211,9 +1211,9 @@
 const Map<int, String> variableDeclarationFlagToName = const {
   VariableDeclaration.FlagFinal: "final",
   VariableDeclaration.FlagConst: "const",
-  VariableDeclaration.FlagFieldFormal: "field-formal",
-  VariableDeclaration.FlagCovariant: "covariant",
-  VariableDeclaration.FlagGenericCovariantImpl: "generic-covariant-impl",
+  VariableDeclaration.FlagInitializingFormal: "field-formal",
+  VariableDeclaration.FlagCovariantByDeclaration: "covariant",
+  VariableDeclaration.FlagCovariantByClass: "generic-covariant-impl",
   VariableDeclaration.FlagLate: "late",
   VariableDeclaration.FlagRequired: "required",
   VariableDeclaration.FlagLowered: "lowered",
diff --git a/pkg/nnbd_migration/lib/src/node_builder.dart b/pkg/nnbd_migration/lib/src/node_builder.dart
index 624c4df..afbcf02 100644
--- a/pkg/nnbd_migration/lib/src/node_builder.dart
+++ b/pkg/nnbd_migration/lib/src/node_builder.dart
@@ -871,13 +871,13 @@
     var supertypes = <NamedType?>[];
     supertypes.add(superclass);
     if (withClause != null) {
-      supertypes.addAll(withClause.mixinTypes);
+      supertypes.addAll(withClause.mixinTypes2);
     }
     if (implementsClause != null) {
-      supertypes.addAll(implementsClause.interfaces);
+      supertypes.addAll(implementsClause.interfaces2);
     }
     if (onClause != null) {
-      supertypes.addAll(onClause.superclassConstraints);
+      supertypes.addAll(onClause.superclassConstraints2);
     }
     var decoratedSupertypes = <ClassElement, DecoratedType?>{};
     _pushNullabilityNodeTarget(
diff --git a/pkg/nnbd_migration/lib/src/utilities/completeness_tracker.dart b/pkg/nnbd_migration/lib/src/utilities/completeness_tracker.dart
index 4e36f91..d43b180 100644
--- a/pkg/nnbd_migration/lib/src/utilities/completeness_tracker.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/completeness_tracker.dart
@@ -4,8 +4,8 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:nnbd_migration/src/utilities/annotation_tracker.dart';
+import 'package:nnbd_migration/src/utilities/named_type_tracker.dart';
 import 'package:nnbd_migration/src/utilities/permissive_mode.dart';
-import 'package:nnbd_migration/src/utilities/type_name_tracker.dart';
 
 /// Mixin that verifies (via assertion checks) that a visitor visits a
 /// compilation unit to "completeness" -- currently tracks Annotations and
@@ -15,7 +15,7 @@
 /// disabled.
 mixin CompletenessTracker<T> on AstVisitor<T>, PermissiveModeVisitor<T> {
   AnnotationTracker? _annotationTracker;
-  TypeNameTracker? _typeNameTracker;
+  NamedTypeTracker? _namedTypeTracker;
 
   void annotationVisited(Annotation node) {
     assert(() {
@@ -26,7 +26,7 @@
 
   void namedTypeVisited(NamedType node) {
     assert(() {
-      _typeNameTracker!.nodeVisited(node);
+      _namedTypeTracker!.nodeVisited(node);
       return true;
     }());
   }
@@ -43,21 +43,21 @@
     reportExceptionsIfPermissive(node, () {
       assert(() {
         assert(_annotationTracker == null);
-        assert(_typeNameTracker == null);
+        assert(_namedTypeTracker == null);
         _annotationTracker = AnnotationTracker()..visitCompilationUnit(node);
-        _typeNameTracker = TypeNameTracker()..visitCompilationUnit(node);
+        _namedTypeTracker = NamedTypeTracker()..visitCompilationUnit(node);
         return true;
       }());
       try {
         result = super.visitCompilationUnit(node);
         assert(() {
           _annotationTracker!.finalize();
-          _typeNameTracker!.finalize();
+          _namedTypeTracker!.finalize();
           return true;
         }());
       } finally {
         _annotationTracker = null;
-        _typeNameTracker = null;
+        _namedTypeTracker = null;
       }
     });
     return result;
diff --git a/pkg/nnbd_migration/lib/src/utilities/type_name_tracker.dart b/pkg/nnbd_migration/lib/src/utilities/named_type_tracker.dart
similarity index 94%
rename from pkg/nnbd_migration/lib/src/utilities/type_name_tracker.dart
rename to pkg/nnbd_migration/lib/src/utilities/named_type_tracker.dart
index 90d8b06..3aab8bc 100644
--- a/pkg/nnbd_migration/lib/src/utilities/type_name_tracker.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/named_type_tracker.dart
@@ -6,7 +6,7 @@
 import 'package:analyzer/dart/ast/visitor.dart';
 
 /// A simple class to find all [NamedType]s and track if they all get visited.
-class TypeNameTracker extends RecursiveAstVisitor<void> {
+class NamedTypeTracker extends RecursiveAstVisitor<void> {
   final Set<NamedType> _nodes = {};
 
   bool _isTrueNamedType(NamedType node) {
diff --git a/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect b/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect
index 872c607..29c959a 100644
--- a/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect
+++ b/pkg/vm/testcases/transformations/to_string_transformer/not_transformed.expect
@@ -19,18 +19,16 @@
   method toString() → core::String
     return "I am a Foo";
 }
-class FooEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class FooEnum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::FooEnum> values = #C11;
   static const field self::FooEnum A = #C4;
   static const field self::FooEnum B = #C7;
   static const field self::FooEnum C = #C10;
-  const constructor •(core::int index, core::String _name) → self::FooEnum
-    : self::FooEnum::index = index, self::FooEnum::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::FooEnum
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::FooEnum::_name}{core::String};
+    return "FooEnum.${this.{core::_Enum::_name}{core::String}}";
 }
 class Keep extends core::Object {
   synthetic constructor •() → self::Keep
@@ -53,13 +51,13 @@
 constants  {
   #C1 = core::_Override {}
   #C2 = 0
-  #C3 = "FooEnum.A"
+  #C3 = "A"
   #C4 = self::FooEnum {index:#C2, _name:#C3}
   #C5 = 1
-  #C6 = "FooEnum.B"
+  #C6 = "B"
   #C7 = self::FooEnum {index:#C5, _name:#C6}
   #C8 = 2
-  #C9 = "FooEnum.C"
+  #C9 = "C"
   #C10 = self::FooEnum {index:#C8, _name:#C9}
   #C11 = <self::FooEnum*>[#C4, #C7, #C10]
   #C12 = "flutter:keep-to-string"
diff --git a/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect b/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect
index 4b318c4..dca5efb 100644
--- a/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect
+++ b/pkg/vm/testcases/transformations/to_string_transformer/transformed.expect
@@ -19,18 +19,16 @@
   method toString() → core::String
     return super.toString();
 }
-class FooEnum extends core::Object implements core::Enum /*isEnum*/  {
-  final field core::int index;
-  final field core::String _name;
+class FooEnum extends core::_Enum /*isEnum*/  {
   static const field core::List<self::FooEnum> values = #C11;
   static const field self::FooEnum A = #C4;
   static const field self::FooEnum B = #C7;
   static const field self::FooEnum C = #C10;
-  const constructor •(core::int index, core::String _name) → self::FooEnum
-    : self::FooEnum::index = index, self::FooEnum::_name = _name, super core::Object::•()
+  const constructor •(core::int index, core::String name) → self::FooEnum
+    : super core::_Enum::•(index, name)
     ;
   method toString() → core::String
-    return this.{self::FooEnum::_name}{core::String};
+    return "FooEnum.${this.{core::_Enum::_name}{core::String}}";
 }
 class Keep extends core::Object {
   synthetic constructor •() → self::Keep
@@ -53,13 +51,13 @@
 constants  {
   #C1 = core::_Override {}
   #C2 = 0
-  #C3 = "FooEnum.A"
+  #C3 = "A"
   #C4 = self::FooEnum {index:#C2, _name:#C3}
   #C5 = 1
-  #C6 = "FooEnum.B"
+  #C6 = "B"
   #C7 = self::FooEnum {index:#C5, _name:#C6}
   #C8 = 2
-  #C9 = "FooEnum.C"
+  #C9 = "C"
   #C10 = self::FooEnum {index:#C8, _name:#C9}
   #C11 = <self::FooEnum*>[#C4, #C7, #C10]
   #C12 = "flutter:keep-to-string"
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
index 80bbada..23f3ef4 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
@@ -17,24 +17,22 @@
 ------------ TestEnum. ------------
 %this = _Parameter #0 [_T (#lib::TestEnum)+]
 %index = _Parameter #1 [_T (dart.core::int)+?]
-%_name = _Parameter #2 [_T (dart.core::String)+?]
-t3 = _Call direct set [#lib::TestEnum.index] (%this, %index)
-t4 = _Call direct set [#lib::TestEnum._name] (%this, %_name)
-t5 = _Call direct [dart.core::Object.] (%this)
+%name = _Parameter #2 [_T (dart.core::String)+?]
+t3 = _Call direct [dart.core::_Enum.] (%this, %index, %name)
 RESULT: _T {}?
 ------------ TestEnum.toString ------------
 %this = _Parameter #0 [_T (#lib::TestEnum)+]
-t1* = _Call virtual get [#lib::TestEnum._name] (%this)
-RESULT: t1
+t1 = _Call virtual get [dart.core::_Enum._name] (%this)
+RESULT: _T (dart.core::String)+
 ------------ TestEnum.values ------------
 
-RESULT: _T (dart.core::_ImmutableList, const <#lib::TestEnum*>[const #lib::TestEnum{#lib::TestEnum.index: 0, #lib::TestEnum._name: "TestEnum.v1"}, const #lib::TestEnum{#lib::TestEnum.index: 1, #lib::TestEnum._name: "TestEnum.v2"}])
+RESULT: _T (dart.core::_ImmutableList, const <#lib::TestEnum*>[const #lib::TestEnum{dart.core::_Enum.index: 0, dart.core::_Enum._name: "v1"}, const #lib::TestEnum{dart.core::_Enum.index: 1, dart.core::_Enum._name: "v2"}])
 ------------ TestEnum.v1 ------------
 
-RESULT: _T (#lib::TestEnum, const #lib::TestEnum{#lib::TestEnum.index: 0, #lib::TestEnum._name: "TestEnum.v1"})
+RESULT: _T (#lib::TestEnum, const #lib::TestEnum{dart.core::_Enum.index: 0, dart.core::_Enum._name: "v1"})
 ------------ TestEnum.v2 ------------
 
-RESULT: _T (#lib::TestEnum, const #lib::TestEnum{#lib::TestEnum.index: 1, #lib::TestEnum._name: "TestEnum.v2"})
+RESULT: _T (#lib::TestEnum, const #lib::TestEnum{dart.core::_Enum.index: 1, dart.core::_Enum._name: "v2"})
 ------------ foo ------------
 %x = _Parameter #0 [_T ANY?]
 RESULT: _T {}?
@@ -129,8 +127,8 @@
 RESULT: _T {}?
 ------------ if9 ------------
 %x = _Parameter #0 [_T (#lib::TestEnum)+?]
-t1* = _Call [dart.core::Object.==] (%x, _T (#lib::TestEnum, const #lib::TestEnum{#lib::TestEnum.index: 0, #lib::TestEnum._name: "TestEnum.v1"}))
-t2 = _Call direct [#lib::foo] (_T (#lib::TestEnum, const #lib::TestEnum{#lib::TestEnum.index: 0, #lib::TestEnum._name: "TestEnum.v1"}))
+t1* = _Call [dart.core::Object.==] (%x, _T (#lib::TestEnum, const #lib::TestEnum{dart.core::_Enum.index: 0, dart.core::_Enum._name: "v1"}))
+t2 = _Call direct [#lib::foo] (_T (#lib::TestEnum, const #lib::TestEnum{dart.core::_Enum.index: 0, dart.core::_Enum._name: "v1"}))
 RESULT: _T {}?
 ------------ conditional1 ------------
 %cond1 = _Parameter #0 [_T (dart.core::bool)+?]
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect
index c42f78c..ce9c0b3 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect
@@ -8,9 +8,9 @@
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method foo() → dynamic
     return new self::D::•<self::C::T%>();
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method id1([@vm.inferred-type.metadata=#lib::Y (skip check)] generic-covariant-impl self::C::T% x) → dynamic
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method id1([@vm.inferred-type.metadata=#lib::Y (skip check)] covariant-by-class self::C::T% x) → dynamic
     return x;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method id2([@vm.inferred-type.metadata=#lib::Z] generic-covariant-impl self::C::T% x) → dynamic
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method id2([@vm.inferred-type.metadata=#lib::Z] covariant-by-class self::C::T% x) → dynamic
     return x;
 }
 class D<T extends core::Object? = dynamic> extends core::Object {
@@ -57,9 +57,9 @@
   synthetic constructor •() → self::C2<self::C2::T%>
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(d)->d]  method id3([@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.0)] generic-covariant-impl core::Comparable<self::C2::T%> x) → dynamic
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(d)->d]  method id3([@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.0)] covariant-by-class core::Comparable<self::C2::T%> x) → dynamic
     return x;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method id4([@vm.inferred-type.metadata=#lib::K<#lib::J> (skip check)] generic-covariant-impl self::K<self::I<self::C2::T%>> x) → dynamic
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method id4([@vm.inferred-type.metadata=#lib::K<#lib::J> (skip check)] covariant-by-class self::K<self::I<self::C2::T%>> x) → dynamic
     return x;
 }
 static method main() → dynamic {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart.expect
index ab9720b3..6c1795f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_map.dart.expect
@@ -2,11 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-class _AttributeName extends core::Object implements core::Enum /*isEnum*/  {
-[@vm.inferred-type.metadata=dart.core::_Smi] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i]  final field core::int index;
-[@vm.inferred-type.metadata=dart.core::_OneByteString] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2]  final field core::String _name;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method toString() → core::String
-    return [@vm.direct-call.metadata=#lib::_AttributeName._name] [@vm.inferred-type.metadata=dart.core::_OneByteString] this.{self::_AttributeName::_name}{core::String};
+class _AttributeName extends core::_Enum /*isEnum*/  {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method toString() → core::String
+    return "_AttributeName.${[@vm.direct-call.metadata=dart.core::_Enum._name] this.{core::_Enum::_name}{core::String}}";
 }
 class _Attribute extends core::Object {
   constructor _() → self::_Attribute
@@ -23,11 +21,11 @@
 }
 constants  {
   #C1 = 1
-  #C2 = "_AttributeName.sibling"
+  #C2 = "sibling"
   #C3 = self::_AttributeName {index:#C1, _name:#C2}
   #C4 = 3
   #C5 = 0
-  #C6 = "_AttributeName.name"
+  #C6 = "name"
   #C7 = self::_AttributeName {index:#C5, _name:#C6}
   #C8 = <core::int*, self::_AttributeName*>{#C1:#C3, #C4:#C7)
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect
index 685989f..234148e 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect
@@ -11,11 +11,9 @@
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]  method getBar() → core::String
     return "bar";
 }
-class B extends core::Object implements core::Enum /*isEnum*/  {
-[@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] [@vm.unboxing-info.metadata=()->i]  final field core::int index;
-[@vm.inferred-type.metadata=dart.core::_OneByteString (value: "B.b2")] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5]  final field core::String _name;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7]  method toString() → core::String
-    return [@vm.direct-call.metadata=#lib::B._name] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "B.b2")] this.{self::B::_name}{core::String};
+class B extends core::_Enum /*isEnum*/  {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]  method toString() → core::String
+    return "B.${[@vm.direct-call.metadata=dart.core::_Enum._name] this.{core::_Enum::_name}{core::String}}";
 }
 static method test0() → void {
   core::print(#C1);
@@ -65,7 +63,7 @@
   #C4 = 3.14
   #C5 = "bazz"
   #C6 = 1
-  #C7 = "B.b2"
+  #C7 = "b2"
   #C8 = self::B {index:#C6, _name:#C7}
   #C9 = 2
   #C10 = 3
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart.expect
index 182d8f1..f345b4b 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_set.dart.expect
@@ -2,11 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-class _AttributeName extends core::Object implements core::Enum /*isEnum*/  {
-[@vm.inferred-type.metadata=dart.core::_Smi] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i]  final field core::int index;
-[@vm.inferred-type.metadata=dart.core::_OneByteString] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2]  final field core::String _name;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method toString() → core::String
-    return [@vm.direct-call.metadata=#lib::_AttributeName._name] [@vm.inferred-type.metadata=dart.core::_OneByteString] this.{self::_AttributeName::_name}{core::String};
+class _AttributeName extends core::_Enum /*isEnum*/  {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method toString() → core::String
+    return "_AttributeName.${[@vm.direct-call.metadata=dart.core::_Enum._name] this.{core::_Enum::_name}{core::String}}";
 }
 class _Attribute extends core::Object {
   constructor _() → self::_Attribute
@@ -25,9 +23,9 @@
   #C1 = 0
   #C2 = 1
   #C3 = <core::int*>{#C1, #C2}
-  #C4 = "_AttributeName.name"
+  #C4 = "name"
   #C5 = self::_AttributeName {index:#C1, _name:#C4}
-  #C6 = "_AttributeName.sibling"
+  #C6 = "sibling"
   #C7 = self::_AttributeName {index:#C2, _name:#C6}
   #C8 = <self::_AttributeName*>[#C5, #C7]
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
index 0e12dc6..8ddda11 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
@@ -16,13 +16,12 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class Enum extends core::Object implements core::Enum {
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3265]  abstract get /*isLegacy*/ index() → core::int;
+abstract class Enum extends core::_Enum {
 }
 class Class extends core::Object {
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3266,getterSelectorId:3267]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
-    return [@vm.inferred-type.metadata=!] e.{self::Enum::index}{core::int};
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3261,getterSelectorId:3262]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
+    return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_used_as_type.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/enum_used_as_type.dart.expect
index 34740ea..cf39874 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/enum_used_as_type.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_used_as_type.dart.expect
@@ -3,15 +3,14 @@
 import "dart:core" as core;
 import "dart:_internal" as _in;
 
-abstract class Enum extends core::Object implements core::Enum {
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1]  abstract get /*isLegacy*/ index() → core::int;
+abstract class Enum extends core::_Enum {
 }
 class Class extends core::Object {
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
-    return [@vm.inferred-type.metadata=!] e.{self::Enum::index}{core::int};
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
+    return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
 static method main() → dynamic {
   core::List<dynamic> list = [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::•<dynamic>(0);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect
index a0447e5..cd99b4d 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect
@@ -9,16 +9,16 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i)->b]  method test2c([@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 3)] generic-covariant-impl FutureOr<self::C::T%>x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method test3c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int> (skip check)] generic-covariant-impl asy::Future<self::C::T%> x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method test4c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int> (skip check)] generic-covariant-impl FutureOr<self::C::T%>x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  method test2r([@vm.inferred-type.metadata=#lib::C<dart.core::int> (skip check)] generic-covariant-impl self::C<FutureOr<self::C::T%>> x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10]  method test3r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int>> (skip check)] generic-covariant-impl self::C<asy::Future<self::C::T%>> x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]  method test4r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int>> (skip check)] generic-covariant-impl self::C<FutureOr<self::C::T%>> x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method test5r([@vm.inferred-type.metadata=#lib::C<FutureOr<dart.core::int>?>] generic-covariant-impl self::C<asy::Future<self::C::T%>> x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16]  method test6r([@vm.inferred-type.metadata=#lib::C<FutureOr<dart.core::int>?> (skip check)] generic-covariant-impl self::C<FutureOr<self::C::T%>> x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18]  method test7r([@vm.inferred-type.metadata=#lib::C<FutureOr<dart.core::int>?>] generic-covariant-impl self::C<self::C::T%> x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20]  method test8r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int>>] generic-covariant-impl self::C<self::C::T%> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i)->b]  method test2c([@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 3)] covariant-by-class FutureOr<self::C::T%>x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method test3c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int> (skip check)] covariant-by-class asy::Future<self::C::T%> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method test4c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int> (skip check)] covariant-by-class FutureOr<self::C::T%>x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  method test2r([@vm.inferred-type.metadata=#lib::C<dart.core::int> (skip check)] covariant-by-class self::C<FutureOr<self::C::T%>> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10]  method test3r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int>> (skip check)] covariant-by-class self::C<asy::Future<self::C::T%>> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]  method test4r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int>> (skip check)] covariant-by-class self::C<FutureOr<self::C::T%>> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method test5r([@vm.inferred-type.metadata=#lib::C<FutureOr<dart.core::int>?>] covariant-by-class self::C<asy::Future<self::C::T%>> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16]  method test6r([@vm.inferred-type.metadata=#lib::C<FutureOr<dart.core::int>?> (skip check)] covariant-by-class self::C<FutureOr<self::C::T%>> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18]  method test7r([@vm.inferred-type.metadata=#lib::C<FutureOr<dart.core::int>?>] covariant-by-class self::C<self::C::T%> x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20]  method test8r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int>>] covariant-by-class self::C<self::C::T%> x) → void {}
 }
 static method main() → dynamic {
   dynamic c = new self::C::•<core::int>();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
index 57eda05..97683a2 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
@@ -23,13 +23,13 @@
   }
 }
 abstract class B extends core::Object {
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  abstract method method2(covariant dynamic arg) → void;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  abstract method method2(covariant-by-declaration dynamic arg) → void;
 }
 class C extends core::Object implements self::B {
   synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method method2(covariant self::T0 t0) → void {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method method2(covariant-by-declaration self::T0 t0) → void {
     [@vm.direct-call.metadata=#lib::T2.foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(){() → void};
   }
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect
index 162174d..69b1559 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class _SplayTreeNode<Node extends self::_SplayTreeNode<self::_SplayTreeNode::Node> = self::_SplayTreeNode<dynamic>> extends core::Object {
-[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  generic-covariant-impl field self::_SplayTreeNode::Node? left = null;
+[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  covariant-by-class field self::_SplayTreeNode::Node? left = null;
   constructor •() → self::_SplayTreeNode<self::_SplayTreeNode::Node>
     : super core::Object::•()
     ;
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::_SplayTree<self::_SplayTree::Node>
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method add(generic-covariant-impl self::_SplayTree::Node n) → dynamic {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method add(covariant-by-class self::_SplayTree::Node n) → dynamic {
     self::_SplayTree::Node? root = [@vm.direct-call.metadata=#lib::SplayTreeMap._root] [@vm.inferred-type.metadata=#lib::_SplayTreeMapNode<dynamic>] this.{self::_SplayTree::_root}{self::_SplayTree::Node?};
     ;
     core::print([@vm.direct-call.metadata=#lib::_SplayTreeNode.left] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] root{self::_SplayTree::Node}.{self::_SplayTreeNode::left}{self::_SplayTree::Node?});
@@ -25,7 +25,7 @@
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5]  abstract get /*isLegacy*/ _root() → self::_SplayTree::Node?;
 }
 class SplayTreeMap<V extends core::Object? = dynamic> extends self::_SplayTree<self::_SplayTreeMapNode<self::SplayTreeMap::V%>> {
-[@vm.inferred-type.metadata=#lib::_SplayTreeMapNode<dynamic>] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:5]  generic-covariant-impl field self::_SplayTreeMapNode<self::SplayTreeMap::V%>? _root;
+[@vm.inferred-type.metadata=#lib::_SplayTreeMapNode<dynamic>] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:5]  covariant-by-class field self::_SplayTreeMapNode<self::SplayTreeMap::V%>? _root;
   synthetic constructor •() → self::SplayTreeMap<self::SplayTreeMap::V%>
     : self::SplayTreeMap::_root = new self::_SplayTreeMapNode::•<self::SplayTreeMap::V%>(), super self::_SplayTree::•()
     ;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_46461.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_46461.dart.expect
index 6ca7b29..30a35dc 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_46461.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_46461.dart.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-abstract class A extends core::Object implements core::Enum {
+abstract class A extends core::_Enum {
 }
 abstract class B extends core::Object {
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  abstract method foo() → void;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
index 12268e7..64e1bc1 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
@@ -6,21 +6,19 @@
 
 import "file:pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.lib.dart";
 
-abstract class UnusedEnum extends core::Object implements core::Enum {
+abstract class UnusedEnum extends core::_Enum {
 }
-class UsedEnum extends core::Object implements core::Enum /*isEnum*/  {
-[@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] [@vm.unboxing-info.metadata=()->i]  final field core::int index;
-[@vm.inferred-type.metadata=dart.core::_OneByteString (value: "UsedEnum.usedValue")] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2]  final field core::String _name;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method toString() → core::String
-    return [@vm.direct-call.metadata=#lib::UsedEnum._name] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "UsedEnum.usedValue")] this.{self::UsedEnum::_name}{core::String};
+class UsedEnum extends core::_Enum /*isEnum*/  {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method toString() → core::String
+    return "UsedEnum.${[@vm.direct-call.metadata=dart.core::_Enum._name] this.{core::_Enum::_name}{core::String}}";
 }
 abstract class UnusedInterface extends core::Object {
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  abstract get /*isLegacy*/ usedInterfaceField() → core::int?;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  abstract set /*isLegacy*/ usedInterfaceField(core::int? value) → void;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  abstract get /*isLegacy*/ usedInterfaceField() → core::int?;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  abstract set /*isLegacy*/ usedInterfaceField(core::int? value) → void;
 }
 class UsedClass extends core::Object implements self::UnusedInterface {
-[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  field core::int? usedField = null;
-[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  field core::int? usedInterfaceField = null;
+[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  field core::int? usedField = null;
+[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  field core::int? usedInterfaceField = null;
   synthetic constructor •() → self::UsedClass
     : super core::Object::•()
     ;
@@ -40,20 +38,19 @@
 }
 constants  {
   #C1 = 1
-  #C2 = "UsedEnum.usedValue"
+  #C2 = "usedValue"
   #C3 = self::UsedEnum {index:#C1, _name:#C2}
 }
 library tree_shake_enum_from_lib.lib.dart /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-abstract class ConstEnum extends core::Object implements core::Enum {
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3271]  abstract get /*isLegacy*/ index() → core::int;
+abstract class ConstEnum extends core::_Enum {
 }
 class ConstClass extends core::Object {
   synthetic constructor •() → self::ConstClass
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3272,getterSelectorId:3273]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
-    return [@vm.inferred-type.metadata=!] e.{self::ConstEnum::index}{core::int};
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3265,getterSelectorId:3266]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
+    return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart.expect
index 057cfe3..3310998 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/write_only_field2.dart.expect
@@ -16,13 +16,13 @@
     ;
 }
 abstract class C<T extends core::Object? = dynamic> extends core::Object {
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1]  abstract set /*isLegacy*/ bar(generic-covariant-impl self::C::T? value) → void;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1]  abstract set /*isLegacy*/ bar(covariant-by-class self::C::T? value) → void;
 }
 class D extends core::Object implements self::C<core::int> {
   synthetic constructor •() → self::D
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1]  set /*isLegacy*/ bar(generic-covariant-impl core::int? value) → void;
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1]  set /*isLegacy*/ bar(covariant-by-class core::int? value) → void;
 }
 abstract class E extends core::Object {
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i]  abstract get /*isLegacy*/ bar() → core::int;
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index a3a9c93..1ea4076 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1225,12 +1225,16 @@
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
 
+  // The enum_cls is the actual declared class.
+  // The shared super-class holds the fields for index and name.
+  const Class& super_cls = Class::Handle(zone, enum_cls.SuperClass());
+
   const Field& index_field =
-      Field::Handle(zone, enum_cls.LookupInstanceField(Symbols::Index()));
+      Field::Handle(zone, super_cls.LookupInstanceField(Symbols::Index()));
   ASSERT(!index_field.IsNull());
 
   const Field& name_field = Field::Handle(
-      zone, enum_cls.LookupInstanceFieldAllowPrivate(Symbols::_name()));
+      zone, super_cls.LookupInstanceFieldAllowPrivate(Symbols::_name()));
   ASSERT(!name_field.IsNull());
 
   const String& enum_name = String::Handle(zone, enum_cls.ScrubbedName());
diff --git a/runtime/vm/compiler/stub_code_compiler.h b/runtime/vm/compiler/stub_code_compiler.h
index a425e97..58f52ce 100644
--- a/runtime/vm/compiler/stub_code_compiler.h
+++ b/runtime/vm/compiler/stub_code_compiler.h
@@ -128,7 +128,7 @@
 #elif defined(TARGET_ARCH_ARM64)
   static constexpr intptr_t kNativeCallbackTrampolineSize = 12;
 #if defined(DART_COMPRESSED_POINTERS)
-  static constexpr intptr_t kNativeCallbackSharedStubSize = 276;
+  static constexpr intptr_t kNativeCallbackSharedStubSize = 292;
 #else
   static constexpr intptr_t kNativeCallbackSharedStubSize = 268;
 #endif
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index 0eeef85..54196b7 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -415,6 +415,13 @@
 
   // Load the code object.
   __ LoadFromOffset(R10, THR, compiler::target::Thread::callback_code_offset());
+#if defined(DART_COMPRESSED_POINTERS)
+  // Partially setup HEAP_BITS for LoadCompressed[FieldFromOffset].
+  ASSERT(IsAbiPreservedRegister(HEAP_BITS));  // Need to save and restore.
+  __ Push(HEAP_BITS);
+  __ ldr(HEAP_BITS, compiler::Address(THR, target::Thread::heap_base_offset()));
+  __ LsrImmediate(HEAP_BITS, HEAP_BITS, 32);
+#endif
   __ LoadCompressedFieldFromOffset(
       R10, R10, compiler::target::GrowableObjectArray::data_offset());
   __ LoadCompressed(
@@ -427,6 +434,9 @@
           /*array=*/R10,
           /*index=*/R9,
           /*temp=*/TMP));
+#if defined(DART_COMPRESSED_POINTERS)
+  __ Pop(HEAP_BITS);
+#endif
   __ LoadFieldFromOffset(R10, R10,
                          compiler::target::Code::entry_point_offset());
 
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 7e0034b..0769e99 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -650,7 +650,6 @@
   thread->set_execution_state(Thread::kThreadInNative);
   thread->set_safepoint_state(Thread::AtSafepointField::encode(true) |
                               Thread::AtDeoptSafepointField::encode(true));
-  thread->clear_pending_functions();
   ASSERT(thread->no_safepoint_scope_depth() == 0);
   if (is_mutator) {
     // The mutator thread structure stays alive and attached to the isolate as
diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc
index bff8f7a..0aacc35 100644
--- a/runtime/vm/isolate_reload_test.cc
+++ b/runtime/vm/isolate_reload_test.cc
@@ -2211,7 +2211,7 @@
 
   lib = TestCase::ReloadTestScript(kReloadScript);
   EXPECT_VALID(lib);
-  EXPECT_STREQ("Deleted enum value from Fruit true -1",
+  EXPECT_STREQ("Fruit.Deleted enum value from Fruit true -1",
                SimpleInvokeStr(lib, "main"));
 }
 
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 249c950..514f04e 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -1191,7 +1191,6 @@
   // Some thread fields need to be reinitialized as null constants have not been
   // initialized until now.
   thread->ClearStickyError();
-  thread->clear_pending_functions();
 
   ASSERT(!null_object_->IsSmi());
   ASSERT(!null_class_->IsSmi());
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 0c5a759..63ce112 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -427,6 +427,7 @@
   V(_stackTrace, "_stackTrace")                                                \
   V(_state, "_state")                                                          \
   V(_stateData, "_stateData")                                                  \
+  V(_toString, "_toString")                                                    \
   V(_varData, "_varData")                                                      \
   V(_wordCharacterMap, "_wordCharacterMap")                                    \
   V(callback, "callback")                                                      \
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 4e46bbb..6ca5b69 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -98,7 +98,6 @@
       stack_overflow_count_(0),
       hierarchy_info_(NULL),
       type_usage_info_(NULL),
-      pending_functions_(GrowableObjectArray::null()),
       sticky_error_(Error::null()),
       REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_INITIALIZERS)
           REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_INIT)
@@ -219,17 +218,6 @@
 #undef REUSABLE_HANDLE_ALLOCATION
 }
 
-GrowableObjectArrayPtr Thread::pending_functions() {
-  if (pending_functions_ == GrowableObjectArray::null()) {
-    pending_functions_ = GrowableObjectArray::New(Heap::kOld);
-  }
-  return pending_functions_;
-}
-
-void Thread::clear_pending_functions() {
-  pending_functions_ = GrowableObjectArray::null();
-}
-
 void Thread::set_active_exception(const Object& value) {
   active_exception_ = value.ptr();
 }
@@ -613,7 +601,6 @@
   // Visit objects in thread specific handles area.
   reusable_handles_.VisitObjectPointers(visitor);
 
-  visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&pending_functions_));
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&global_object_pool_));
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&active_exception_));
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&active_stacktrace_));
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 4277ee7..baa448d 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -695,9 +695,6 @@
     return OFFSET_OF(Thread, unboxed_double_runtime_arg_);
   }
 
-  GrowableObjectArrayPtr pending_functions();
-  void clear_pending_functions();
-
   static intptr_t global_object_pool_offset() {
     return OFFSET_OF(Thread, global_object_pool_);
   }
@@ -1127,7 +1124,6 @@
   CompilerState* compiler_state_ = nullptr;
   HierarchyInfo* hierarchy_info_;
   TypeUsageInfo* type_usage_info_;
-  GrowableObjectArrayPtr pending_functions_;
 
   CompilerTimings* compiler_timings_ = nullptr;
 
diff --git a/sdk/lib/core/enum.dart b/sdk/lib/core/enum.dart
index 12c8a07..5d8f800 100644
--- a/sdk/lib/core/enum.dart
+++ b/sdk/lib/core/enum.dart
@@ -21,6 +21,31 @@
   /// enumerated type's static `values` list.
   int get index;
 
+  /// The value's "name".
+  ///
+  /// The name of a value is a string containing the
+  /// source identifier used to declare the value.
+  ///
+  /// The name occurs in the [toString] of the
+  /// enum value, after the enum class name and a `.`.
+  /// It is exposed by then [EnumName.name] extension getter,
+  /// which is an extension to allow `enum` declarations to have
+  /// an element named `name` without causing a name conflict.
+  ///
+  /// Given an enum declaration like
+  /// ```dart
+  /// enum MyEnum {
+  ///   value1,
+  ///   value2
+  /// }
+  /// ```
+  /// the `toString` method of that class may be implemented
+  /// as
+  /// ```dart
+  ///   String toString() => "MyEnum.$_name";
+  /// ```
+  String get _name;
+
   /// Compares two enum values by their [index].
   ///
   /// A generic [Comparator] function for enum types which
@@ -30,4 +55,87 @@
   @Since("2.15")
   static int compareByIndex<T extends Enum>(T value1, T value2) =>
       value1.index - value2.index;
+
+  /// Compares enum values by name.
+  ///
+  /// The [EnumName.name] of an enum value is a string
+  /// representing the source name used to declare that enum value.
+  ///
+  /// This [Comparator] compares two enum values by comparing their names,
+  /// and can be used to sort enum values by their names.
+  /// The comparison uses [String.compareTo], and is therefore case sensitive.
+  @Since("2.15")
+  static int compareByName<T extends Enum>(T value1, T value2) =>
+      value1.name.compareTo(value2.name);
+}
+
+/// Superclass of all enum class implementations.
+abstract class _Enum implements Enum {
+  final int index;
+  final String _name;
+  const _Enum(this.index, this._name);
+}
+
+/// Access to the name of an enum value.
+///
+/// This method is declared as an extension method
+/// instead of an instance method in order to allow
+/// enum values to have the name `name`.
+@Since("2.15")
+extension EnumName on Enum {
+  /// The name of the enum value.
+  ///
+  /// The name is a string containing the source identifier used
+  /// to declare the enum value.
+  ///
+  /// For example, given a declaration like:
+  /// ```dart
+  /// enum MyEnum {
+  ///   value1,
+  ///   value2
+  /// }
+  /// ```
+  /// the result of `MyEnum.value1.name` is the string `"value1"`.
+  String get name => _name;
+}
+
+/// Access enum values by name.
+///
+/// Extensions on a collection of enum values,
+/// intended for use on the `values` list of an enum type,
+/// which allows looking up a value by its name.
+///
+/// Since enum classes are expected to be relatively small,
+/// lookup of [byName] is performed by linearly iterating through the values
+/// and comparing their name to the provided name.
+/// If a more efficient lookup is needed, perhaps because the lookup operation
+/// happens very often, consider building a map instead using [asNameMap]:
+/// ```dart
+/// static myEnumNameMap = MyEnum.values.asNameMap();
+/// ```
+/// and then use that for lookups.
+@Since("2.15")
+extension EnumByName<T extends Enum> on Iterable<T> {
+  /// Finds the enum value in this list with name [name].
+  ///
+  /// Goes through this collection looking for an enum with
+  /// name [name], as reported by [EnumName.name].
+  /// Returns the first value with the given name. Such a value must be found.
+  T byName(String name) {
+    for (var value in this) {
+      if (value._name == name) return value;
+    }
+    throw ArgumentError.value(name, "name", "No enum value with that name");
+  }
+
+  /// Creates a map from the names of enum values to the values.
+  ///
+  /// The collection that this method is called on is expected to have
+  /// enums with distinct names, like the `values` list of an enum class.
+  /// Only one value for each name can occur in the created map,
+  /// so if two or more enum values have the same name (either being the
+  /// same value, or being values of different enum type), at most one of
+  /// them will be represented in the returned map.
+  Map<String, T> asNameMap() =>
+      <String, T>{for (var value in this) value._name: value};
 }
diff --git a/tests/language/enum/enum_test.dart b/tests/language/enum/enum_test.dart
index c9df393..4deb861 100644
--- a/tests/language/enum/enum_test.dart
+++ b/tests/language/enum/enum_test.dart
@@ -16,6 +16,8 @@
 
 enum _IsNot { IsNot }
 
+enum NamedName { name, address }
+
 // Regression test for https://github.com/dart-lang/sdk/issues/33348
 enum JSFunctionPrototype {
   length,
@@ -108,6 +110,19 @@
   Expect.isTrue(Enum.compareByIndex<Enum>(Enum4.D, Enum5.H) < 0);
   Expect.isTrue(Enum.compareByIndex<Enum>(Enum4.E, Enum5.F) > 0);
   Expect.isTrue(Enum.compareByIndex<Enum>(Enum4.D, Enum5.F) == 0);
+
+  Expect.equals("A", Enum2.A.name);
+  Expect.equals("_", Enum1._.name);
+  Expect.equals("name", EnumName(NamedName.name).name);
+
+  Expect.identical(Enum2.A, Enum2.values.byName("A"));
+  Expect.identical(Enum1._, Enum1.values.byName("_"));
+  Expect.identical(NamedName.name, NamedName.values.byName("name"));
+
+  var map = NamedName.values.asNameMap();
+  Expect.type<Map<String, NamedName>>(map);
+  Expect.identical(NamedName.name, map["name"]);
+  Expect.identical(NamedName.address, map["address"]);
 }
 
 test1(Enum1 e) {
diff --git a/tests/language/explicit_type_instantiation_parsing_test.dart b/tests/language/explicit_type_instantiation_parsing_test.dart
index 4397a2c..f848e9b 100644
--- a/tests/language/explicit_type_instantiation_parsing_test.dart
+++ b/tests/language/explicit_type_instantiation_parsing_test.dart
@@ -302,7 +302,7 @@
   // Parsed as a generic instantiation, but `d` is not generic function or type.
   // Being dynamic doesn't help.
   // Would be valid if parsed as operators.
-  expect1(v < X, X > (2));
+  expect1(d < X, X > (2));
   //        ^^^^^^^^
   // [cfe] unspecified
   // [analyzer] unspecified
diff --git a/tests/language_2/enum/enum_test.dart b/tests/language_2/enum/enum_test.dart
index 6ceecf1..73b3db6 100644
--- a/tests/language_2/enum/enum_test.dart
+++ b/tests/language_2/enum/enum_test.dart
@@ -18,6 +18,8 @@
 
 enum _IsNot { IsNot }
 
+enum NamedName { name, address }
+
 // Regression test for https://github.com/dart-lang/sdk/issues/33348
 enum JSFunctionPrototype {
   length,
@@ -110,6 +112,19 @@
   Expect.isTrue(Enum.compareByIndex<Enum>(Enum4.D, Enum5.H) < 0);
   Expect.isTrue(Enum.compareByIndex<Enum>(Enum4.E, Enum5.F) > 0);
   Expect.isTrue(Enum.compareByIndex<Enum>(Enum4.D, Enum5.F) == 0);
+
+  Expect.equals("A", Enum2.A.name);
+  Expect.equals("_", Enum1._.name);
+  Expect.equals("name", EnumName(NamedName.name).name);
+
+  Expect.identical(Enum2.A, Enum2.values.byName("A"));
+  Expect.identical(Enum1._, Enum1.values.byName("_"));
+  Expect.identical(NamedName.name, NamedName.values.byName("name"));
+
+  var map = NamedName.values.asNameMap();
+  Expect.type<Map<String, NamedName>>(map);
+  Expect.identical(NamedName.name, map["name"]);
+  Expect.identical(NamedName.address, map["address"]);
 }
 
 test1(Enum1 e) {
diff --git a/tools/VERSION b/tools/VERSION
index b875bc9..460779d 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 138
+PRERELEASE 139
 PRERELEASE_PATCH 0
\ No newline at end of file