library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/override_inference.dart:114:17: Error: Can't infer a type for 'x' as the overridden members don't have a combined signature.
// Try adding an explicit type.
//   void method1c(x); // error
//                 ^
// pkg/front_end/testcases/nnbd/override_inference.dart:10:8: Context: This is one of the overridden members.
//   void method1c(int x);
//        ^^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:62:8: Context: This is one of the overridden members.
//   void method1c(String x);
//        ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/override_inference.dart:115:3: Error: Can't infer a return type for 'method1d' as the overridden members don't have a combined signature.
// Try adding an explicit type.
//   method1d(); // error
//   ^^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:11:10: Context: This is one of the overridden members.
//   String method1d();
//          ^^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:63:7: Context: This is one of the overridden members.
//   int method1d();
//       ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/override_inference.dart:122:8: Error: Can't infer types for 'method5a' as the overridden members don't have a combined signature.
// Try adding explicit types.
//   void method5a(x, y); // error
//        ^^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:18:8: Context: This is one of the overridden members.
//   void method5a(int x, num y);
//        ^^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:70:8: Context: This is one of the overridden members.
//   void method5a(num x, int y);
//        ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/override_inference.dart:123:32: Error: Can't infer a type for 'z' as the overridden members don't have a combined signature.
// Try adding an explicit type.
//   void method5b(num x, num y, [z]); // error
//                                ^
// pkg/front_end/testcases/nnbd/override_inference.dart:19:8: Context: This is one of the overridden members.
//   void method5b(int x, num y);
//        ^^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:71:8: Context: This is one of the overridden members.
//   void method5b(num x, int y);
//        ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/override_inference.dart:130:7: Error: Can't infer a return type for 'getter1c' as the overridden members don't have a combined signature.
// Try adding an explicit type.
//   get getter1c; // error
//       ^^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:26:14: Context: This is one of the overridden members.
//   String get getter1c;
//              ^^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:78:11: Context: This is one of the overridden members.
//   int get getter1c;
//           ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/override_inference.dart:142:9: Error: Can't infer a type for 'field1c' as the overridden members don't have a combined signature.
// Try adding an explicit type.
//   final field1c = null; // error
//         ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:40:12: Context: This is one of the overridden members.
//   int? get field1c;
//            ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:92:15: Context: This is one of the overridden members.
//   double? get field1c;
//               ^^^^^^^
//
// pkg/front_end/testcases/nnbd/override_inference.dart:146:9: Error: Can't infer a type for 'field2c' as the overridden members don't have a combined signature.
// Try adding an explicit type.
//   final field2c = null; // error
//         ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
//   void set field2c(int? value);
//            ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
//   void set field2c(double? value);
//            ^^^^^^^
//
// pkg/front_end/testcases/nnbd/override_inference.dart:150:9: Error: Can't infer a type for 'field3c' as the overridden members don't have a combined signature.
// Try adding an explicit type.
//   final field3c = null; // error
//         ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:48:12: Context: This is one of the overridden members.
//   int? get field3c;
//            ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:100:15: Context: This is one of the overridden members.
//   double? get field3c;
//               ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:52:12: Context: This is one of the overridden members.
//   void set field3c(Object? value);
//            ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:104:12: Context: This is one of the overridden members.
//   void set field3c(Object? value);
//            ^^^^^^^
//
// pkg/front_end/testcases/nnbd/override_inference.dart:153:7: Error: Can't infer a type for 'field4b' as the overridden members don't have a combined signature.
// Try adding an explicit type.
//   var field4b = null; // error
//       ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:55:12: Context: This is one of the overridden members.
//   num? get field4b;
//            ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:107:12: Context: This is one of the overridden members.
//   num? get field4b;
//            ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:56:12: Context: This is one of the overridden members.
//   void set field4b(Object? value);
//            ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:108:12: Context: This is one of the overridden members.
//   void set field4b(Object? value);
//            ^^^^^^^
//
// pkg/front_end/testcases/nnbd/override_inference.dart:136:12: Error: Can't infer a return type for 'setter1c' as the overridden members don't have a combined signature.
// Try adding an explicit type.
//   void set setter1c(x); // error
//            ^^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:33:12: Context: This is one of the overridden members.
//   void set setter1c(String x);
//            ^^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:85:12: Context: This is one of the overridden members.
//   void set setter1c(int x);
//            ^^^^^^^^
//
// pkg/front_end/testcases/nnbd/override_inference.dart:111:16: Error: Class 'C' inherits multiple members named 'field2c' with incompatible signatures.
// Try adding a declaration of 'field2c' to 'C'.
// abstract class C implements A<int>, B<num> {
//                ^
// pkg/front_end/testcases/nnbd/override_inference.dart:44:12: Context: This is one of the overridden members.
//   void set field2c(int? value);
//            ^^^^^^^
// pkg/front_end/testcases/nnbd/override_inference.dart:96:12: Context: This is one of the overridden members.
//   void set field2c(double? value);
//            ^^^^^^^
//
import self as self;
import "dart:core" as core;

import "dart:async";

abstract class A<AT extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::A<self::A::AT%>
    : super core::Object::•()
    ;
  abstract method method1a(core::Object x) → core::String;
  abstract method method1b(core::String x) → core::Object;
  abstract method method1c(core::int x) → void;
  abstract method method1d() → core::String;
  abstract method method2a(core::Object? x) → void;
  abstract method method2b(dynamic x) → void;
  abstract method method3a<AT3a extends core::Object? = dynamic>(self::A::method3a::AT3a% x) → void;
  abstract method method3b<AT3b extends core::Object? = dynamic>(self::A::method3b::AT3b% x) → void;
  abstract method method4a<AT4a extends core::Object? = dynamic>(self::A::method4a::AT4a% x, covariant-by-class self::A::AT% y) → void;
  abstract method method4b<AT4b extends core::Object? = dynamic>(self::A::method4b::AT4b% x, covariant-by-class self::A::AT% y) → void;
  abstract method method5a(core::int x, core::num y) → void;
  abstract method method5b(core::int x, core::num y) → void;
  abstract method method6a({core::int x = #C1, core::num y = #C1}) → void;
  abstract method method6b({core::num y = #C1, core::int x = #C1}) → void;
  method method7a(core::Object? o, {core::Object? named = #C1}) → core::Object? {}
  abstract get getter1a() → core::Object;
  abstract get getter1b() → core::String;
  abstract get getter1c() → core::String;
  abstract set getter1d(core::String x) → void;
  abstract get getter1e() → core::int;
  abstract set getter1e(core::int x) → void;
  abstract set setter1a(core::Object x) → void;
  abstract set setter1b(core::String x) → void;
  abstract set setter1c(core::String x) → void;
  abstract get setter1d() → core::String;
  abstract get setter1e() → core::int;
  abstract set setter1e(core::int x) → void;
  abstract get field1a() → core::int?;
  abstract get field1b() → core::num?;
  abstract get field1c() → core::int?;
  abstract set field2a(core::int? value) → void;
  abstract set field2b(core::num? value) → void;
  abstract set field2c(core::int? value) → void;
  abstract get field3a() → core::int?;
  abstract get field3b() → core::num?;
  abstract get field3c() → core::int?;
  abstract set field3a(core::Object? value) → void;
  abstract set field3b(core::Object? value) → void;
  abstract set field3c(core::Object? value) → void;
  abstract get field4a() → core::num?;
  abstract get field4b() → core::num?;
  abstract set field4b(core::Object? value) → void;
}
abstract class B<BT extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::B<self::B::BT%>
    : super core::Object::•()
    ;
  abstract method method1a(core::String x) → core::Object;
  abstract method method1b(core::Object x) → core::String;
  abstract method method1c(core::String x) → void;
  abstract method method1d() → core::int;
  abstract method method2a(dynamic x) → void;
  abstract method method2b(core::Object? x) → void;
  abstract method method3a<BT3a extends core::Object? = dynamic>(self::B::method3a::BT3a% x) → void;
  abstract method method3b<BT3b extends core::Object? = dynamic>(self::B::method3b::BT3b% x) → void;
  abstract method method4a<BT4a extends core::Object? = dynamic>(self::B::method4a::BT4a% x, covariant-by-class self::B::BT% y) → void;
  abstract method method4b<BT4b extends core::Object? = dynamic>(self::B::method4b::BT4b% x, covariant-by-class self::B::BT% y) → void;
  abstract method method5a(core::num x, core::int y) → void;
  abstract method method5b(core::num x, core::int y) → void;
  abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
  abstract method method6b({core::int x = #C1, core::Object y = #C1}) → void;
  abstract method method7a(FutureOr<dynamic>o, {FutureOr<dynamic>named = #C1}) → FutureOr<dynamic>;
  abstract get getter1a() → core::String;
  abstract get getter1b() → core::Object;
  abstract get getter1c() → core::int;
  abstract set getter1d(core::Object x) → void;
  abstract get getter1e() → core::num;
  abstract set getter1e(core::Object x) → void;
  abstract set setter1a(core::String x) → void;
  abstract set setter1b(core::Object x) → void;
  abstract set setter1c(core::int x) → void;
  abstract get setter1d() → core::Object;
  abstract get setter1e() → core::num;
  abstract set setter1e(core::Object x) → void;
  abstract get field1a() → core::num?;
  abstract get field1b() → core::int?;
  abstract get field1c() → core::double?;
  abstract set field2a(core::num? value) → void;
  abstract set field2b(core::int? value) → void;
  abstract set field2c(core::double? value) → void;
  abstract get field3a() → core::num?;
  abstract get field3b() → core::int?;
  abstract get field3c() → core::double?;
  abstract set field3a(core::Object? value) → void;
  abstract set field3b(core::Object? value) → void;
  abstract set field3c(core::Object? value) → void;
  abstract set field4a(core::num? value) → void;
  abstract get field4b() → core::num?;
  abstract set field4b(core::Object? value) → void;
}
abstract class C extends core::Object implements self::A<core::int>, self::B<core::num> {
  final field core::int? field1a = null;
  final field core::int? field1b = null;
  final field invalid-type field1c = null;
  final field core::num? field2a = null;
  final field core::num? field2b = null;
  final field invalid-type field2c = null;
  final field core::int? field3a = null;
  final field core::int? field3b = null;
  final field invalid-type field3c = null;
  field core::num? field4a = null;
  field invalid-type field4b = null;
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  abstract method method1a(core::Object x) → core::String;
  abstract method method1b(core::Object x) → core::String;
  abstract method method1c(invalid-type x) → void;
  abstract method method1d() → invalid-type;
  abstract method method2a(core::Object? x) → void;
  abstract method method2b(core::Object? x) → void;
  abstract method method3a<CT3a extends core::Object? = dynamic>(self::C::method3a::CT3a% x) → void;
  abstract method method3b<CT3b extends core::Object? = dynamic>(self::C::method3b::CT3b% x, [dynamic y = #C1]) → void;
  abstract method method4a<CT4a extends core::Object? = dynamic>(self::C::method4a::CT4a% x, covariant-by-class core::num y) → void;
  abstract method method4b<CT4b extends core::Object? = dynamic>(self::C::method4b::CT4b% x, covariant-by-class core::num y, [dynamic z = #C1]) → void;
  abstract method method5a(invalid-type x, invalid-type y) → void;
  abstract method method5b(core::num x, core::num y, [invalid-type z = #C1]) → void;
  abstract method method6a({core::Object x = #C1, core::num y = #C1}) → void;
  abstract method method6b({core::int x = #C1, core::Object y = #C1, dynamic z = #C1}) → void;
  abstract method method7a(core::Object? o, {core::Object? named = #C1}) → core::Object?;
  abstract get getter1a() → core::String;
  abstract get getter1b() → core::String;
  abstract get getter1c() → invalid-type;
  abstract get getter1d() → core::Object;
  abstract get getter1e() → core::int;
  abstract set setter1a(core::Object x) → void;
  abstract set setter1b(core::Object x) → void;
  abstract set setter1c(invalid-type x) → void;
  abstract set setter1d(core::String x) → void;
  abstract set setter1e(core::Object x) → void;
  abstract member-signature set getter1d(core::Object x) → void; -> self::B::getter1d
  abstract member-signature set getter1e(core::Object x) → void; -> self::B::getter1e
  abstract member-signature set field2a(core::num? value) → void; -> self::B::field2a
}
static method main() → dynamic {}

constants  {
  #C1 = null
}
