library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:37:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
//  - AbstractClass.Super.extendedAbstractImplementedGetter%Interface1.extendedAbstractImplementedGetter
//  - AbstractClass.Super.extendedAbstractImplementedMultipleGetter%Interface1.extendedAbstractImplementedMultipleGetter%Interface2.extendedAbstractImplementedMultipleGetter
//  - Super.extendedAbstractGetter
// 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 ConcreteSub extends AbstractClass {}
//       ^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedGetter%Interface1.extendedAbstractImplementedGetter' is defined here.
// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:35:16: Context: 'AbstractClass.Super.extendedAbstractImplementedMultipleGetter%Interface1.extendedAbstractImplementedMultipleGetter%Interface2.extendedAbstractImplementedMultipleGetter' is defined here.
// abstract class AbstractClass extends Super implements Interface1, Interface2 {}
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
//   int get extendedAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:39:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
//  - Super.extendedAbstractGetter
//  - Super.extendedAbstractImplementedGetter
//  - Super.extendedAbstractImplementedMultipleGetter
// 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 ConcreteClass extends Super implements Interface1, Interface2 {}
//       ^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
//   int get extendedAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:12:11: Context: 'Super.extendedAbstractImplementedGetter' is defined here.
//   int get extendedAbstractImplementedGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/extend_multiple_getter.dart:16:11: Context: 'Super.extendedAbstractImplementedMultipleGetter' is defined here.
//   int get extendedAbstractImplementedMultipleGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

abstract class Super extends core::Object {
  synthetic constructor •() → self::Super
    : super core::Object::•()
    ;
  get extendedConcreteGetter() → core::int
    return 0;
  abstract get extendedAbstractGetter() → core::int;
  get extendedConcreteImplementedGetter() → core::int
    return 0;
  abstract get extendedAbstractImplementedGetter() → core::int;
  get extendedConcreteImplementedMultipleGetter() → core::int
    return 0;
  abstract get extendedAbstractImplementedMultipleGetter() → core::int;
}
class Interface1 extends core::Object {
  synthetic constructor •() → self::Interface1
    : super core::Object::•()
    ;
  get extendedConcreteImplementedGetter() → core::int
    return 0;
  get extendedAbstractImplementedGetter() → core::int
    return 0;
  get extendedConcreteImplementedMultipleGetter() → core::int
    return 0;
  get extendedAbstractImplementedMultipleGetter() → core::int
    return 0;
}
class Interface2 extends core::Object {
  synthetic constructor •() → self::Interface2
    : super core::Object::•()
    ;
  get extendedConcreteImplementedMultipleGetter() → core::int
    return 0;
  get extendedAbstractImplementedMultipleGetter() → core::int
    return 0;
}
abstract class AbstractClass extends self::Super implements self::Interface1, self::Interface2 {
  synthetic constructor •() → self::AbstractClass
    : super self::Super::•()
    ;
}
class ConcreteSub extends self::AbstractClass {
  synthetic constructor •() → self::ConcreteSub
    : super self::AbstractClass::•()
    ;
}
class ConcreteClass extends self::Super implements self::Interface1, self::Interface2 {
  synthetic constructor •() → self::ConcreteClass
    : super self::Super::•()
    ;
}
static method main() → dynamic {}
