[fasta] Correct override check for methods with covariant parameters

Bug: #32613

Change-Id: Id69e793afd2c933294299d796a28b66db6b5de17
Reviewed-on: https://dart-review.googlesource.com/64840
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Erik Ernst <eernst@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Peter von der Ahé <ahe@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
index cecffd7..854ac86 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
@@ -289,8 +289,26 @@
 
   void checkOverrides(
       ClassHierarchy hierarchy, TypeEnvironment typeEnvironment) {
-    hierarchy.forEachOverridePair(cls,
-        (Member declaredMember, Member interfaceMember, bool isSetter) {
+    handleSeenCovariant(
+        Member declaredMember,
+        Member interfaceMember,
+        bool isSetter,
+        callback(
+            Member declaredMember, Member interfaceMember, bool isSetter)) {
+      // When a parameter is covariant we have to check that we also
+      // override the same member in all parents.
+      for (Supertype supertype in interfaceMember.enclosingClass.supers) {
+        Member m = hierarchy.getInterfaceMember(
+            supertype.classNode, interfaceMember.name,
+            setter: isSetter);
+        if (m != null) {
+          callback(declaredMember, m, isSetter);
+        }
+      }
+    }
+
+    overridePairCallback(
+        Member declaredMember, Member interfaceMember, bool isSetter) {
       if (declaredMember is Constructor || interfaceMember is Constructor) {
         unimplemented("Constructor in override check.",
             declaredMember.fileOffset, fileUri);
@@ -298,8 +316,12 @@
       if (declaredMember is Procedure && interfaceMember is Procedure) {
         if (declaredMember.kind == ProcedureKind.Method &&
             interfaceMember.kind == ProcedureKind.Method) {
-          checkMethodOverride(
+          bool seenCovariant = checkMethodOverride(
               hierarchy, typeEnvironment, declaredMember, interfaceMember);
+          if (seenCovariant) {
+            handleSeenCovariant(declaredMember, interfaceMember, isSetter,
+                overridePairCallback);
+          }
         }
         if (declaredMember.kind == ProcedureKind.Getter &&
             interfaceMember.kind == ProcedureKind.Getter) {
@@ -308,8 +330,12 @@
         }
         if (declaredMember.kind == ProcedureKind.Setter &&
             interfaceMember.kind == ProcedureKind.Setter) {
-          checkSetterOverride(
+          bool seenCovariant = checkSetterOverride(
               hierarchy, typeEnvironment, declaredMember, interfaceMember);
+          if (seenCovariant) {
+            handleSeenCovariant(declaredMember, interfaceMember, isSetter,
+                overridePairCallback);
+          }
         }
       } else {
         bool declaredMemberHasGetter = declaredMember is Field ||
@@ -324,12 +350,18 @@
           checkGetterOverride(
               hierarchy, typeEnvironment, declaredMember, interfaceMember);
         } else if (declaredMemberHasSetter && interfaceMemberHasSetter) {
-          checkSetterOverride(
+          bool seenCovariant = checkSetterOverride(
               hierarchy, typeEnvironment, declaredMember, interfaceMember);
+          if (seenCovariant) {
+            handleSeenCovariant(declaredMember, interfaceMember, isSetter,
+                overridePairCallback);
+          }
         }
       }
       // TODO(ahe): Handle other cases: accessors, operators, and fields.
-    });
+    }
+
+    hierarchy.forEachOverridePair(cls, overridePairCallback);
   }
 
   void checkAbstractMembers(CoreTypes coreTypes, ClassHierarchy hierarchy) {
@@ -728,7 +760,9 @@
     return false;
   }
 
-  void checkMethodOverride(
+  /// Returns whether a covariant parameter was seen and more methods thus have
+  /// to be checked.
+  bool checkMethodOverride(
       ClassHierarchy hierarchy,
       TypeEnvironment typeEnvironment,
       Procedure declaredMember,
@@ -736,10 +770,11 @@
     if (declaredMember.enclosingClass != cls) {
       // TODO(ahe): Include these checks as well, but the message needs to
       // explain that [declaredMember] is inherited.
-      return;
+      return false;
     }
     assert(declaredMember.kind == ProcedureKind.Method);
     assert(interfaceMember.kind == ProcedureKind.Method);
+    bool seenCovariant = false;
     FunctionNode declaredFunction = declaredMember.function;
     FunctionNode interfaceFunction = interfaceMember.function;
 
@@ -807,10 +842,11 @@
           interfaceFunction.positionalParameters[i].type,
           declaredParameter.isCovariant,
           declaredParameter);
+      if (declaredParameter.isCovariant) seenCovariant = true;
     }
     if (declaredFunction.namedParameters.isEmpty &&
         interfaceFunction.namedParameters.isEmpty) {
-      return;
+      return seenCovariant;
     }
     if (declaredFunction.namedParameters.length <
         interfaceFunction.namedParameters.length) {
@@ -875,7 +911,9 @@
           interfaceNamedParameters.current.type,
           declaredParameter.isCovariant,
           declaredParameter);
+      if (declaredParameter.isCovariant) seenCovariant = true;
     }
+    return seenCovariant;
   }
 
   void checkGetterOverride(
@@ -896,7 +934,9 @@
         interfaceMember, declaredType, interfaceType, false, null);
   }
 
-  void checkSetterOverride(
+  /// Returns whether a covariant parameter was seen and more methods thus have
+  /// to be checked.
+  bool checkSetterOverride(
       ClassHierarchy hierarchy,
       TypeEnvironment typeEnvironment,
       Member declaredMember,
@@ -904,7 +944,7 @@
     if (declaredMember.enclosingClass != cls) {
       // TODO(paulberry): Include these checks as well, but the message needs to
       // explain that [declaredMember] is inherited.
-      return;
+      return false;
     }
     Substitution interfaceSubstitution = _computeInterfaceSubstitution(
         hierarchy, declaredMember, interfaceMember, null, null);
@@ -924,6 +964,7 @@
         isCovariant,
         declaredParameter,
         asIfDeclaredParameter: true);
+    return isCovariant;
   }
 
   String get fullNameForErrors {
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index 2e158a0..329ec9c 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -598,8 +598,6 @@
 identical_const_test/04: MissingCompileTimeError
 issue18628_2_test/01: MissingCompileTimeError
 issue23244_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-issue31596_override_test/07: MissingCompileTimeError
-issue31596_override_test/08: MissingCompileTimeError
 library_env_test/has_no_html_support: RuntimeError
 library_env_test/has_no_io_support: RuntimeError
 malbounded_instantiation_test/01: MissingCompileTimeError
@@ -791,8 +789,6 @@
 invocation_mirror_test: RuntimeError
 issue18628_2_test/01: MissingCompileTimeError
 issue23244_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-issue31596_override_test/07: MissingCompileTimeError
-issue31596_override_test/08: MissingCompileTimeError
 library_env_test/has_no_html_support: RuntimeError
 library_env_test/has_no_io_support: RuntimeError
 malbounded_instantiation_test/01: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 9935e31..009e069 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -397,8 +397,6 @@
 implicit_creation/implicit_const_not_default_values_test/e9: Pass
 instantiate_tearoff_of_call_test: CompileTimeError
 issue18628_2_test/01: MissingCompileTimeError
-issue31596_override_test/07: MissingCompileTimeError
-issue31596_override_test/08: MissingCompileTimeError
 issue31596_super_test/01: CompileTimeError
 issue31596_super_test/02: MissingCompileTimeError
 issue31596_super_test/03: CompileTimeError
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 351c684..e046a90 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -255,8 +255,6 @@
 field3_test/02: MissingCompileTimeError # Issue 33022
 generic_methods_bounds_test/01: MissingCompileTimeError # Issue 33018
 generic_methods_recursive_bound_test/02: MissingCompileTimeError # Issue 33018
-issue31596_override_test/07: MissingCompileTimeError
-issue31596_override_test/08: MissingCompileTimeError
 issue31596_super_test/02: MissingCompileTimeError
 issue31596_super_test/04: MissingCompileTimeError
 malbounded_instantiation_test/01: MissingCompileTimeError # Issue 33018
diff --git a/tests/language_2/override_inheritance_method2_test.dart b/tests/language_2/override_inheritance_method2_test.dart
new file mode 100644
index 0000000..e22571f
--- /dev/null
+++ b/tests/language_2/override_inheritance_method2_test.dart
@@ -0,0 +1,1112 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+main() {
+  new C();
+}
+
+class A {
+  method1(covariant dynamic a) => null; //# 001: ok
+  method2(covariant dynamic a) => null; //# 002: ok
+  method3(covariant dynamic a) => null; //# 003: ok
+  method4(covariant dynamic a) => null; //# 004: ok
+  method5(covariant dynamic a) => null; //# 005: ok
+  method6(covariant dynamic a) => null; //# 006: ok
+  method7(covariant dynamic a) => null; //# 007: ok
+  method8(covariant dynamic a) => null; //# 008: ok
+  method9(covariant dynamic a) => null; //# 009: ok
+  method10(covariant dynamic a) => null; //# 010: ok
+  method11(covariant dynamic a) => null; //# 011: ok
+  method12(covariant dynamic a) => null; //# 012: compile-time error
+  method13(covariant dynamic a) => null; //# 013: ok
+  method14(covariant dynamic a) => null; //# 014: ok
+  method15(covariant dynamic a) => null; //# 015: ok
+  method16(covariant dynamic a) => null; //# 016: compile-time error
+  method17(covariant dynamic a) => null; //# 017: ok
+  method18(covariant dynamic a) => null; //# 018: ok
+  method19(covariant dynamic a) => null; //# 019: ok
+  method20(covariant dynamic a) => null; //# 020: compile-time error
+  method21(covariant dynamic a) => null; //# 021: ok
+  method22(covariant dynamic a) => null; //# 022: ok
+  method23(covariant dynamic a) => null; //# 023: ok
+  method24(covariant dynamic a) => null; //# 024: compile-time error
+  method25(covariant dynamic a) => null; //# 025: ok
+  method26(covariant dynamic a) => null; //# 026: compile-time error
+  method27(covariant dynamic a) => null; //# 027: compile-time error
+  method28(covariant dynamic a) => null; //# 028: ok
+  method29(covariant dynamic a) => null; //# 029: ok
+  method30(covariant dynamic a) => null; //# 030: compile-time error
+  method31(covariant dynamic a) => null; //# 031: compile-time error
+  method32(covariant dynamic a) => null; //# 032: ok
+  method33(covariant dynamic a) => null; //# 033: ok
+  method34(covariant dynamic a) => null; //# 034: ok
+  method35(covariant dynamic a) => null; //# 035: ok
+  method36(covariant dynamic a) => null; //# 036: ok
+  method37(covariant dynamic a) => null; //# 037: ok
+  method38(covariant dynamic a) => null; //# 038: ok
+  method39(covariant dynamic a) => null; //# 039: ok
+  method40(covariant dynamic a) => null; //# 040: ok
+  method41(covariant dynamic a) => null; //# 041: ok
+  method42(covariant dynamic a) => null; //# 042: ok
+  method43(covariant dynamic a) => null; //# 043: ok
+  method44(covariant dynamic a) => null; //# 044: compile-time error
+  method45(covariant dynamic a) => null; //# 045: ok
+  method46(covariant dynamic a) => null; //# 046: ok
+  method47(covariant dynamic a) => null; //# 047: ok
+  method48(covariant dynamic a) => null; //# 048: compile-time error
+  method49(covariant dynamic a) => null; //# 049: ok
+  method50(covariant dynamic a) => null; //# 050: ok
+  method51(covariant dynamic a) => null; //# 051: ok
+  method52(covariant dynamic a) => null; //# 052: compile-time error
+  method53(covariant dynamic a) => null; //# 053: ok
+  method54(covariant dynamic a) => null; //# 054: ok
+  method55(covariant dynamic a) => null; //# 055: ok
+  method56(covariant dynamic a) => null; //# 056: compile-time error
+  method57(covariant dynamic a) => null; //# 057: ok
+  method58(covariant dynamic a) => null; //# 058: compile-time error
+  method59(covariant dynamic a) => null; //# 059: compile-time error
+  method60(covariant dynamic a) => null; //# 060: ok
+  method61(covariant dynamic a) => null; //# 061: ok
+  method62(covariant dynamic a) => null; //# 062: compile-time error
+  method63(covariant dynamic a) => null; //# 063: compile-time error
+  method64(covariant dynamic a) => null; //# 064: ok
+  method65(covariant num a) => null; //# 065: ok
+  method66(covariant num a) => null; //# 066: ok
+  method67(covariant num a) => null; //# 067: ok
+  method68(covariant num a) => null; //# 068: compile-time error
+  method69(covariant num a) => null; //# 069: ok
+  method70(covariant num a) => null; //# 070: ok
+  method71(covariant num a) => null; //# 071: ok
+  method72(covariant num a) => null; //# 072: compile-time error
+  method73(covariant num a) => null; //# 073: ok
+  method74(covariant num a) => null; //# 074: ok
+  method75(covariant num a) => null; //# 075: ok
+  method76(covariant num a) => null; //# 076: compile-time error
+  method77(covariant num a) => null; //# 077: ok
+  method78(covariant num a) => null; //# 078: ok
+  method79(covariant num a) => null; //# 079: ok
+  method80(covariant num a) => null; //# 080: compile-time error
+  method81(covariant num a) => null; //# 081: ok
+  method82(covariant num a) => null; //# 082: ok
+  method83(covariant num a) => null; //# 083: ok
+  method84(covariant num a) => null; //# 084: compile-time error
+  method85(covariant num a) => null; //# 085: ok
+  method86(covariant num a) => null; //# 086: ok
+  method87(covariant num a) => null; //# 087: ok
+  method88(covariant num a) => null; //# 088: compile-time error
+  method89(covariant num a) => null; //# 089: compile-time error
+  method90(covariant num a) => null; //# 090: ok
+  method91(covariant num a) => null; //# 091: ok
+  method92(covariant num a) => null; //# 092: ok
+  method93(covariant num a) => null; //# 093: compile-time error
+  method94(covariant num a) => null; //# 094: ok
+  method95(covariant num a) => null; //# 095: ok
+  method96(covariant num a) => null; //# 096: ok
+  method97(covariant num a) => null; //# 097: compile-time error
+  method98(covariant num a) => null; //# 098: ok
+  method99(covariant num a) => null; //# 099: ok
+  method100(covariant num a) => null; //# 100: ok
+  method101(covariant num a) => null; //# 101: compile-time error
+  method102(covariant num a) => null; //# 102: ok
+  method103(covariant num a) => null; //# 103: ok
+  method104(covariant num a) => null; //# 104: ok
+  method105(covariant num a) => null; //# 105: compile-time error
+  method106(covariant num a) => null; //# 106: ok
+  method107(covariant num a) => null; //# 107: ok
+  method108(covariant num a) => null; //# 108: ok
+  method109(covariant num a) => null; //# 109: compile-time error
+  method110(covariant num a) => null; //# 110: ok
+  method111(covariant num a) => null; //# 111: ok
+  method112(covariant num a) => null; //# 112: ok
+  method113(covariant num a) => null; //# 113: compile-time error
+  method114(covariant num a) => null; //# 114: compile-time error
+  method115(covariant int a) => null; //# 115: ok
+  method116(covariant int a) => null; //# 116: ok
+  method117(covariant int a) => null; //# 117: ok
+  method118(covariant int a) => null; //# 118: compile-time error
+  method119(covariant int a) => null; //# 119: ok
+  method120(covariant int a) => null; //# 120: ok
+  method121(covariant int a) => null; //# 121: ok
+  method122(covariant int a) => null; //# 122: compile-time error
+  method123(covariant int a) => null; //# 123: ok
+  method124(covariant int a) => null; //# 124: ok
+  method125(covariant int a) => null; //# 125: ok
+  method126(covariant int a) => null; //# 126: compile-time error
+  method127(covariant int a) => null; //# 127: ok
+  method128(covariant int a) => null; //# 128: ok
+  method129(covariant int a) => null; //# 129: ok
+  method130(covariant int a) => null; //# 130: compile-time error
+  method131(covariant int a) => null; //# 131: ok
+  method132(covariant int a) => null; //# 132: ok
+  method133(covariant int a) => null; //# 133: ok
+  method134(covariant int a) => null; //# 134: compile-time error
+  method135(covariant int a) => null; //# 135: ok
+  method136(covariant int a) => null; //# 136: ok
+  method137(covariant int a) => null; //# 137: ok
+  method138(covariant int a) => null; //# 138: compile-time error
+  method139(covariant int a) => null; //# 139: compile-time error
+  method140(covariant int a) => null; //# 140: ok
+  method141(covariant int a) => null; //# 141: ok
+  method142(covariant int a) => null; //# 142: ok
+  method143(covariant int a) => null; //# 143: compile-time error
+  method144(covariant int a) => null; //# 144: ok
+  method145(covariant int a) => null; //# 145: ok
+  method146(covariant int a) => null; //# 146: ok
+  method147(covariant int a) => null; //# 147: compile-time error
+  method148(covariant int a) => null; //# 148: ok
+  method149(covariant int a) => null; //# 149: ok
+  method150(covariant int a) => null; //# 150: ok
+  method151(covariant int a) => null; //# 151: compile-time error
+  method152(covariant int a) => null; //# 152: ok
+  method153(covariant int a) => null; //# 153: ok
+  method154(covariant int a) => null; //# 154: ok
+  method155(covariant int a) => null; //# 155: compile-time error
+  method156(covariant int a) => null; //# 156: ok
+  method157(covariant int a) => null; //# 157: ok
+  method158(covariant int a) => null; //# 158: ok
+  method159(covariant int a) => null; //# 159: compile-time error
+  method160(covariant int a) => null; //# 160: ok
+  method161(covariant int a) => null; //# 161: ok
+  method162(covariant int a) => null; //# 162: ok
+  method163(covariant int a) => null; //# 163: compile-time error
+  method164(covariant int a) => null; //# 164: compile-time error
+  method165(covariant String a) => null; //# 165: ok
+  method166(covariant String a) => null; //# 166: compile-time error
+  method167(covariant String a) => null; //# 167: compile-time error
+  method168(covariant String a) => null; //# 168: ok
+  method169(covariant String a) => null; //# 169: ok
+  method170(covariant String a) => null; //# 170: compile-time error
+  method171(covariant String a) => null; //# 171: compile-time error
+  method172(covariant String a) => null; //# 172: ok
+  method173(covariant String a) => null; //# 173: compile-time error
+  method174(covariant String a) => null; //# 174: compile-time error
+  method175(covariant String a) => null; //# 175: ok
+  method176(covariant String a) => null; //# 176: compile-time error
+  method177(covariant String a) => null; //# 177: compile-time error
+  method178(covariant String a) => null; //# 178: ok
+  method179(covariant String a) => null; //# 179: ok
+  method180(covariant String a) => null; //# 180: compile-time error
+  method181(covariant String a) => null; //# 181: compile-time error
+  method182(covariant String a) => null; //# 182: ok
+  method183(covariant String a) => null; //# 183: ok
+  method184(covariant String a) => null; //# 184: compile-time error
+  method185(covariant String a) => null; //# 185: compile-time error
+  method186(covariant String a) => null; //# 186: ok
+  method187(covariant String a) => null; //# 187: ok
+  method188(covariant String a) => null; //# 188: compile-time error
+  method189(covariant String a) => null; //# 189: compile-time error
+  method190(covariant String a) => null; //# 190: ok
+  method191(covariant String a) => null; //# 191: compile-time error
+  method192(covariant String a) => null; //# 192: compile-time error
+  method193(covariant String a) => null; //# 193: ok
+  method194(covariant String a) => null; //# 194: compile-time error
+  method195(covariant String a) => null; //# 195: compile-time error
+  method196(covariant String a) => null; //# 196: ok
+  method197(covariant String a) => null; //# 197: ok
+  method198(covariant String a) => null; //# 198: compile-time error
+  method199(covariant String a) => null; //# 199: compile-time error
+  method200(covariant String a) => null; //# 200: ok
+  method201(dynamic a) => null; //# 201: ok
+  method202(dynamic a) => null; //# 202: ok
+  method203(dynamic a) => null; //# 203: ok
+  method204(dynamic a) => null; //# 204: ok
+  method205(dynamic a) => null; //# 205: ok
+  method206(dynamic a) => null; //# 206: ok
+  method207(dynamic a) => null; //# 207: ok
+  method208(dynamic a) => null; //# 208: ok
+  method209(dynamic a) => null; //# 209: ok
+  method210(dynamic a) => null; //# 210: ok
+  method211(dynamic a) => null; //# 211: ok
+  method212(dynamic a) => null; //# 212: compile-time error
+  method213(dynamic a) => null; //# 213: ok
+  method214(dynamic a) => null; //# 214: ok
+  method215(dynamic a) => null; //# 215: ok
+  method216(dynamic a) => null; //# 216: compile-time error
+  method217(dynamic a) => null; //# 217: ok
+  method218(dynamic a) => null; //# 218: ok
+  method219(dynamic a) => null; //# 219: ok
+  method220(dynamic a) => null; //# 220: compile-time error
+  method221(dynamic a) => null; //# 221: ok
+  method222(dynamic a) => null; //# 222: ok
+  method223(dynamic a) => null; //# 223: ok
+  method224(dynamic a) => null; //# 224: compile-time error
+  method225(dynamic a) => null; //# 225: ok
+  method226(dynamic a) => null; //# 226: compile-time error
+  method227(dynamic a) => null; //# 227: compile-time error
+  method228(dynamic a) => null; //# 228: ok
+  method229(dynamic a) => null; //# 229: ok
+  method230(dynamic a) => null; //# 230: compile-time error
+  method231(dynamic a) => null; //# 231: compile-time error
+  method232(dynamic a) => null; //# 232: ok
+  method233(dynamic a) => null; //# 233: ok
+  method234(dynamic a) => null; //# 234: ok
+  method235(dynamic a) => null; //# 235: ok
+  method236(dynamic a) => null; //# 236: ok
+  method237(dynamic a) => null; //# 237: ok
+  method238(dynamic a) => null; //# 238: compile-time error
+  method239(dynamic a) => null; //# 239: compile-time error
+  method240(dynamic a) => null; //# 240: compile-time error
+  method241(dynamic a) => null; //# 241: compile-time error
+  method242(dynamic a) => null; //# 242: compile-time error
+  method243(dynamic a) => null; //# 243: compile-time error
+  method244(num a) => null; //# 244: ok
+  method245(num a) => null; //# 245: ok
+  method246(num a) => null; //# 246: ok
+  method247(num a) => null; //# 247: compile-time error
+  method248(num a) => null; //# 248: ok
+  method249(num a) => null; //# 249: ok
+  method250(num a) => null; //# 250: ok
+  method251(num a) => null; //# 251: compile-time error
+  method252(num a) => null; //# 252: ok
+  method253(num a) => null; //# 253: ok
+  method254(num a) => null; //# 254: ok
+  method255(num a) => null; //# 255: compile-time error
+  method256(num a) => null; //# 256: ok
+  method257(num a) => null; //# 257: ok
+  method258(num a) => null; //# 258: ok
+  method259(num a) => null; //# 259: compile-time error
+  method260(num a) => null; //# 260: ok
+  method261(num a) => null; //# 261: ok
+  method262(num a) => null; //# 262: ok
+  method263(num a) => null; //# 263: compile-time error
+  method264(num a) => null; //# 264: ok
+  method265(num a) => null; //# 265: ok
+  method266(num a) => null; //# 266: ok
+  method267(num a) => null; //# 267: compile-time error
+  method268(num a) => null; //# 268: compile-time error
+  method269(num a) => null; //# 269: ok
+  method270(num a) => null; //# 270: ok
+  method271(num a) => null; //# 271: ok
+  method272(num a) => null; //# 272: compile-time error
+  method273(num a) => null; //# 273: ok
+  method274(num a) => null; //# 274: compile-time error
+  method275(num a) => null; //# 275: compile-time error
+  method276(num a) => null; //# 276: compile-time error
+  method277(num a) => null; //# 277: ok
+  method278(num a) => null; //# 278: ok
+  method279(num a) => null; //# 279: ok
+  method280(num a) => null; //# 280: compile-time error
+  method281(num a) => null; //# 281: ok
+  method282(num a) => null; //# 282: ok
+  method283(num a) => null; //# 283: compile-time error
+  method284(num a) => null; //# 284: compile-time error
+  method285(num a) => null; //# 285: compile-time error
+  method286(num a) => null; //# 286: compile-time error
+  method287(int a) => null; //# 287: ok
+  method288(int a) => null; //# 288: ok
+  method289(int a) => null; //# 289: ok
+  method290(int a) => null; //# 290: compile-time error
+  method291(int a) => null; //# 291: ok
+  method292(int a) => null; //# 292: ok
+  method293(int a) => null; //# 293: ok
+  method294(int a) => null; //# 294: compile-time error
+  method295(int a) => null; //# 295: ok
+  method296(int a) => null; //# 296: ok
+  method297(int a) => null; //# 297: ok
+  method298(int a) => null; //# 298: compile-time error
+  method299(int a) => null; //# 299: ok
+  method300(int a) => null; //# 300: ok
+  method301(int a) => null; //# 301: ok
+  method302(int a) => null; //# 302: compile-time error
+  method303(int a) => null; //# 303: ok
+  method304(int a) => null; //# 304: ok
+  method305(int a) => null; //# 305: ok
+  method306(int a) => null; //# 306: compile-time error
+  method307(int a) => null; //# 307: ok
+  method308(int a) => null; //# 308: ok
+  method309(int a) => null; //# 309: ok
+  method310(int a) => null; //# 310: compile-time error
+  method311(int a) => null; //# 311: compile-time error
+  method312(int a) => null; //# 312: ok
+  method313(int a) => null; //# 313: ok
+  method314(int a) => null; //# 314: ok
+  method315(int a) => null; //# 315: compile-time error
+  method316(int a) => null; //# 316: ok
+  method317(int a) => null; //# 317: compile-time error
+  method318(int a) => null; //# 318: compile-time error
+  method319(int a) => null; //# 319: compile-time error
+  method320(int a) => null; //# 320: ok
+  method321(int a) => null; //# 321: ok
+  method322(int a) => null; //# 322: ok
+  method323(int a) => null; //# 323: compile-time error
+  method324(int a) => null; //# 324: ok
+  method325(int a) => null; //# 325: ok
+  method326(int a) => null; //# 326: compile-time error
+  method327(int a) => null; //# 327: compile-time error
+  method328(int a) => null; //# 328: ok
+  method329(int a) => null; //# 329: ok
+  method330(int a) => null; //# 330: ok
+  method331(int a) => null; //# 331: compile-time error
+  method332(int a) => null; //# 332: ok
+  method333(int a) => null; //# 333: ok
+  method334(int a) => null; //# 334: ok
+  method335(int a) => null; //# 335: compile-time error
+  method336(int a) => null; //# 336: compile-time error
+  method337(String a) => null; //# 337: ok
+  method338(String a) => null; //# 338: compile-time error
+  method339(String a) => null; //# 339: compile-time error
+  method340(String a) => null; //# 340: ok
+  method341(String a) => null; //# 341: ok
+  method342(String a) => null; //# 342: compile-time error
+  method343(String a) => null; //# 343: compile-time error
+  method344(String a) => null; //# 344: ok
+  method345(String a) => null; //# 345: compile-time error
+  method346(String a) => null; //# 346: compile-time error
+  method347(String a) => null; //# 347: ok
+  method348(String a) => null; //# 348: compile-time error
+  method349(String a) => null; //# 349: compile-time error
+  method350(String a) => null; //# 350: ok
+  method351(String a) => null; //# 351: ok
+  method352(String a) => null; //# 352: compile-time error
+  method353(String a) => null; //# 353: compile-time error
+  method354(String a) => null; //# 354: ok
+  method355(String a) => null; //# 355: ok
+  method356(String a) => null; //# 356: compile-time error
+  method357(String a) => null; //# 357: compile-time error
+  method358(String a) => null; //# 358: ok
+  method359(String a) => null; //# 359: ok
+  method360(String a) => null; //# 360: compile-time error
+  method361(String a) => null; //# 361: compile-time error
+  method362(String a) => null; //# 362: compile-time error
+  method363(String a) => null; //# 363: compile-time error
+  method364(String a) => null; //# 364: compile-time error
+  method365(String a) => null; //# 365: ok
+  method366(String a) => null; //# 366: compile-time error
+  method367(String a) => null; //# 367: compile-time error
+  method368(String a) => null; //# 368: ok
+  method369(String a) => null; //# 369: ok
+  method370(String a) => null; //# 370: compile-time error
+  method371(String a) => null; //# 371: compile-time error
+  method372(String a) => null; //# 372: ok
+}
+
+class B extends A {
+  method1(covariant dynamic a) => null; //# 001: continued
+  method2(covariant dynamic a) => null; //# 002: continued
+  method3(covariant dynamic a) => null; //# 003: continued
+  method4(covariant dynamic a) => null; //# 004: continued
+  method5(covariant dynamic a) => null; //# 005: continued
+  method6(covariant dynamic a) => null; //# 006: continued
+  method7(covariant dynamic a) => null; //# 007: continued
+  method8(covariant dynamic a) => null; //# 008: continued
+  method9(covariant num a) => null; //# 009: continued
+  method10(covariant num a) => null; //# 010: continued
+  method11(covariant num a) => null; //# 011: continued
+  method12(covariant num a) => null; //# 012: continued
+  method13(covariant num a) => null; //# 013: continued
+  method14(covariant num a) => null; //# 014: continued
+  method15(covariant num a) => null; //# 015: continued
+  method16(covariant num a) => null; //# 016: continued
+  method17(covariant int a) => null; //# 017: continued
+  method18(covariant int a) => null; //# 018: continued
+  method19(covariant int a) => null; //# 019: continued
+  method20(covariant int a) => null; //# 020: continued
+  method21(covariant int a) => null; //# 021: continued
+  method22(covariant int a) => null; //# 022: continued
+  method23(covariant int a) => null; //# 023: continued
+  method24(covariant int a) => null; //# 024: continued
+  method25(covariant String a) => null; //# 025: continued
+  method26(covariant String a) => null; //# 026: continued
+  method27(covariant String a) => null; //# 027: continued
+  method28(covariant String a) => null; //# 028: continued
+  method29(covariant String a) => null; //# 029: continued
+  method30(covariant String a) => null; //# 030: continued
+  method31(covariant String a) => null; //# 031: continued
+  method32(covariant String a) => null; //# 032: continued
+  method33(dynamic a) => null; //# 033: continued
+  method34(dynamic a) => null; //# 034: continued
+  method35(dynamic a) => null; //# 035: continued
+  method36(dynamic a) => null; //# 036: continued
+  method37(dynamic a) => null; //# 037: continued
+  method38(dynamic a) => null; //# 038: continued
+  method39(dynamic a) => null; //# 039: continued
+  method40(dynamic a) => null; //# 040: continued
+  method41(num a) => null; //# 041: continued
+  method42(num a) => null; //# 042: continued
+  method43(num a) => null; //# 043: continued
+  method44(num a) => null; //# 044: continued
+  method45(num a) => null; //# 045: continued
+  method46(num a) => null; //# 046: continued
+  method47(num a) => null; //# 047: continued
+  method48(num a) => null; //# 048: continued
+  method49(int a) => null; //# 049: continued
+  method50(int a) => null; //# 050: continued
+  method51(int a) => null; //# 051: continued
+  method52(int a) => null; //# 052: continued
+  method53(int a) => null; //# 053: continued
+  method54(int a) => null; //# 054: continued
+  method55(int a) => null; //# 055: continued
+  method56(int a) => null; //# 056: continued
+  method57(String a) => null; //# 057: continued
+  method58(String a) => null; //# 058: continued
+  method59(String a) => null; //# 059: continued
+  method60(String a) => null; //# 060: continued
+  method61(String a) => null; //# 061: continued
+  method62(String a) => null; //# 062: continued
+  method63(String a) => null; //# 063: continued
+  method64(String a) => null; //# 064: continued
+  method65(covariant dynamic a) => null; //# 065: continued
+  method66(covariant dynamic a) => null; //# 066: continued
+  method67(covariant dynamic a) => null; //# 067: continued
+  method68(covariant dynamic a) => null; //# 068: continued
+  method69(covariant dynamic a) => null; //# 069: continued
+  method70(covariant dynamic a) => null; //# 070: continued
+  method71(covariant dynamic a) => null; //# 071: continued
+  method72(covariant dynamic a) => null; //# 072: continued
+  method73(covariant num a) => null; //# 073: continued
+  method74(covariant num a) => null; //# 074: continued
+  method75(covariant num a) => null; //# 075: continued
+  method76(covariant num a) => null; //# 076: continued
+  method77(covariant num a) => null; //# 077: continued
+  method78(covariant num a) => null; //# 078: continued
+  method79(covariant num a) => null; //# 079: continued
+  method80(covariant num a) => null; //# 080: continued
+  method81(covariant int a) => null; //# 081: continued
+  method82(covariant int a) => null; //# 082: continued
+  method83(covariant int a) => null; //# 083: continued
+  method84(covariant int a) => null; //# 084: continued
+  method85(covariant int a) => null; //# 085: continued
+  method86(covariant int a) => null; //# 086: continued
+  method87(covariant int a) => null; //# 087: continued
+  method88(covariant int a) => null; //# 088: continued
+  method89(covariant String a) => null; //# 089: continued
+  method90(dynamic a) => null; //# 090: continued
+  method91(dynamic a) => null; //# 091: continued
+  method92(dynamic a) => null; //# 092: continued
+  method93(dynamic a) => null; //# 093: continued
+  method94(dynamic a) => null; //# 094: continued
+  method95(dynamic a) => null; //# 095: continued
+  method96(dynamic a) => null; //# 096: continued
+  method97(dynamic a) => null; //# 097: continued
+  method98(num a) => null; //# 098: continued
+  method99(num a) => null; //# 099: continued
+  method100(num a) => null; //# 100: continued
+  method101(num a) => null; //# 101: continued
+  method102(num a) => null; //# 102: continued
+  method103(num a) => null; //# 103: continued
+  method104(num a) => null; //# 104: continued
+  method105(num a) => null; //# 105: continued
+  method106(int a) => null; //# 106: continued
+  method107(int a) => null; //# 107: continued
+  method108(int a) => null; //# 108: continued
+  method109(int a) => null; //# 109: continued
+  method110(int a) => null; //# 110: continued
+  method111(int a) => null; //# 111: continued
+  method112(int a) => null; //# 112: continued
+  method113(int a) => null; //# 113: continued
+  method114(String a) => null; //# 114: continued
+  method115(covariant dynamic a) => null; //# 115: continued
+  method116(covariant dynamic a) => null; //# 116: continued
+  method117(covariant dynamic a) => null; //# 117: continued
+  method118(covariant dynamic a) => null; //# 118: continued
+  method119(covariant dynamic a) => null; //# 119: continued
+  method120(covariant dynamic a) => null; //# 120: continued
+  method121(covariant dynamic a) => null; //# 121: continued
+  method122(covariant dynamic a) => null; //# 122: continued
+  method123(covariant num a) => null; //# 123: continued
+  method124(covariant num a) => null; //# 124: continued
+  method125(covariant num a) => null; //# 125: continued
+  method126(covariant num a) => null; //# 126: continued
+  method127(covariant num a) => null; //# 127: continued
+  method128(covariant num a) => null; //# 128: continued
+  method129(covariant num a) => null; //# 129: continued
+  method130(covariant num a) => null; //# 130: continued
+  method131(covariant int a) => null; //# 131: continued
+  method132(covariant int a) => null; //# 132: continued
+  method133(covariant int a) => null; //# 133: continued
+  method134(covariant int a) => null; //# 134: continued
+  method135(covariant int a) => null; //# 135: continued
+  method136(covariant int a) => null; //# 136: continued
+  method137(covariant int a) => null; //# 137: continued
+  method138(covariant int a) => null; //# 138: continued
+  method139(covariant String a) => null; //# 139: continued
+  method140(dynamic a) => null; //# 140: continued
+  method141(dynamic a) => null; //# 141: continued
+  method142(dynamic a) => null; //# 142: continued
+  method143(dynamic a) => null; //# 143: continued
+  method144(dynamic a) => null; //# 144: continued
+  method145(dynamic a) => null; //# 145: continued
+  method146(dynamic a) => null; //# 146: continued
+  method147(dynamic a) => null; //# 147: continued
+  method148(num a) => null; //# 148: continued
+  method149(num a) => null; //# 149: continued
+  method150(num a) => null; //# 150: continued
+  method151(num a) => null; //# 151: continued
+  method152(num a) => null; //# 152: continued
+  method153(num a) => null; //# 153: continued
+  method154(num a) => null; //# 154: continued
+  method155(num a) => null; //# 155: continued
+  method156(int a) => null; //# 156: continued
+  method157(int a) => null; //# 157: continued
+  method158(int a) => null; //# 158: continued
+  method159(int a) => null; //# 159: continued
+  method160(int a) => null; //# 160: continued
+  method161(int a) => null; //# 161: continued
+  method162(int a) => null; //# 162: continued
+  method163(int a) => null; //# 163: continued
+  method164(String a) => null; //# 164: continued
+  method165(covariant dynamic a) => null; //# 165: continued
+  method166(covariant dynamic a) => null; //# 166: continued
+  method167(covariant dynamic a) => null; //# 167: continued
+  method168(covariant dynamic a) => null; //# 168: continued
+  method169(covariant dynamic a) => null; //# 169: continued
+  method170(covariant dynamic a) => null; //# 170: continued
+  method171(covariant dynamic a) => null; //# 171: continued
+  method172(covariant dynamic a) => null; //# 172: continued
+  method173(covariant num a) => null; //# 173: continued
+  method174(covariant int a) => null; //# 174: continued
+  method175(covariant String a) => null; //# 175: continued
+  method176(covariant String a) => null; //# 176: continued
+  method177(covariant String a) => null; //# 177: continued
+  method178(covariant String a) => null; //# 178: continued
+  method179(covariant String a) => null; //# 179: continued
+  method180(covariant String a) => null; //# 180: continued
+  method181(covariant String a) => null; //# 181: continued
+  method182(covariant String a) => null; //# 182: continued
+  method183(dynamic a) => null; //# 183: continued
+  method184(dynamic a) => null; //# 184: continued
+  method185(dynamic a) => null; //# 185: continued
+  method186(dynamic a) => null; //# 186: continued
+  method187(dynamic a) => null; //# 187: continued
+  method188(dynamic a) => null; //# 188: continued
+  method189(dynamic a) => null; //# 189: continued
+  method190(dynamic a) => null; //# 190: continued
+  method191(num a) => null; //# 191: continued
+  method192(int a) => null; //# 192: continued
+  method193(String a) => null; //# 193: continued
+  method194(String a) => null; //# 194: continued
+  method195(String a) => null; //# 195: continued
+  method196(String a) => null; //# 196: continued
+  method197(String a) => null; //# 197: continued
+  method198(String a) => null; //# 198: continued
+  method199(String a) => null; //# 199: continued
+  method200(String a) => null; //# 200: continued
+  method201(covariant dynamic a) => null; //# 201: continued
+  method202(covariant dynamic a) => null; //# 202: continued
+  method203(covariant dynamic a) => null; //# 203: continued
+  method204(covariant dynamic a) => null; //# 204: continued
+  method205(covariant dynamic a) => null; //# 205: continued
+  method206(covariant dynamic a) => null; //# 206: continued
+  method207(covariant dynamic a) => null; //# 207: continued
+  method208(covariant dynamic a) => null; //# 208: continued
+  method209(covariant num a) => null; //# 209: continued
+  method210(covariant num a) => null; //# 210: continued
+  method211(covariant num a) => null; //# 211: continued
+  method212(covariant num a) => null; //# 212: continued
+  method213(covariant num a) => null; //# 213: continued
+  method214(covariant num a) => null; //# 214: continued
+  method215(covariant num a) => null; //# 215: continued
+  method216(covariant num a) => null; //# 216: continued
+  method217(covariant int a) => null; //# 217: continued
+  method218(covariant int a) => null; //# 218: continued
+  method219(covariant int a) => null; //# 219: continued
+  method220(covariant int a) => null; //# 220: continued
+  method221(covariant int a) => null; //# 221: continued
+  method222(covariant int a) => null; //# 222: continued
+  method223(covariant int a) => null; //# 223: continued
+  method224(covariant int a) => null; //# 224: continued
+  method225(covariant String a) => null; //# 225: continued
+  method226(covariant String a) => null; //# 226: continued
+  method227(covariant String a) => null; //# 227: continued
+  method228(covariant String a) => null; //# 228: continued
+  method229(covariant String a) => null; //# 229: continued
+  method230(covariant String a) => null; //# 230: continued
+  method231(covariant String a) => null; //# 231: continued
+  method232(covariant String a) => null; //# 232: continued
+  method233(dynamic a) => null; //# 233: continued
+  method234(dynamic a) => null; //# 234: continued
+  method235(dynamic a) => null; //# 235: continued
+  method236(dynamic a) => null; //# 236: continued
+  method237(dynamic a) => null; //# 237: continued
+  method238(dynamic a) => null; //# 238: continued
+  method239(dynamic a) => null; //# 239: continued
+  method240(dynamic a) => null; //# 240: continued
+  method241(num a) => null; //# 241: continued
+  method242(int a) => null; //# 242: continued
+  method243(String a) => null; //# 243: continued
+  method244(covariant dynamic a) => null; //# 244: continued
+  method245(covariant dynamic a) => null; //# 245: continued
+  method246(covariant dynamic a) => null; //# 246: continued
+  method247(covariant dynamic a) => null; //# 247: continued
+  method248(covariant dynamic a) => null; //# 248: continued
+  method249(covariant dynamic a) => null; //# 249: continued
+  method250(covariant dynamic a) => null; //# 250: continued
+  method251(covariant dynamic a) => null; //# 251: continued
+  method252(covariant num a) => null; //# 252: continued
+  method253(covariant num a) => null; //# 253: continued
+  method254(covariant num a) => null; //# 254: continued
+  method255(covariant num a) => null; //# 255: continued
+  method256(covariant num a) => null; //# 256: continued
+  method257(covariant num a) => null; //# 257: continued
+  method258(covariant num a) => null; //# 258: continued
+  method259(covariant num a) => null; //# 259: continued
+  method260(covariant int a) => null; //# 260: continued
+  method261(covariant int a) => null; //# 261: continued
+  method262(covariant int a) => null; //# 262: continued
+  method263(covariant int a) => null; //# 263: continued
+  method264(covariant int a) => null; //# 264: continued
+  method265(covariant int a) => null; //# 265: continued
+  method266(covariant int a) => null; //# 266: continued
+  method267(covariant int a) => null; //# 267: continued
+  method268(covariant String a) => null; //# 268: continued
+  method269(dynamic a) => null; //# 269: continued
+  method270(dynamic a) => null; //# 270: continued
+  method271(dynamic a) => null; //# 271: continued
+  method272(dynamic a) => null; //# 272: continued
+  method273(dynamic a) => null; //# 273: continued
+  method274(dynamic a) => null; //# 274: continued
+  method275(dynamic a) => null; //# 275: continued
+  method276(dynamic a) => null; //# 276: continued
+  method277(num a) => null; //# 277: continued
+  method278(num a) => null; //# 278: continued
+  method279(num a) => null; //# 279: continued
+  method280(num a) => null; //# 280: continued
+  method281(num a) => null; //# 281: continued
+  method282(num a) => null; //# 282: continued
+  method283(num a) => null; //# 283: continued
+  method284(num a) => null; //# 284: continued
+  method285(int a) => null; //# 285: continued
+  method286(String a) => null; //# 286: continued
+  method287(covariant dynamic a) => null; //# 287: continued
+  method288(covariant dynamic a) => null; //# 288: continued
+  method289(covariant dynamic a) => null; //# 289: continued
+  method290(covariant dynamic a) => null; //# 290: continued
+  method291(covariant dynamic a) => null; //# 291: continued
+  method292(covariant dynamic a) => null; //# 292: continued
+  method293(covariant dynamic a) => null; //# 293: continued
+  method294(covariant dynamic a) => null; //# 294: continued
+  method295(covariant num a) => null; //# 295: continued
+  method296(covariant num a) => null; //# 296: continued
+  method297(covariant num a) => null; //# 297: continued
+  method298(covariant num a) => null; //# 298: continued
+  method299(covariant num a) => null; //# 299: continued
+  method300(covariant num a) => null; //# 300: continued
+  method301(covariant num a) => null; //# 301: continued
+  method302(covariant num a) => null; //# 302: continued
+  method303(covariant int a) => null; //# 303: continued
+  method304(covariant int a) => null; //# 304: continued
+  method305(covariant int a) => null; //# 305: continued
+  method306(covariant int a) => null; //# 306: continued
+  method307(covariant int a) => null; //# 307: continued
+  method308(covariant int a) => null; //# 308: continued
+  method309(covariant int a) => null; //# 309: continued
+  method310(covariant int a) => null; //# 310: continued
+  method311(covariant String a) => null; //# 311: continued
+  method312(dynamic a) => null; //# 312: continued
+  method313(dynamic a) => null; //# 313: continued
+  method314(dynamic a) => null; //# 314: continued
+  method315(dynamic a) => null; //# 315: continued
+  method316(dynamic a) => null; //# 316: continued
+  method317(dynamic a) => null; //# 317: continued
+  method318(dynamic a) => null; //# 318: continued
+  method319(dynamic a) => null; //# 319: continued
+  method320(num a) => null; //# 320: continued
+  method321(num a) => null; //# 321: continued
+  method322(num a) => null; //# 322: continued
+  method323(num a) => null; //# 323: continued
+  method324(num a) => null; //# 324: continued
+  method325(num a) => null; //# 325: continued
+  method326(num a) => null; //# 326: continued
+  method327(num a) => null; //# 327: continued
+  method328(int a) => null; //# 328: continued
+  method329(int a) => null; //# 329: continued
+  method330(int a) => null; //# 330: continued
+  method331(int a) => null; //# 331: continued
+  method332(int a) => null; //# 332: continued
+  method333(int a) => null; //# 333: continued
+  method334(int a) => null; //# 334: continued
+  method335(int a) => null; //# 335: continued
+  method336(String a) => null; //# 336: continued
+  method337(covariant dynamic a) => null; //# 337: continued
+  method338(covariant dynamic a) => null; //# 338: continued
+  method339(covariant dynamic a) => null; //# 339: continued
+  method340(covariant dynamic a) => null; //# 340: continued
+  method341(covariant dynamic a) => null; //# 341: continued
+  method342(covariant dynamic a) => null; //# 342: continued
+  method343(covariant dynamic a) => null; //# 343: continued
+  method344(covariant dynamic a) => null; //# 344: continued
+  method345(covariant num a) => null; //# 345: continued
+  method346(covariant int a) => null; //# 346: continued
+  method347(covariant String a) => null; //# 347: continued
+  method348(covariant String a) => null; //# 348: continued
+  method349(covariant String a) => null; //# 349: continued
+  method350(covariant String a) => null; //# 350: continued
+  method351(covariant String a) => null; //# 351: continued
+  method352(covariant String a) => null; //# 352: continued
+  method353(covariant String a) => null; //# 353: continued
+  method354(covariant String a) => null; //# 354: continued
+  method355(dynamic a) => null; //# 355: continued
+  method356(dynamic a) => null; //# 356: continued
+  method357(dynamic a) => null; //# 357: continued
+  method358(dynamic a) => null; //# 358: continued
+  method359(dynamic a) => null; //# 359: continued
+  method360(dynamic a) => null; //# 360: continued
+  method361(dynamic a) => null; //# 361: continued
+  method362(dynamic a) => null; //# 362: continued
+  method363(num a) => null; //# 363: continued
+  method364(int a) => null; //# 364: continued
+  method365(String a) => null; //# 365: continued
+  method366(String a) => null; //# 366: continued
+  method367(String a) => null; //# 367: continued
+  method368(String a) => null; //# 368: continued
+  method369(String a) => null; //# 369: continued
+  method370(String a) => null; //# 370: continued
+  method371(String a) => null; //# 371: continued
+  method372(String a) => null; //# 372: continued
+}
+
+class C extends B {
+  method1(covariant dynamic a) => null; //# 001: continued
+  method2(covariant num a) => null; //# 002: continued
+  method3(covariant int a) => null; //# 003: continued
+  method4(covariant String a) => null; //# 004: continued
+  method5(dynamic a) => null; //# 005: continued
+  method6(num a) => null; //# 006: continued
+  method7(int a) => null; //# 007: continued
+  method8(String a) => null; //# 008: continued
+  method9(covariant dynamic a) => null; //# 009: continued
+  method10(covariant num a) => null; //# 010: continued
+  method11(covariant int a) => null; //# 011: continued
+  method12(covariant String a) => null; //# 012: continued
+  method13(dynamic a) => null; //# 013: continued
+  method14(num a) => null; //# 014: continued
+  method15(int a) => null; //# 015: continued
+  method16(String a) => null; //# 016: continued
+  method17(covariant dynamic a) => null; //# 017: continued
+  method18(covariant num a) => null; //# 018: continued
+  method19(covariant int a) => null; //# 019: continued
+  method20(covariant String a) => null; //# 020: continued
+  method21(dynamic a) => null; //# 021: continued
+  method22(num a) => null; //# 022: continued
+  method23(int a) => null; //# 023: continued
+  method24(String a) => null; //# 024: continued
+  method25(covariant dynamic a) => null; //# 025: continued
+  method26(covariant num a) => null; //# 026: continued
+  method27(covariant int a) => null; //# 027: continued
+  method28(covariant String a) => null; //# 028: continued
+  method29(dynamic a) => null; //# 029: continued
+  method30(num a) => null; //# 030: continued
+  method31(int a) => null; //# 031: continued
+  method32(String a) => null; //# 032: continued
+  method33(covariant dynamic a) => null; //# 033: continued
+  method34(covariant num a) => null; //# 034: continued
+  method35(covariant int a) => null; //# 035: continued
+  method36(covariant String a) => null; //# 036: continued
+  method37(dynamic a) => null; //# 037: continued
+  method38(num a) => null; //# 038: continued
+  method39(int a) => null; //# 039: continued
+  method40(String a) => null; //# 040: continued
+  method41(covariant dynamic a) => null; //# 041: continued
+  method42(covariant num a) => null; //# 042: continued
+  method43(covariant int a) => null; //# 043: continued
+  method44(covariant String a) => null; //# 044: continued
+  method45(dynamic a) => null; //# 045: continued
+  method46(num a) => null; //# 046: continued
+  method47(int a) => null; //# 047: continued
+  method48(String a) => null; //# 048: continued
+  method49(covariant dynamic a) => null; //# 049: continued
+  method50(covariant num a) => null; //# 050: continued
+  method51(covariant int a) => null; //# 051: continued
+  method52(covariant String a) => null; //# 052: continued
+  method53(dynamic a) => null; //# 053: continued
+  method54(num a) => null; //# 054: continued
+  method55(int a) => null; //# 055: continued
+  method56(String a) => null; //# 056: continued
+  method57(covariant dynamic a) => null; //# 057: continued
+  method58(covariant num a) => null; //# 058: continued
+  method59(covariant int a) => null; //# 059: continued
+  method60(covariant String a) => null; //# 060: continued
+  method61(dynamic a) => null; //# 061: continued
+  method62(num a) => null; //# 062: continued
+  method63(int a) => null; //# 063: continued
+  method64(String a) => null; //# 064: continued
+  method65(covariant dynamic a) => null; //# 065: continued
+  method66(covariant num a) => null; //# 066: continued
+  method67(covariant int a) => null; //# 067: continued
+  method68(covariant String a) => null; //# 068: continued
+  method69(dynamic a) => null; //# 069: continued
+  method70(num a) => null; //# 070: continued
+  method71(int a) => null; //# 071: continued
+  method72(String a) => null; //# 072: continued
+  method73(covariant dynamic a) => null; //# 073: continued
+  method74(covariant num a) => null; //# 074: continued
+  method75(covariant int a) => null; //# 075: continued
+  method76(covariant String a) => null; //# 076: continued
+  method77(dynamic a) => null; //# 077: continued
+  method78(num a) => null; //# 078: continued
+  method79(int a) => null; //# 079: continued
+  method80(String a) => null; //# 080: continued
+  method81(covariant dynamic a) => null; //# 081: continued
+  method82(covariant num a) => null; //# 082: continued
+  method83(covariant int a) => null; //# 083: continued
+  method84(covariant String a) => null; //# 084: continued
+  method85(dynamic a) => null; //# 085: continued
+  method86(num a) => null; //# 086: continued
+  method87(int a) => null; //# 087: continued
+  method88(String a) => null; //# 088: continued
+  method90(covariant dynamic a) => null; //# 090: continued
+  method91(covariant num a) => null; //# 091: continued
+  method92(covariant int a) => null; //# 092: continued
+  method93(covariant String a) => null; //# 093: continued
+  method94(dynamic a) => null; //# 094: continued
+  method95(num a) => null; //# 095: continued
+  method96(int a) => null; //# 096: continued
+  method97(String a) => null; //# 097: continued
+  method98(covariant dynamic a) => null; //# 098: continued
+  method99(covariant num a) => null; //# 099: continued
+  method100(covariant int a) => null; //# 100: continued
+  method101(covariant String a) => null; //# 101: continued
+  method102(dynamic a) => null; //# 102: continued
+  method103(num a) => null; //# 103: continued
+  method104(int a) => null; //# 104: continued
+  method105(String a) => null; //# 105: continued
+  method106(covariant dynamic a) => null; //# 106: continued
+  method107(covariant num a) => null; //# 107: continued
+  method108(covariant int a) => null; //# 108: continued
+  method109(covariant String a) => null; //# 109: continued
+  method110(dynamic a) => null; //# 110: continued
+  method111(num a) => null; //# 111: continued
+  method112(int a) => null; //# 112: continued
+  method113(String a) => null; //# 113: continued
+  method115(covariant dynamic a) => null; //# 115: continued
+  method116(covariant num a) => null; //# 116: continued
+  method117(covariant int a) => null; //# 117: continued
+  method118(covariant String a) => null; //# 118: continued
+  method119(dynamic a) => null; //# 119: continued
+  method120(num a) => null; //# 120: continued
+  method121(int a) => null; //# 121: continued
+  method122(String a) => null; //# 122: continued
+  method123(covariant dynamic a) => null; //# 123: continued
+  method124(covariant num a) => null; //# 124: continued
+  method125(covariant int a) => null; //# 125: continued
+  method126(covariant String a) => null; //# 126: continued
+  method127(dynamic a) => null; //# 127: continued
+  method128(num a) => null; //# 128: continued
+  method129(int a) => null; //# 129: continued
+  method130(String a) => null; //# 130: continued
+  method131(covariant dynamic a) => null; //# 131: continued
+  method132(covariant num a) => null; //# 132: continued
+  method133(covariant int a) => null; //# 133: continued
+  method134(covariant String a) => null; //# 134: continued
+  method135(dynamic a) => null; //# 135: continued
+  method136(num a) => null; //# 136: continued
+  method137(int a) => null; //# 137: continued
+  method138(String a) => null; //# 138: continued
+  method140(covariant dynamic a) => null; //# 140: continued
+  method141(covariant num a) => null; //# 141: continued
+  method142(covariant int a) => null; //# 142: continued
+  method143(covariant String a) => null; //# 143: continued
+  method144(dynamic a) => null; //# 144: continued
+  method145(num a) => null; //# 145: continued
+  method146(int a) => null; //# 146: continued
+  method147(String a) => null; //# 147: continued
+  method148(covariant dynamic a) => null; //# 148: continued
+  method149(covariant num a) => null; //# 149: continued
+  method150(covariant int a) => null; //# 150: continued
+  method151(covariant String a) => null; //# 151: continued
+  method152(dynamic a) => null; //# 152: continued
+  method153(num a) => null; //# 153: continued
+  method154(int a) => null; //# 154: continued
+  method155(String a) => null; //# 155: continued
+  method156(covariant dynamic a) => null; //# 156: continued
+  method157(covariant num a) => null; //# 157: continued
+  method158(covariant int a) => null; //# 158: continued
+  method159(covariant String a) => null; //# 159: continued
+  method160(dynamic a) => null; //# 160: continued
+  method161(num a) => null; //# 161: continued
+  method162(int a) => null; //# 162: continued
+  method163(String a) => null; //# 163: continued
+  method165(covariant dynamic a) => null; //# 165: continued
+  method166(covariant num a) => null; //# 166: continued
+  method167(covariant int a) => null; //# 167: continued
+  method168(covariant String a) => null; //# 168: continued
+  method169(dynamic a) => null; //# 169: continued
+  method170(num a) => null; //# 170: continued
+  method171(int a) => null; //# 171: continued
+  method172(String a) => null; //# 172: continued
+  method175(covariant dynamic a) => null; //# 175: continued
+  method176(covariant num a) => null; //# 176: continued
+  method177(covariant int a) => null; //# 177: continued
+  method178(covariant String a) => null; //# 178: continued
+  method179(dynamic a) => null; //# 179: continued
+  method180(num a) => null; //# 180: continued
+  method181(int a) => null; //# 181: continued
+  method182(String a) => null; //# 182: continued
+  method183(covariant dynamic a) => null; //# 183: continued
+  method184(covariant num a) => null; //# 184: continued
+  method185(covariant int a) => null; //# 185: continued
+  method186(covariant String a) => null; //# 186: continued
+  method187(dynamic a) => null; //# 187: continued
+  method188(num a) => null; //# 188: continued
+  method189(int a) => null; //# 189: continued
+  method190(String a) => null; //# 190: continued
+  method193(covariant dynamic a) => null; //# 193: continued
+  method194(covariant num a) => null; //# 194: continued
+  method195(covariant int a) => null; //# 195: continued
+  method196(covariant String a) => null; //# 196: continued
+  method197(dynamic a) => null; //# 197: continued
+  method198(num a) => null; //# 198: continued
+  method199(int a) => null; //# 199: continued
+  method200(String a) => null; //# 200: continued
+  method201(covariant dynamic a) => null; //# 201: continued
+  method202(covariant num a) => null; //# 202: continued
+  method203(covariant int a) => null; //# 203: continued
+  method204(covariant String a) => null; //# 204: continued
+  method205(dynamic a) => null; //# 205: continued
+  method206(num a) => null; //# 206: continued
+  method207(int a) => null; //# 207: continued
+  method208(String a) => null; //# 208: continued
+  method209(covariant dynamic a) => null; //# 209: continued
+  method210(covariant num a) => null; //# 210: continued
+  method211(covariant int a) => null; //# 211: continued
+  method212(covariant String a) => null; //# 212: continued
+  method213(dynamic a) => null; //# 213: continued
+  method214(num a) => null; //# 214: continued
+  method215(int a) => null; //# 215: continued
+  method216(String a) => null; //# 216: continued
+  method217(covariant dynamic a) => null; //# 217: continued
+  method218(covariant num a) => null; //# 218: continued
+  method219(covariant int a) => null; //# 219: continued
+  method220(covariant String a) => null; //# 220: continued
+  method221(dynamic a) => null; //# 221: continued
+  method222(num a) => null; //# 222: continued
+  method223(int a) => null; //# 223: continued
+  method224(String a) => null; //# 224: continued
+  method225(covariant dynamic a) => null; //# 225: continued
+  method226(covariant num a) => null; //# 226: continued
+  method227(covariant int a) => null; //# 227: continued
+  method228(covariant String a) => null; //# 228: continued
+  method229(dynamic a) => null; //# 229: continued
+  method230(num a) => null; //# 230: continued
+  method231(int a) => null; //# 231: continued
+  method232(String a) => null; //# 232: continued
+  method233(covariant dynamic a) => null; //# 233: continued
+  method234(covariant num a) => null; //# 234: continued
+  method235(covariant int a) => null; //# 235: continued
+  method236(covariant String a) => null; //# 236: continued
+  method237(dynamic a) => null; //# 237: continued
+  method238(num a) => null; //# 238: continued
+  method239(int a) => null; //# 239: continued
+  method240(String a) => null; //# 240: continued
+  method244(covariant dynamic a) => null; //# 244: continued
+  method245(covariant num a) => null; //# 245: continued
+  method246(covariant int a) => null; //# 246: continued
+  method247(covariant String a) => null; //# 247: continued
+  method248(dynamic a) => null; //# 248: continued
+  method249(num a) => null; //# 249: continued
+  method250(int a) => null; //# 250: continued
+  method251(String a) => null; //# 251: continued
+  method252(covariant dynamic a) => null; //# 252: continued
+  method253(covariant num a) => null; //# 253: continued
+  method254(covariant int a) => null; //# 254: continued
+  method255(covariant String a) => null; //# 255: continued
+  method256(dynamic a) => null; //# 256: continued
+  method257(num a) => null; //# 257: continued
+  method258(int a) => null; //# 258: continued
+  method259(String a) => null; //# 259: continued
+  method260(covariant dynamic a) => null; //# 260: continued
+  method261(covariant num a) => null; //# 261: continued
+  method262(covariant int a) => null; //# 262: continued
+  method263(covariant String a) => null; //# 263: continued
+  method264(dynamic a) => null; //# 264: continued
+  method265(num a) => null; //# 265: continued
+  method266(int a) => null; //# 266: continued
+  method267(String a) => null; //# 267: continued
+  method269(covariant dynamic a) => null; //# 269: continued
+  method270(covariant num a) => null; //# 270: continued
+  method271(covariant int a) => null; //# 271: continued
+  method272(covariant String a) => null; //# 272: continued
+  method273(dynamic a) => null; //# 273: continued
+  method274(num a) => null; //# 274: continued
+  method275(int a) => null; //# 275: continued
+  method276(String a) => null; //# 276: continued
+  method277(covariant dynamic a) => null; //# 277: continued
+  method278(covariant num a) => null; //# 278: continued
+  method279(covariant int a) => null; //# 279: continued
+  method280(covariant String a) => null; //# 280: continued
+  method281(dynamic a) => null; //# 281: continued
+  method282(num a) => null; //# 282: continued
+  method283(int a) => null; //# 283: continued
+  method284(String a) => null; //# 284: continued
+  method287(covariant dynamic a) => null; //# 287: continued
+  method288(covariant num a) => null; //# 288: continued
+  method289(covariant int a) => null; //# 289: continued
+  method290(covariant String a) => null; //# 290: continued
+  method291(dynamic a) => null; //# 291: continued
+  method292(num a) => null; //# 292: continued
+  method293(int a) => null; //# 293: continued
+  method294(String a) => null; //# 294: continued
+  method295(covariant dynamic a) => null; //# 295: continued
+  method296(covariant num a) => null; //# 296: continued
+  method297(covariant int a) => null; //# 297: continued
+  method298(covariant String a) => null; //# 298: continued
+  method299(dynamic a) => null; //# 299: continued
+  method300(num a) => null; //# 300: continued
+  method301(int a) => null; //# 301: continued
+  method302(String a) => null; //# 302: continued
+  method303(covariant dynamic a) => null; //# 303: continued
+  method304(covariant num a) => null; //# 304: continued
+  method305(covariant int a) => null; //# 305: continued
+  method306(covariant String a) => null; //# 306: continued
+  method307(dynamic a) => null; //# 307: continued
+  method308(num a) => null; //# 308: continued
+  method309(int a) => null; //# 309: continued
+  method310(String a) => null; //# 310: continued
+  method312(covariant dynamic a) => null; //# 312: continued
+  method313(covariant num a) => null; //# 313: continued
+  method314(covariant int a) => null; //# 314: continued
+  method315(covariant String a) => null; //# 315: continued
+  method316(dynamic a) => null; //# 316: continued
+  method317(num a) => null; //# 317: continued
+  method318(int a) => null; //# 318: continued
+  method319(String a) => null; //# 319: continued
+  method320(covariant dynamic a) => null; //# 320: continued
+  method321(covariant num a) => null; //# 321: continued
+  method322(covariant int a) => null; //# 322: continued
+  method323(covariant String a) => null; //# 323: continued
+  method324(dynamic a) => null; //# 324: continued
+  method325(num a) => null; //# 325: continued
+  method326(int a) => null; //# 326: continued
+  method327(String a) => null; //# 327: continued
+  method328(covariant dynamic a) => null; //# 328: continued
+  method329(covariant num a) => null; //# 329: continued
+  method330(covariant int a) => null; //# 330: continued
+  method331(covariant String a) => null; //# 331: continued
+  method332(dynamic a) => null; //# 332: continued
+  method333(num a) => null; //# 333: continued
+  method334(int a) => null; //# 334: continued
+  method335(String a) => null; //# 335: continued
+  method337(covariant dynamic a) => null; //# 337: continued
+  method338(covariant num a) => null; //# 338: continued
+  method339(covariant int a) => null; //# 339: continued
+  method340(covariant String a) => null; //# 340: continued
+  method341(dynamic a) => null; //# 341: continued
+  method342(num a) => null; //# 342: continued
+  method343(int a) => null; //# 343: continued
+  method344(String a) => null; //# 344: continued
+  method347(covariant dynamic a) => null; //# 347: continued
+  method348(covariant num a) => null; //# 348: continued
+  method349(covariant int a) => null; //# 349: continued
+  method350(covariant String a) => null; //# 350: continued
+  method351(dynamic a) => null; //# 351: continued
+  method352(num a) => null; //# 352: continued
+  method353(int a) => null; //# 353: continued
+  method354(String a) => null; //# 354: continued
+  method355(covariant dynamic a) => null; //# 355: continued
+  method356(covariant num a) => null; //# 356: continued
+  method357(covariant int a) => null; //# 357: continued
+  method358(covariant String a) => null; //# 358: continued
+  method359(dynamic a) => null; //# 359: continued
+  method360(num a) => null; //# 360: continued
+  method361(int a) => null; //# 361: continued
+  method362(String a) => null; //# 362: continued
+  method365(covariant dynamic a) => null; //# 365: continued
+  method366(covariant num a) => null; //# 366: continued
+  method367(covariant int a) => null; //# 367: continued
+  method368(covariant String a) => null; //# 368: continued
+  method369(dynamic a) => null; //# 369: continued
+  method370(num a) => null; //# 370: continued
+  method371(int a) => null; //# 371: continued
+  method372(String a) => null; //# 372: continued
+}
diff --git a/tests/language_2/override_inheritance_setter_test.dart b/tests/language_2/override_inheritance_setter_test.dart
new file mode 100644
index 0000000..f709c75
--- /dev/null
+++ b/tests/language_2/override_inheritance_setter_test.dart
@@ -0,0 +1,32 @@
+main() {
+  new C();
+}
+
+class A {
+  void set setter1(num x) {} //# 001: compile-time error
+  void set setter2(num x) {} //# 002: compile-time error
+  void set setter3(num x) {} //# 003: ok
+  void set setter4(num x) {} //# 004: compile-time error
+  void set setter5(num x) {} //# 005: ok
+  void set setter6(num x) {} //# 006: compile-time error
+  void set setter7(num x) {} //# 007: ok
+}
+
+class B extends A {
+  void set setter1(covariant dynamic x) {} //# 001: continued
+  void set setter2(int x) {} //# 002: continued
+  void set setter3(covariant dynamic x) {} //# 003: continued
+  void set setter4(dynamic x) {} //# 004: continued
+  void set setter5(covariant dynamic x) {} //# 005: continued
+  covariant dynamic setter6; //# 006: continued
+  covariant dynamic setter7; //# 007: continued
+}
+
+class C extends B {
+  void set setter1(String x) {} //# 001: continued
+  void set setter3(num x) {} //# 003: continued
+  void set setter4(int x) {} //# 004: continued
+  void set setter5(int x) {} //# 005: continued
+  void set setter6(String x) {} //# 006: continued
+  void set setter7(int x) {} //# 007: continued
+}