library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/hierarchy/static.dart:58:15: Error: Can't declare a member that conflicts with an inherited one.
//   static void extendedInstanceDeclaredStaticMethod() {}
//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy/static.dart:7:8: Context: This is the inherited member.
//   void extendedInstanceDeclaredStaticMethod() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/hierarchy/static.dart:67:18: Error: Can't declare a member that conflicts with an inherited one.
//   static int get extendedInstanceSetterDeclaredStaticGetter => 0;
//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy/static.dart:16:12: Context: This is the inherited member.
//   void set extendedInstanceSetterDeclaredStaticGetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/hierarchy/static.dart:70:15: Error: Can't declare a member that conflicts with an inherited one.
//   static void mixedInInstanceDeclaredStaticMethod() {}
//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy/static.dart:27:8: Context: This is the inherited member.
//   void mixedInInstanceDeclaredStaticMethod() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/hierarchy/static.dart:73:15: Error: Can't declare a member that conflicts with an inherited one.
//   static void implementedInstanceDeclaredStaticMethod() {}
//               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy/static.dart:38:8: Context: This is the inherited member.
//   void implementedInstanceDeclaredStaticMethod() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/hierarchy/static.dart:82:18: Error: Can't declare a member that conflicts with an inherited one.
//   static int get implementedInstanceSetterDeclaredStaticGetter => 0;
//                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy/static.dart:47:12: Context: This is the inherited member.
//   void set implementedInstanceSetterDeclaredStaticGetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/hierarchy/static.dart:61:19: Error: Can't declare a member that conflicts with an inherited one.
//   static void set extendedInstanceDeclaredStaticSetter(int value) {}
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy/static.dart:10:12: Context: This is the inherited member.
//   void set extendedInstanceDeclaredStaticSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/hierarchy/static.dart:64:19: Error: Can't declare a member that conflicts with an inherited one.
//   static void set extendedInstanceGetterDeclaredStaticSetter(int value) {}
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy/static.dart:13:11: Context: This is the inherited member.
//   int get extendedInstanceGetterDeclaredStaticSetter => 0;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/hierarchy/static.dart:76:19: Error: Can't declare a member that conflicts with an inherited one.
//   static void set implementedInstanceDeclaredStaticSetter(int value) {}
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy/static.dart:41:12: Context: This is the inherited member.
//   void set implementedInstanceDeclaredStaticSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/hierarchy/static.dart:79:19: Error: Can't declare a member that conflicts with an inherited one.
//   static void set implementedInstanceGetterDeclaredStaticSetter(int value) {}
//                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy/static.dart:44:11: Context: This is the inherited member.
//   int get implementedInstanceGetterDeclaredStaticSetter => 0;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

class Super extends core::Object {
  synthetic constructor •() → self::Super
    : super core::Object::•()
    ;
  static method extendedStaticDeclaredInstanceMethod() → void {}
  method extendedInstanceDeclaredStaticMethod() → void {}
  static set extendedStaticDeclaredInstanceSetter(core::int value) → void {}
  set extendedInstanceDeclaredStaticSetter(core::int value) → void {}
  static get extendedStaticGetterDeclaredInstanceSetter() → core::int
    return 0;
  get extendedInstanceGetterDeclaredStaticSetter() → core::int
    return 0;
  static set extendedStaticSetterDeclaredInstanceGetter(core::int value) → void {}
  set extendedInstanceSetterDeclaredStaticGetter(core::int value) → void {}
  static method extendedStaticMixedInInstanceMethod() → void {}
  method extendedInstanceMixedInStaticMethod() → void {}
  static method extendedStaticImplementedInstanceMethod() → void {}
  method extendedInstanceImplementedStaticMethod() → void {}
}
abstract class Mixin extends core::Object /*isMixinDeclaration*/  {
  static method mixedInStaticDeclaredInstanceMethod() → void {}
  method mixedInInstanceDeclaredStaticMethod() → void {}
  static method mixedInStaticImplementedInstanceMethod() → void {}
  method mixedInInstanceImplementedStaticMethod() → void {}
  method extendedStaticMixedInInstanceMethod() → void {}
  static method extendedInstanceMixedInStaticMethod() → void {}
}
class Interface extends core::Object {
  synthetic constructor •() → self::Interface
    : super core::Object::•()
    ;
  static method implementedStaticDeclaredInstanceMethod() → void {}
  method implementedInstanceDeclaredStaticMethod() → void {}
  static set implementedStaticDeclaredInstanceSetter(core::int value) → void {}
  set implementedInstanceDeclaredStaticSetter(core::int value) → void {}
  static get implementedStaticGetterDeclaredInstanceSetter() → core::int
    return 0;
  get implementedInstanceGetterDeclaredStaticSetter() → core::int
    return 0;
  static set implementedStaticSetterDeclaredInstanceGetter(core::int value) → void {}
  set implementedInstanceSetterDeclaredStaticGetter(core::int value) → void {}
  method extendedStaticImplementedInstanceMethod() → void {}
  static method extendedInstanceImplementedStaticMethod() → void {}
  method mixedInStaticImplementedInstanceMethod() → void {}
  static method mixedInInstanceImplementedStaticMethod() → void {}
}
abstract class Class extends self::_Class&Super&Mixin implements self::Interface {
  synthetic constructor •() → self::Class
    : super self::_Class&Super&Mixin::•()
    ;
  method extendedStaticDeclaredInstanceMethod() → void {}
  static method extendedInstanceDeclaredStaticMethod() → void {}
  set extendedStaticDeclaredInstanceSetter(core::int value) → void {}
  static set extendedInstanceDeclaredStaticSetter(core::int value) → void {}
  set extendedStaticGetterDeclaredInstanceSetter(core::int value) → void {}
  static set extendedInstanceGetterDeclaredStaticSetter(core::int value) → void {}
  get extendedStaticSetterDeclaredInstanceGetter() → core::int
    return 0;
  static get extendedInstanceSetterDeclaredStaticGetter() → core::int
    return 0;
  method mixedInStaticDeclaredInstanceMethod() → void {}
  static method mixedInInstanceDeclaredStaticMethod() → void {}
  method implementedStaticDeclaredInstanceMethod() → void {}
  static method implementedInstanceDeclaredStaticMethod() → void {}
  set implementedStaticDeclaredInstanceSetter(core::int value) → void {}
  static set implementedInstanceDeclaredStaticSetter(core::int value) → void {}
  set implementedStaticGetterDeclaredInstanceSetter(core::int value) → void {}
  static set implementedInstanceGetterDeclaredStaticSetter(core::int value) → void {}
  get implementedStaticSetterDeclaredInstanceGetter() → core::int
    return 0;
  static get implementedInstanceSetterDeclaredStaticGetter() → core::int
    return 0;
}
abstract class _Class&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
  synthetic constructor •() → self::_Class&Super&Mixin
    : super self::Super::•()
    ;
  method mixedInInstanceDeclaredStaticMethod() → void {}
  method mixedInInstanceImplementedStaticMethod() → void {}
  method extendedStaticMixedInInstanceMethod() → void {}
}
static method main() → dynamic {}
