library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue48402.dart:19:17: Error: Can't declare a member that conflicts with an inherited one.
//   static String member1 = "member1"; // Error.
//                 ^^^^^^^
// pkg/front_end/testcases/general/issue48402.dart:6:14: Context: This is the inherited member.
//   String get member1;
//              ^^^^^^^
//
// pkg/front_end/testcases/general/issue48402.dart:22:15: Error: Can't declare a member that conflicts with an inherited one.
//   static void procedure() {} // Error.
//               ^^^^^^^^^
// pkg/front_end/testcases/general/issue48402.dart:7:14: Context: This is the inherited member.
//   String get procedure;
//              ^^^^^^^^^
//
// pkg/front_end/testcases/general/issue48402.dart:26:17: Error: Can't declare a member that conflicts with an inherited one.
//   static String fieldSetter = "fieldSetter"; // Error.
//                 ^^^^^^^^^^^
// pkg/front_end/testcases/general/issue48402.dart:9:12: Context: This is the inherited member.
//   void set fieldSetter(String value);
//            ^^^^^^^^^^^
//
// pkg/front_end/testcases/general/issue48402.dart:28:18: Error: Can't declare a member that conflicts with an inherited one.
//   static num get setterVsGetter => 0; // Error.
//                  ^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/issue48402.dart:10:12: Context: This is the inherited member.
//   void set setterVsGetter(num value);
//            ^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/issue48402.dart:24:19: Error: Can't declare a member that conflicts with an inherited one.
//   static void set setter(String value) {} // Error.
//                   ^^^^^^
// pkg/front_end/testcases/general/issue48402.dart:8:12: Context: This is the inherited member.
//   void set setter(String value);
//            ^^^^^^
//
// pkg/front_end/testcases/general/issue48402.dart:30:19: Error: Can't declare a member that conflicts with an inherited one.
//   static void set getterVsSetter(double value) {} // Error.
//                   ^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/issue48402.dart:11:14: Context: This is the inherited member.
//   double get getterVsSetter;
//              ^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

abstract class I extends core::Object {
  synthetic constructor •() → self::I
    : super core::Object::•()
    ;
  abstract get member1() → core::String;
  abstract get procedure() → core::String;
  abstract set setter(core::String value) → void;
  abstract set fieldSetter(core::String value) → void;
  abstract set setterVsGetter(core::num value) → void;
  abstract get getterVsSetter() → core::double;
}
class A extends core::Object implements self::I {
  static field core::String member5 = "member5";
  static field core::String member4 = "member4";
  static field core::String member3 = "member3";
  static field core::String member1 = "member1";
  static field core::String member2 = "member2";
  static field core::String fieldSetter = "fieldSetter";
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  static method procedure() → void {}
  static set setter(core::String value) → void {}
  static get setterVsGetter() → core::num
    return 0;
  static set getterVsSetter(core::double value) → void {}
  method noSuchMethod(core::Invocation i) → dynamic
    return "foo";
}
static method main() → dynamic {}
