library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:5:7: Error: The non-abstract class 'Super' is missing implementations for these members:
//  - Super.extendedAbstractGetter
//  - Super.extendedAbstractMixedInAbstractGetter
//  - Super.extendedAbstractMixedInConcreteGetter
// 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 Super {
//       ^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
//   int get extendedAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:16:11: Context: 'Super.extendedAbstractMixedInAbstractGetter' is defined here.
//   int get extendedAbstractMixedInAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:12:11: Context: 'Super.extendedAbstractMixedInConcreteGetter' is defined here.
//   int get extendedAbstractMixedInConcreteGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:19:7: Error: The non-abstract class 'Mixin' is missing implementations for these members:
//  - Mixin.extendedAbstractMixedInAbstractGetter
//  - Mixin.extendedConcreteMixedInAbstractGetter
//  - Mixin.mixedInAbstractGetter
// 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 Mixin {
//       ^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:30:11: Context: 'Mixin.extendedAbstractMixedInAbstractGetter' is defined here.
//   int get extendedAbstractMixedInAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:28:11: Context: 'Mixin.extendedConcreteMixedInAbstractGetter' is defined here.
//   int get extendedConcreteMixedInAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:22:11: Context: 'Mixin.mixedInAbstractGetter' is defined here.
//   int get mixedInAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:33:7: Error: The non-abstract class 'ClassMixin' is missing implementations for these members:
//  - Mixin.extendedAbstractMixedInAbstractGetter
//  - Mixin.mixedInAbstractGetter
//  - 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 ClassMixin extends Super with Mixin {}
//       ^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:30:11: Context: 'Mixin.extendedAbstractMixedInAbstractGetter' is defined here.
//   int get extendedAbstractMixedInAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:22:11: Context: 'Mixin.mixedInAbstractGetter' is defined here.
//   int get mixedInAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
//   int get extendedAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:35:7: Error: The non-abstract class 'NamedMixin' is missing implementations for these members:
//  - Mixin.extendedAbstractMixedInAbstractGetter
//  - Mixin.mixedInAbstractGetter
//  - 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 NamedMixin = Super with Mixin;
//       ^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:30:11: Context: 'Mixin.extendedAbstractMixedInAbstractGetter' is defined here.
//   int get extendedAbstractMixedInAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:22:11: Context: 'Mixin.mixedInAbstractGetter' is defined here.
//   int get mixedInAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/mix_in_getter.dart:8:11: Context: 'Super.extendedAbstractGetter' is defined here.
//   int get extendedAbstractGetter;
//           ^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

class Super extends core::Object {
  synthetic constructor •() → self::Super
    : super core::Object::•()
    ;
  get extendedConcreteGetter() → core::int
    return 0;
  abstract get extendedAbstractGetter() → core::int;
  get extendedConcreteMixedInConcreteGetter() → core::int
    return 0;
  abstract get extendedAbstractMixedInConcreteGetter() → core::int;
  get extendedConcreteMixedInAbstractGetter() → core::int
    return 0;
  abstract get extendedAbstractMixedInAbstractGetter() → core::int;
}
class Mixin extends core::Object {
  synthetic constructor •() → self::Mixin
    : super core::Object::•()
    ;
  get mixedInConcreteGetter() → core::int
    return 0;
  abstract get mixedInAbstractGetter() → core::int;
  get extendedConcreteMixedInConcreteGetter() → core::int
    return 0;
  get extendedAbstractMixedInConcreteGetter() → core::int
    return 0;
  abstract get extendedConcreteMixedInAbstractGetter() → core::int;
  abstract get extendedAbstractMixedInAbstractGetter() → core::int;
}
abstract class _ClassMixin&Super&Mixin extends self::Super implements self::Mixin /*isAnonymousMixin,isEliminatedMixin*/  {
  synthetic constructor •() → self::_ClassMixin&Super&Mixin
    : super self::Super::•()
    ;
  get mixedInConcreteGetter() → core::int
    return 0;
  get extendedConcreteMixedInConcreteGetter() → core::int
    return 0;
  get extendedAbstractMixedInConcreteGetter() → core::int
    return 0;
  abstract get mixedInAbstractGetter() → core::int;
  abstract get extendedConcreteMixedInAbstractGetter() → core::int;
  abstract get extendedAbstractMixedInAbstractGetter() → core::int;
}
class ClassMixin extends self::_ClassMixin&Super&Mixin {
  synthetic constructor •() → self::ClassMixin
    : super self::_ClassMixin&Super&Mixin::•()
    ;
}
class NamedMixin extends self::Super implements self::Mixin /*isEliminatedMixin*/  {
  synthetic constructor •() → self::NamedMixin
    : super self::Super::•()
    ;
  get mixedInConcreteGetter() → core::int
    return 0;
  get extendedConcreteMixedInConcreteGetter() → core::int
    return 0;
  get extendedAbstractMixedInConcreteGetter() → core::int
    return 0;
  abstract get mixedInAbstractGetter() → core::int;
  abstract get extendedConcreteMixedInAbstractGetter() → core::int;
  abstract get extendedAbstractMixedInAbstractGetter() → core::int;
}
static method main() → dynamic {}
