library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:12:11: Error: The type 'num' of the getter 'A.property3' is not a subtype of the type 'int' of the setter 'A.property3'.
//   num get property3; // error
//           ^^^^^^^^^
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:13:12: Context: This is the declaration of the setter 'A.property3'.
//   void set property3(int i);
//            ^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:43:12: Error: The type 'num' of the inherited getter 'B1.property3' is not a subtype of the type 'int' of the setter 'B2.property3'.
//   void set property3(int i); // error
//            ^^^^^^^^^
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:27:11: Context: This is the declaration of the getter 'B1.property3'.
//   num get property3;
//           ^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:49:12: Error: The type 'num' of the inherited field '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/nnbd/getter_vs_setter_type.dart:33:13: Context: This is the declaration of the field 'B1.property6'.
//   final num property6;
//             ^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:71:11: Error: The type 'num' of the getter 'C2.property3' is not a subtype of the type 'int' of the inherited setter 'C1.property3'.
//   num get property3; // error
//           ^^^^^^^^^
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:57:12: Context: This is the declaration of the setter 'C1.property3'.
//   void set property3(int i);
//            ^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:79:11: Error: The return type of the method 'C2.property6' is 'num', which does not match the return type, 'int', of the overridden method, 'C1.property6'.
// Change to a subtype of 'int'.
//   num get property6; // error
//           ^
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:63:7: Context: This is the overridden method ('property6').
//   int property6 = 0;
//       ^
//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:79:11: Error: The type 'num' of the getter 'C2.property6' is not a subtype of the type 'int' of the inherited setter 'C1.property6'.
//   num get property6; // error
//           ^^^^^^^^^
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:63:7: Context: This is the declaration of the setter 'C1.property6'.
//   int property6 = 0;
//       ^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:98:16: Error: The type 'num' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
// abstract class D3 implements D1, D2 /* error on property3 */ {}
//                ^
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:87:11: Context: This is the declaration of the getter 'D1.property3'.
//   num get property3;
//           ^^^^^^^^^
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:95:12: Context: This is the declaration of the setter 'D2.property3'.
//   void set property3(int i);
//            ^^^^^^^^^
//
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:100:16: Error: The type 'num' of the inherited getter 'D1.property3' is not a subtype of the type 'int' of the inherited setter 'D2.property3'.
// abstract class D4 implements D3 /* no need for error on property3 */ {}
//                ^
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:87:11: Context: This is the declaration of the getter 'D1.property3'.
//   num get property3;
//           ^^^^^^^^^
// pkg/front_end/testcases/nnbd/getter_vs_setter_type.dart:95:12: Context: This is the declaration of the setter 'D2.property3'.
//   void set property3(int i);
//            ^^^^^^^^^
//
import self as self;
import "dart:core" as core;

abstract class A extends core::Object {
  field core::int property4 = 0;
  field core::int property5 = 0;
  covariant field core::num property6 = 0;
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  abstract get property1() → core::int;
  abstract set property1(core::int i) → void;
  abstract get property2() → core::int;
  abstract set property2(core::int i) → void;
  abstract get property3() → core::num;
  abstract set property3(core::int i) → void;
}
abstract class B1 extends core::Object {
  final field core::int property4;
  final field core::int property5;
  final field core::num property6;
  constructor •(core::int property4, core::int property5, core::num property6) → self::B1
    : self::B1::property4 = property4, self::B1::property5 = property5, self::B1::property6 = property6, super core::Object::•()
    ;
  abstract get property1() → core::int;
  abstract get property2() → core::int;
  abstract get property3() → core::num;
}
abstract class B2 extends core::Object implements self::B1 {
  synthetic constructor •() → self::B2
    : super core::Object::•()
    ;
  abstract set property1(core::int i) → void;
  abstract set property2(core::num i) → void;
  abstract set property3(core::int i) → void;
  abstract set property4(core::int i) → void;
  abstract set property5(core::num i) → void;
  abstract set property6(core::int i) → void;
}
abstract class C1 extends core::Object {
  field core::int property4 = 0;
  field core::num property5 = 0;
  field core::int property6 = 0;
  synthetic constructor •() → self::C1
    : super core::Object::•()
    ;
  abstract set property1(core::int i) → void;
  abstract set property2(core::num i) → void;
  abstract set property3(core::int i) → void;
}
abstract class C2 extends core::Object implements self::C1 {
  synthetic constructor •() → self::C2
    : super core::Object::•()
    ;
  abstract get property1() → core::int;
  abstract get property2() → core::int;
  abstract get property3() → core::num;
  abstract get property4() → core::int;
  abstract get property5() → core::int;
  abstract get property6() → core::num;
}
abstract class D1 extends core::Object {
  synthetic constructor •() → self::D1
    : super core::Object::•()
    ;
  abstract get property1() → core::int;
  abstract get property2() → core::int;
  abstract get property3() → core::num;
}
abstract class D2 extends core::Object {
  synthetic constructor •() → self::D2
    : super core::Object::•()
    ;
  abstract set property1(core::int i) → void;
  abstract set property2(core::num i) → void;
  abstract set property3(core::int i) → void;
}
abstract class D3 extends core::Object implements self::D1, self::D2 {
  synthetic constructor •() → self::D3
    : super core::Object::•()
    ;
}
abstract class D4 extends core::Object implements self::D3 {
  synthetic constructor •() → self::D4
    : super core::Object::•()
    ;
}
static method main() → dynamic {}
