library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:90:16: Error: Can't inherit members that conflict with each other.
// abstract class Class extends Super
//                ^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:13:8: Context: This is one inherited member.
//   void extendedMethodMixedInGetter() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:43:11: Context: This is the other inherited member.
//   int get extendedMethodMixedInGetter => 0;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:93:11: Error: Can't declare a member that conflicts with an inherited one.
//   int get extendedMethodDeclaredGetter => 0;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:6:8: Context: This is the inherited member.
//   void extendedMethodDeclaredGetter() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:95:7: Error: Can't declare a member that conflicts with an inherited one.
//   int extendedMethodDeclaredField = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:8:8: Context: This is the inherited member.
//   void extendedMethodDeclaredField() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:96:8: Error: Can't declare a member that conflicts with an inherited one.
//   void extendedGetterDeclaredMethod() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:9:11: Context: This is the inherited member.
//   int get extendedGetterDeclaredMethod => 0;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:97:8: Error: Can't declare a member that conflicts with an inherited one.
//   void extendedSetterDeclaredMethod() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:10:12: Context: This is the inherited member.
//   void set extendedSetterDeclaredMethod(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:98:8: Error: Can't declare a member that conflicts with an inherited one.
//   void extendedFieldDeclaredMethod() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:11:7: Context: This is the inherited member.
//   int extendedFieldDeclaredMethod = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:100:11: Error: Can't declare a member that conflicts with an inherited one.
//   int get mixedInMethodDeclaredGetter => 0;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:29:8: Context: This is the inherited member.
//   void mixedInMethodDeclaredGetter() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:102:7: Error: Can't declare a member that conflicts with an inherited one.
//   int mixedInMethodDeclaredField = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:31:8: Context: This is the inherited member.
//   void mixedInMethodDeclaredField() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:103:8: Error: Can't declare a member that conflicts with an inherited one.
//   void mixedInGetterDeclaredMethod() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:32:11: Context: This is the inherited member.
//   int get mixedInGetterDeclaredMethod => 0;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:104:8: Error: Can't declare a member that conflicts with an inherited one.
//   void mixedInSetterDeclaredMethod() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:33:12: Context: This is the inherited member.
//   void set mixedInSetterDeclaredMethod(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:105:8: Error: Can't declare a member that conflicts with an inherited one.
//   void mixedInFieldDeclaredMethod() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:34:7: Context: This is the inherited member.
//   int mixedInFieldDeclaredMethod = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:107:11: Error: Can't declare a member that conflicts with an inherited one.
//   int get implementedMethodDeclaredGetter => 0;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:52:8: Context: This is the inherited member.
//   void implementedMethodDeclaredGetter() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:109:7: Error: Can't declare a member that conflicts with an inherited one.
//   int implementedMethodDeclaredField = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:54:8: Context: This is the inherited member.
//   void implementedMethodDeclaredField() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:110:8: Error: Can't declare a member that conflicts with an inherited one.
//   void implementedGetterDeclaredMethod() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:55:11: Context: This is the inherited member.
//   int get implementedGetterDeclaredMethod => 0;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:111:8: Error: Can't declare a member that conflicts with an inherited one.
//   void implementedSetterDeclaredMethod() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:56:12: Context: This is the inherited member.
//   void set implementedSetterDeclaredMethod(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:112:8: Error: Can't declare a member that conflicts with an inherited one.
//   void implementedFieldDeclaredMethod() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:57:7: Context: This is the inherited member.
//   int implementedFieldDeclaredMethod = 0;
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:115:12: Error: 'declaredMethodAndSetter' is already declared in this scope.
//   void set declaredMethodAndSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:114:8: Context: Previous declaration of 'declaredMethodAndSetter'.
//   void declaredMethodAndSetter() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:94:12: Error: Can't declare a member that conflicts with an inherited one.
//   void set extendedMethodDeclaredSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:7:8: Context: This is the inherited member.
//   void extendedMethodDeclaredSetter() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:101:12: Error: Can't declare a member that conflicts with an inherited one.
//   void set mixedInMethodDeclaredSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:30:8: Context: This is the inherited member.
//   void mixedInMethodDeclaredSetter() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:108:12: Error: Can't declare a member that conflicts with an inherited one.
//   void set implementedMethodDeclaredSetter(int value) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/conflict.dart:53:8: Context: This is the inherited member.
//   void implementedMethodDeclaredSetter() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

class Super extends core::Object {
  field core::int extendedFieldDeclaredMethod;
  field core::int extendedFieldMixedInMethod;
  field core::int extendedFieldImplementedMethod;
  synthetic constructor •() → self::Super
    ;
  method extendedMethodDeclaredGetter() → void
    ;
  method extendedMethodDeclaredSetter() → void
    ;
  method extendedMethodDeclaredField() → void
    ;
  get extendedGetterDeclaredMethod() → core::int
    ;
  set extendedSetterDeclaredMethod(core::int value) → void
    ;
  method extendedMethodMixedInGetter() → void
    ;
  method extendedMethodMixedInSetter() → void
    ;
  method extendedMethodMixedInField() → void
    ;
  get extendedGetterMixedInMethod() → core::int
    ;
  set extendedSetterMixedInMethod(core::int value) → void
    ;
  method extendedMethodImplementedGetter() → void
    ;
  method extendedMethodImplementedSetter() → void
    ;
  method extendedMethodImplementedField() → void
    ;
  get extendedGetterImplementedMethod() → core::int
    ;
  set extendedSetterImplementedMethod(core::int value) → void
    ;
}
class Mixin extends core::Object {
  field core::int mixedInFieldDeclaredMethod;
  field core::int mixedInFieldImplementedMethod;
  field core::int extendedMethodMixedInField;
  synthetic constructor •() → self::Mixin
    ;
  method mixedInMethodDeclaredGetter() → void
    ;
  method mixedInMethodDeclaredSetter() → void
    ;
  method mixedInMethodDeclaredField() → void
    ;
  get mixedInGetterDeclaredMethod() → core::int
    ;
  set mixedInSetterDeclaredMethod(core::int value) → void
    ;
  method mixedInMethodImplementedGetter() → void
    ;
  method mixedInMethodImplementedSetter() → void
    ;
  method mixedInMethodImplementedField() → void
    ;
  get mixedInGetterImplementedMethod() → core::int
    ;
  set mixedInSetterImplementedMethod(core::int value) → void
    ;
  get extendedMethodMixedInGetter() → core::int
    ;
  set extendedMethodMixedInSetter(core::int value) → void
    ;
  method extendedGetterMixedInMethod() → void
    ;
  method extendedSetterMixedInMethod() → void
    ;
  method extendedFieldMixedInMethod() → void
    ;
}
class Interface1 extends core::Object {
  field core::int implementedFieldDeclaredMethod;
  field core::int implementedFieldImplementedMethod;
  field core::int extendedMethodImplementedField;
  field core::int mixedInMethodImplementedField;
  synthetic constructor •() → self::Interface1
    ;
  method implementedMethodDeclaredGetter() → void
    ;
  method implementedMethodDeclaredSetter() → void
    ;
  method implementedMethodDeclaredField() → void
    ;
  get implementedGetterDeclaredMethod() → core::int
    ;
  set implementedSetterDeclaredMethod(core::int value) → void
    ;
  method implementedMethodImplementedGetter() → void
    ;
  method implementedMethodImplementedSetter() → void
    ;
  method implementedMethodImplementedField() → void
    ;
  get implementedGetterImplementedMethod() → core::int
    ;
  set implementedSetterImplementedMethod(core::int value) → void
    ;
  get extendedMethodImplementedGetter() → core::int
    ;
  set extendedMethodImplementedSetter(core::int value) → void
    ;
  method extendedGetterImplementedMethod() → void
    ;
  method extendedSetterImplementedMethod() → void
    ;
  method extendedFieldImplementedMethod() → void
    ;
  get mixedInMethodImplementedGetter() → core::int
    ;
  set mixedInMethodImplementedSetter(core::int value) → void
    ;
  method mixedInGetterImplementedMethod() → void
    ;
  method mixedInSetterImplementedMethod() → void
    ;
  method mixedInFieldImplementedMethod() → void
    ;
}
class Interface2 extends core::Object {
  field core::int implementedMethodImplementedField;
  synthetic constructor •() → self::Interface2
    ;
  get implementedMethodImplementedGetter() → core::int
    ;
  set implementedMethodImplementedSetter(core::int value) → void
    ;
  method implementedGetterImplementedMethod() → void
    ;
  method implementedSetterImplementedMethod() → void
    ;
  method implementedFieldImplementedMethod() → void
    ;
}
abstract class _Class&Super&Mixin = self::Super with self::Mixin /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Class&Super&Mixin
    : super self::Super::•()
    ;
  mixin-super-stub method mixedInMethodDeclaredSetter() → void
    return super.{self::Mixin::mixedInMethodDeclaredSetter}();
  mixin-super-stub get mixedInFieldDeclaredMethod() → core::int
    return super.{self::Mixin::mixedInFieldDeclaredMethod};
  mixin-super-stub set mixedInFieldDeclaredMethod(core::int value) → void
    return super.{self::Mixin::mixedInFieldDeclaredMethod} = value;
  mixin-super-stub get mixedInFieldImplementedMethod() → core::int
    return super.{self::Mixin::mixedInFieldImplementedMethod};
  mixin-super-stub set mixedInFieldImplementedMethod(core::int value) → void
    return super.{self::Mixin::mixedInFieldImplementedMethod} = value;
  mixin-super-stub get extendedMethodMixedInField() → core::int
    return super.{self::Mixin::extendedMethodMixedInField};
  mixin-super-stub set extendedMethodMixedInField(core::int value) → void
    return super.{self::Mixin::extendedMethodMixedInField} = value;
  mixin-super-stub method mixedInMethodDeclaredGetter() → void
    return super.{self::Mixin::mixedInMethodDeclaredGetter}();
  mixin-super-stub method mixedInMethodDeclaredField() → void
    return super.{self::Mixin::mixedInMethodDeclaredField}();
  mixin-super-stub get mixedInGetterDeclaredMethod() → core::int
    return super.{self::Mixin::mixedInGetterDeclaredMethod};
  mixin-super-stub method mixedInMethodImplementedGetter() → void
    return super.{self::Mixin::mixedInMethodImplementedGetter}();
  mixin-super-stub method mixedInMethodImplementedSetter() → void
    return super.{self::Mixin::mixedInMethodImplementedSetter}();
  mixin-super-stub method mixedInMethodImplementedField() → void
    return super.{self::Mixin::mixedInMethodImplementedField}();
  mixin-super-stub get mixedInGetterImplementedMethod() → core::int
    return super.{self::Mixin::mixedInGetterImplementedMethod};
  mixin-super-stub get extendedMethodMixedInGetter() → core::int
    return super.{self::Mixin::extendedMethodMixedInGetter};
  mixin-super-stub method extendedGetterMixedInMethod() → void
    return super.{self::Mixin::extendedGetterMixedInMethod}();
  mixin-super-stub method extendedSetterMixedInMethod() → void
    return super.{self::Mixin::extendedSetterMixedInMethod}();
  mixin-super-stub method extendedFieldMixedInMethod() → void
    return super.{self::Mixin::extendedFieldMixedInMethod}();
  mixin-super-stub set mixedInSetterDeclaredMethod(core::int value) → void
    return super.{self::Mixin::mixedInSetterDeclaredMethod} = value;
  mixin-super-stub set mixedInSetterImplementedMethod(core::int value) → void
    return super.{self::Mixin::mixedInSetterImplementedMethod} = value;
  mixin-super-stub set extendedMethodMixedInSetter(core::int value) → void
    return super.{self::Mixin::extendedMethodMixedInSetter} = value;
}
abstract class Class extends self::_Class&Super&Mixin implements self::Interface1, self::Interface2 {
  field core::int extendedMethodDeclaredField;
  field core::int mixedInMethodDeclaredField;
  field core::int implementedMethodDeclaredField;
  synthetic constructor •() → self::Class
    ;
  get extendedMethodDeclaredGetter() → core::int
    ;
  set extendedMethodDeclaredSetter(core::int value) → void
    ;
  method extendedGetterDeclaredMethod() → void
    ;
  method extendedSetterDeclaredMethod() → void
    ;
  method extendedFieldDeclaredMethod() → void
    ;
  get mixedInMethodDeclaredGetter() → core::int
    ;
  set mixedInMethodDeclaredSetter(core::int value) → void
    ;
  method mixedInGetterDeclaredMethod() → void
    ;
  method mixedInSetterDeclaredMethod() → void
    ;
  method mixedInFieldDeclaredMethod() → void
    ;
  get implementedMethodDeclaredGetter() → core::int
    ;
  set implementedMethodDeclaredSetter(core::int value) → void
    ;
  method implementedGetterDeclaredMethod() → void
    ;
  method implementedSetterDeclaredMethod() → void
    ;
  method implementedFieldDeclaredMethod() → void
    ;
  method declaredMethodAndSetter() → void
    ;
  set declaredMethodAndSetter(core::int value) → void
    ;
}
static method main() → dynamic
  ;
