library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:21:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
//  - ConcreteClass.declareAbstractImplementMultipleSetter=
//  - Interface1.implementMultipleSetter=
//  - Interface2.implementMultipleSetter=
// 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 implements Interface1, Interface2 {
//       ^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:24:12: Context: 'ConcreteClass.declareAbstractImplementMultipleSetter=' is defined here.
//   void set declareAbstractImplementMultipleSetter(int i);
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:6:12: Context: 'Interface1.implementMultipleSetter=' is defined here.
//   void set implementMultipleSetter(int i) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:14:12: Context: 'Interface2.implementMultipleSetter=' is defined here.
//   void set implementMultipleSetter(int i) {}
//            ^^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:33:7: Error: The non-abstract class 'ConcreteSub' is missing implementations for these members:
//  - AbstractClass.Interface1.implementMultipleSetter=%Interface2.implementMultipleSetter==
//  - AbstractClass.declareAbstractImplementMultipleSetter=
// 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/implement_multiple_setter.dart:27:16: Context: 'AbstractClass.Interface1.implementMultipleSetter=%Interface2.implementMultipleSetter==' is defined here.
// abstract class AbstractClass implements Interface1, Interface2 {
//                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...
// pkg/front_end/testcases/nnbd_mixed/hierarchy/implement_multiple_setter.dart:30:12: Context: 'AbstractClass.declareAbstractImplementMultipleSetter=' is defined here.
//   void set declareAbstractImplementMultipleSetter(int i);
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

class Interface1 extends core::Object {
  synthetic constructor •() → self::Interface1
    : super core::Object::•()
    ;
  set implementMultipleSetter(core::int i) → void {}
  set declareConcreteImplementMultipleSetter(core::int i) → void {}
  set declareAbstractImplementMultipleSetter(core::int i) → void {}
}
class Interface2 extends core::Object {
  synthetic constructor •() → self::Interface2
    : super core::Object::•()
    ;
  set implementMultipleSetter(core::int i) → void {}
  set declareConcreteImplementMultipleSetter(core::int i) → void {}
  set declareAbstractImplementMultipleSetter(core::int i) → void {}
}
class ConcreteClass extends core::Object implements self::Interface1, self::Interface2 {
  synthetic constructor •() → self::ConcreteClass
    : super core::Object::•()
    ;
  set declareConcreteImplementMultipleSetter(core::int i) → void {}
  abstract set declareAbstractImplementMultipleSetter(core::int i) → void;
}
abstract class AbstractClass extends core::Object implements self::Interface1, self::Interface2 {
  synthetic constructor •() → self::AbstractClass
    : super core::Object::•()
    ;
  set declareConcreteImplementMultipleSetter(core::int i) → void {}
  abstract set declareAbstractImplementMultipleSetter(core::int i) → void;
}
class ConcreteSub extends self::AbstractClass {
  synthetic constructor •() → self::ConcreteSub
    : super self::AbstractClass::•()
    ;
}
static method main() → dynamic {}
