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]) → void
    ;
  method f3({self::A? x}) → 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]) → void
    ;
  method f3({core::Object? x}) → 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]) → void
    ;
  method f3({self::B? x}) → void
    ;
  method f4() → core::Object?
    ;
}
static method main() → dynamic
  ;
