Fix propagation of GenericCovariantImpl bit for type parameters

Change-Id: I81be85c0870a8a4fda4fb472aacadd915158ff6a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/100961
Reviewed-by: Aske Simon Christensen <askesc@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index 697f844..c6417ff 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -608,6 +608,10 @@
     }
     Substitution substitution;
     if (typeParameterCount != 0) {
+      for (int i = 0; i < typeParameterCount; i++) {
+        copyTypeParameterCovariance(
+            a.parent, aTypeParameters[i], bTypeParameters[i]);
+      }
       List<DartType> types = new List<DartType>(typeParameterCount);
       for (int i = 0; i < typeParameterCount; i++) {
         types[i] = new TypeParameterType(aTypeParameters[i]);
@@ -965,6 +969,15 @@
     }
   }
 
+  void copyTypeParameterCovariance(
+      Declaration parent, TypeParameter aParameter, TypeParameter bParameter) {
+    if (parent == cls) {
+      if (bParameter.isGenericCovariantImpl) {
+        aParameter.isGenericCovariantImpl = true;
+      }
+    }
+  }
+
   void reportInheritanceConflict(Declaration a, Declaration b) {
     String name = a.fullNameForErrors;
     if (a.parent != b.parent) {