library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:26:9: Error: The return type of the method 'F.y' is 'A', which does not match the return type, 'B', of the overridden method, 'D.y'.
//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
//  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
// Change to a subtype of 'B'.
//   A get y => throw '';
//         ^
// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:16:7: Context: This is the overridden method ('y').
//   get y => throw ''; // Inferred type: B
//       ^
//
// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:25:16: Error: The parameter 'value' of the method 'F.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'D.x'.
//  - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
//  - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
//   void set x(B value) {}
//                ^
// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:15:12: Context: This is the overridden method ('x').
//   void set x(value) {} // Inferred type: A
//            ^
//
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
    ;
  set x(self::A value) → void
    ;
  get y() → self::B
    ;
}
class D extends self::C {
  synthetic constructor •() → self::D
    ;
  set x(self::A value) → void
    ;
  get y() → self::B
    ;
}
class E extends self::D {
  synthetic constructor •() → self::E
    ;
  set x(self::A value) → void
    ;
  get y() → self::B
    ;
}
class F extends self::D {
  synthetic constructor •() → self::F
    ;
  set x(self::B value) → void
    ;
  get y() → self::A
    ;
}
static method main() → dynamic
  ;
