library;
//
// Problems in library:
//
// pkg/front_end/testcases/override_check_with_covariant_modifier.dart:23:28: Error: The parameter 'x' of the method 'D.f5' has type 'String', which does not match the corresponding type, 'A', in the overridden method, 'C.f5'.
//  - 'A' is from 'pkg/front_end/testcases/override_check_with_covariant_modifier.dart'.
// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
//   void f5(covariant String x) {}
//                            ^
// pkg/front_end/testcases/override_check_with_covariant_modifier.dart:14:8: Context: This is the overridden method ('f5').
//   void f5(covariant A x) {}
//        ^
//
// pkg/front_end/testcases/override_check_with_covariant_modifier.dart:22:13: Error: The parameter 'x' of the method 'D.f4' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f4'.
//  - 'B' is from 'pkg/front_end/testcases/override_check_with_covariant_modifier.dart'.
//  - 'A' is from 'pkg/front_end/testcases/override_check_with_covariant_modifier.dart'.
// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
//   void f4(B x) {} // Not covariant
//             ^
// pkg/front_end/testcases/override_check_with_covariant_modifier.dart:13:8: Context: This is the overridden method ('f4').
//   void f4(A x) {}
//        ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
}
class C extends core::Object {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  method f1(covariant self::A x) → void {}
  method f2(self::A x) → void {}
  method f3(covariant self::A x) → void {}
  method f4(self::A x) → void {}
  method f5(covariant self::A x) → void {}
  method f6(covariant self::B x) → void {}
}
class D extends self::C {
  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 f4(self::B x) → void {}
  method f5(covariant core::String x) → void {}
  method f6(covariant self::A x) → void {}
}
static method main() → dynamic {}
