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%>
    ;
  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, core::num y}) → void;
  abstract method method6b({core::num y, core::int x}) → void;
  method method7a(core::Object? o, {core::Object? named}) → 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%>
    ;
  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, core::num y}) → void;
  abstract method method6b({core::int x, core::Object y}) → void;
  abstract method method7a(FutureOr<dynamic>o, {FutureOr<dynamic>named}) → 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;
  final field core::int? field1b;
  final field invalid-type field1c;
  final field core::num? field2a;
  final field core::num? field2b;
  final field invalid-type field2c;
  final field core::int? field3a;
  final field core::int? field3b;
  final field invalid-type field3c;
  field core::num? field4a;
  field invalid-type field4b;
  synthetic constructor •() → self::C
    ;
  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]) → 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]) → void;
  abstract method method5a(invalid-type x, invalid-type y) → void;
  abstract method method5b(core::num x, core::num y, [invalid-type z]) → void;
  abstract method method6a({core::Object x, core::num y}) → void;
  abstract method method6b({core::int x, core::Object y, dynamic z}) → void;
  abstract method method7a(core::Object? o, {core::Object? named}) → 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
  ;
