library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: 'A1' can't be used in both 'extends' and 'implements' clauses.
// Try removing one of the occurrences.
// class A6 extends A1 implements A1 {}
//       ^
//
// pkg/front_end/testcases/general/hierarchy.dart:24:7: Error: The non-abstract class 'A6' is missing implementations for these members:
//  - A1.extendedInterfaceMember
// Try to either
//  - provide an implementation,
//  - inherit an implementation from a superclass or mixin,
//  - mark the class as abstract, or
//  - provide a 'noSuchMethod' implementation.
//
// class A6 extends A1 implements A1 {}
//       ^^
// pkg/front_end/testcases/general/hierarchy.dart:7:8: Context: 'A1.extendedInterfaceMember' is defined here.
//   void extendedInterfaceMember();
//        ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/hierarchy.dart:41:7: Error: The non-abstract class 'B5' is missing implementations for these members:
//  - B1.twiceInterfaceMember
//  - B2.twiceInterfaceMember
// Try to either
//  - provide an implementation,
//  - inherit an implementation from a superclass or mixin,
//  - mark the class as abstract, or
//  - provide a 'noSuchMethod' implementation.
//
// class B5 extends B4 {}
//       ^^
// pkg/front_end/testcases/general/hierarchy.dart:27:8: Context: 'B1.twiceInterfaceMember' is defined here.
//   void twiceInterfaceMember() {}
//        ^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy.dart:32:8: Context: 'B2.twiceInterfaceMember' is defined here.
//   void twiceInterfaceMember() {}
//        ^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/hierarchy.dart:43:7: Error: The non-abstract class 'B6' is missing implementations for these members:
//  - B1.twiceInterfaceMember
//  - B2.twiceInterfaceMember
// Try to either
//  - provide an implementation,
//  - inherit an implementation from a superclass or mixin,
//  - mark the class as abstract, or
//  - provide a 'noSuchMethod' implementation.
//
// class B6 extends B3 implements B1, B2 {}
//       ^^
// pkg/front_end/testcases/general/hierarchy.dart:27:8: Context: 'B1.twiceInterfaceMember' is defined here.
//   void twiceInterfaceMember() {}
//        ^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy.dart:32:8: Context: 'B2.twiceInterfaceMember' is defined here.
//   void twiceInterfaceMember() {}
//        ^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/hierarchy.dart:57:7: Error: The non-abstract class 'C4' is missing implementations for these members:
//  - C1.mixedInAndImplementedInterfaceMember
//  - C2.mixedInAndImplementedInterfaceMember
// Try to either
//  - provide an implementation,
//  - inherit an implementation from a superclass or mixin,
//  - mark the class as abstract, or
//  - provide a 'noSuchMethod' implementation.
//
// class C4 extends C3 {}
//       ^^
// pkg/front_end/testcases/general/hierarchy.dart:47:8: Context: 'C1.mixedInAndImplementedInterfaceMember' is defined here.
//   void mixedInAndImplementedInterfaceMember();
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy.dart:52:8: Context: 'C2.mixedInAndImplementedInterfaceMember' is defined here.
//   void mixedInAndImplementedInterfaceMember() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/general/hierarchy.dart:59:7: Error: The non-abstract class 'C5' is missing implementations for these members:
//  - C1.mixedInAndImplementedInterfaceMember
//  - C2.mixedInAndImplementedInterfaceMember
// Try to either
//  - provide an implementation,
//  - inherit an implementation from a superclass or mixin,
//  - mark the class as abstract, or
//  - provide a 'noSuchMethod' implementation.
//
// class C5 with C1 implements C2 {}
//       ^^
// pkg/front_end/testcases/general/hierarchy.dart:47:8: Context: 'C1.mixedInAndImplementedInterfaceMember' is defined here.
//   void mixedInAndImplementedInterfaceMember();
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/general/hierarchy.dart:52:8: Context: 'C2.mixedInAndImplementedInterfaceMember' is defined here.
//   void mixedInAndImplementedInterfaceMember() {}
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

abstract class A1 extends core::Object {
  synthetic constructor •() → self::A1
    ;
  method extendedClassMember() → void
    ;
  abstract method extendedInterfaceMember() → void;
}
abstract class A2 extends core::Object /*isMixinDeclaration*/  {
  method mixedInClassMember() → void
    ;
  abstract method mixedInInterfaceMember() → void;
}
abstract class _A3&A1&A2 = self::A1 with self::A2 /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_A3&A1&A2
    : super self::A1::•()
    ;
  mixin-super-stub method mixedInClassMember() → void
    return super.{self::A2::mixedInClassMember}();
  abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
}
abstract class A3 extends self::_A3&A1&A2 {
  synthetic constructor •() → self::A3
    ;
  method declaredClassMember() → void
    ;
  abstract method declaredInterfaceMember() → void;
}
abstract class A4 = self::A1 with self::A2 {
  synthetic constructor •() → self::A4
    : super self::A1::•()
    ;
  mixin-super-stub method mixedInClassMember() → void
    return super.{self::A2::mixedInClassMember}();
  abstract mixin-stub method mixedInInterfaceMember() → void; -> self::A2::mixedInInterfaceMember
}
abstract class A5 extends core::Object implements self::A1 {
  synthetic constructor •() → self::A5
    ;
}
class A6 extends self::A1 implements self::A1 {
  synthetic constructor •() → self::A6
    ;
}
abstract class B1 extends core::Object {
  synthetic constructor •() → self::B1
    ;
  method twiceInterfaceMember() → void
    ;
  method extendedAndImplementedMember() → void
    ;
}
abstract class B2 extends core::Object {
  synthetic constructor •() → self::B2
    ;
  method twiceInterfaceMember() → void
    ;
}
abstract class B3 extends core::Object {
  synthetic constructor •() → self::B3
    ;
  method extendedAndImplementedMember() → void
    ;
}
abstract class B4 extends self::B3 implements self::B1, self::B2 {
  synthetic constructor •() → self::B4
    ;
}
class B5 extends self::B4 {
  synthetic constructor •() → self::B5
    ;
}
class B6 extends self::B3 implements self::B1, self::B2 {
  synthetic constructor •() → self::B6
    ;
}
abstract class C1 extends core::Object /*isMixinDeclaration*/  {
  method mixedInAndImplementedClassMember() → void
    ;
  abstract method mixedInAndImplementedInterfaceMember() → void;
}
class C2 extends core::Object {
  synthetic constructor •() → self::C2
    ;
  method mixedInAndImplementedClassMember() → void
    ;
  method mixedInAndImplementedInterfaceMember() → void
    ;
}
abstract class _C3&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C3&Object&C1
    : super core::Object::•()
    ;
  mixin-super-stub method mixedInAndImplementedClassMember() → void
    return super.{self::C1::mixedInAndImplementedClassMember}();
  abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
}
abstract class C3 extends self::_C3&Object&C1 implements self::C2 {
  synthetic constructor •() → self::C3
    ;
}
class C4 extends self::C3 {
  synthetic constructor •() → self::C4
    ;
}
abstract class _C5&Object&C1 = core::Object with self::C1 /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C5&Object&C1
    : super core::Object::•()
    ;
  mixin-super-stub method mixedInAndImplementedClassMember() → void
    return super.{self::C1::mixedInAndImplementedClassMember}();
  abstract mixin-stub method mixedInAndImplementedInterfaceMember() → void; -> self::C1::mixedInAndImplementedInterfaceMember
}
class C5 extends self::_C5&Object&C1 implements self::C2 {
  synthetic constructor •() → self::C5
    ;
}
static method main() → dynamic
  ;
