library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/override_check_basic.dart:24:13: Error: The parameter 'x' of the method 'E.f1' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f1'.
//  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
//  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
//   void f1(B x) {}
//             ^
// pkg/front_end/testcases/general/override_check_basic.dart:10:8: Context: This is the overridden method ('f1').
//   void f1(A x) {}
//        ^
//
// pkg/front_end/testcases/general/override_check_basic.dart:25:15: Error: The parameter 'x' of the method 'E.f2' has type 'B?', which does not match the corresponding type, 'A?', in the overridden method, 'C.f2'.
//  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
//  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
// Change to a supertype of 'A?', or, for a covariant parameter, a subtype.
//   void f2([B? x]) {}
//               ^
// pkg/front_end/testcases/general/override_check_basic.dart:11:8: Context: This is the overridden method ('f2').
//   void f2([A? x]) {}
//        ^
//
// pkg/front_end/testcases/general/override_check_basic.dart:26:15: Error: The parameter 'x' of the method 'E.f3' has type 'B?', which does not match the corresponding type, 'A?', in the overridden method, 'C.f3'.
//  - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
//  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
// Change to a supertype of 'A?', or, for a covariant parameter, a subtype.
//   void f3({B? x}) {}
//               ^
// pkg/front_end/testcases/general/override_check_basic.dart:12:8: Context: This is the overridden method ('f3').
//   void f3({A? x}) {}
//        ^
//
// pkg/front_end/testcases/general/override_check_basic.dart:27:11: Error: The return type of the method 'E.f4' is 'Object?', which does not match the return type, 'A?', of the overridden method, 'C.f4'.
//  - 'Object' is from 'dart:core'.
//  - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
// Change to a subtype of 'A?'.
//   Object? f4() {}
//           ^
// pkg/front_end/testcases/general/override_check_basic.dart:13:6: Context: This is the overridden method ('f4').
//   A? f4() {}
//      ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B
    ;
}
class C extends core::Object {
  synthetic constructor •() → self::C
    ;
  method f1(self::A x) → void
    ;
  method f2([self::A? x = null]) → void
    ;
  method f3({self::A? x = null}) → void
    ;
  method f4() → self::A?
    ;
}
class D extends self::C {
  synthetic constructor •() → self::D
    ;
  method f1(core::Object x) → void
    ;
  method f2([core::Object? x = null]) → void
    ;
  method f3({core::Object? x = null}) → void
    ;
  method f4() → self::B?
    ;
}
class E extends self::C {
  synthetic constructor •() → self::E
    ;
  method f1(self::B x) → void
    ;
  method f2([self::B? x = null]) → void
    ;
  method f3({self::B? x = null}) → void
    ;
  method f4() → core::Object?
    ;
}
static method main() → dynamic
  ;
