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) {