library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:12: Error: The type 'int?' of the inherited getter 'B1.property6' is not a subtype of the type 'int' of the setter 'B2.property6'.
//   void set property6(int i); // error
//            ^^^^^^^^^
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the declaration of the getter 'B1.property6'.
//   late final int? property6;
//                   ^^^^^^^^^
//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:32:26: Error: The parameter 'i' of the method 'B2.property6' has type 'int', which does not match the corresponding type, 'int?', in the overridden method, 'B1.property6'.
// Change to a supertype of 'int?', or, for a covariant parameter, a subtype.
//   void set property6(int i); // error
//                          ^
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:20:19: Context: This is the overridden method ('property6').
//   late final int? property6;
//                   ^
//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The type 'int?' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
//   int? get property6; // error
//            ^^^^^^^^^
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the declaration of the setter 'C1.property6'.
//   late int property6;
//            ^^^^^^^^^
//
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:52:12: Error: The return type of the method 'C2.property6' is 'int?', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
//   int? get property6; // error
//            ^
// pkg/front_end/testcases/late_lowering/getter_vs_setter_type.dart:40:12: Context: This is the overridden method ('property6').
//   late int property6;
//            ^
//
import self as self;
import "dart:core" as core;

abstract class A extends core::Object {
  field core::int? _#A#property4;
  field core::bool _#A#property4#isSet;
  field core::int? _#A#property5;
  field core::bool _#A#property5#isSet;
  field core::int? _#A#property6;
  field core::bool _#A#property6#isSet;
  constructor •(core::int property4, core::int? property5, core::int property6) → self::A
    ;
  get property4() → core::int;
  set property4(core::int #t1) → void;
  get property5() → core::int?;
  set property5(core::int? #t2) → void;
  get property6() → core::int;
  set property6(covariant core::int #t3) → void;
}
abstract class B1 extends core::Object {
  field core::int? _#B1#property4;
  field core::bool _#B1#property4#isSet;
  field core::int? _#B1#property5;
  field core::bool _#B1#property5#isSet;
  field core::int? _#B1#property6;
  field core::bool _#B1#property6#isSet;
  constructor •(core::int property4, core::int property5, core::int? property6) → self::B1
    ;
  get property4() → core::int;
  set property4(core::int #t4) → void;
  get property5() → core::int;
  set property5(core::int #t5) → void;
  get property6() → core::int?;
  set property6(core::int? #t6) → void;
}
abstract class B2 extends core::Object implements self::B1 {
  synthetic constructor •() → self::B2
    ;
  abstract set property4(core::int i) → void;
  abstract set property5(core::int? i) → void;
  abstract set property6(core::int i) → void;
}
abstract class C1 extends core::Object {
  field core::int? _#C1#property4;
  field core::bool _#C1#property4#isSet;
  field core::int? _#C1#property5;
  field core::bool _#C1#property5#isSet;
  field core::int? _#C1#property6;
  field core::bool _#C1#property6#isSet;
  constructor •(core::int property4, core::int property5, core::int property6) → self::C1
    ;
  get property4() → core::int;
  set property4(core::int #t7) → void;
  get property5() → core::int;
  set property5(core::int #t8) → void;
  get property6() → core::int;
  set property6(core::int #t9) → void;
}
abstract class C2 extends core::Object implements self::C1 {
  synthetic constructor •() → self::C2
    ;
  abstract get property4() → core::int;
  abstract get property5() → core::int;
  abstract get property6() → core::int?;
}
static method main() → dynamic
  ;
