library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:5:7: Error: The non-abstract class 'ConcreteSuper' is missing implementations for these members:
//  - ConcreteSuper.declaredAbstractExtendsAbstractMethod
//  - ConcreteSuper.declaredConcreteExtendsAbstractMethod
//  - ConcreteSuper.extendedAbstractMethod
// 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 ConcreteSuper {
//       ^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:16:8: Context: 'ConcreteSuper.declaredAbstractExtendsAbstractMethod' is defined here.
//   void declaredAbstractExtendsAbstractMethod();
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:14:8: Context: 'ConcreteSuper.declaredConcreteExtendsAbstractMethod' is defined here.
//   void declaredConcreteExtendsAbstractMethod();
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:8:8: Context: 'ConcreteSuper.extendedAbstractMethod' is defined here.
//   void extendedAbstractMethod();
//        ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:19:7: Error: The non-abstract class 'ConcreteClass' is missing implementations for these members:
//  - ConcreteClass.declaredAbstractExtendsAbstractMethod
//  - ConcreteClass.declaredAbstractMethod
//  - ConcreteSuper.extendedAbstractMethod
// 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 ConcreteSuper {
//       ^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:30:8: Context: 'ConcreteClass.declaredAbstractExtendsAbstractMethod' is defined here.
//   void declaredAbstractExtendsAbstractMethod();
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:22:8: Context: 'ConcreteClass.declaredAbstractMethod' is defined here.
//   void declaredAbstractMethod();
//        ^^^^^^^^^^^^^^^^^^^^^^
// pkg/front_end/testcases/nnbd_mixed/hierarchy/concrete_extends_method.dart:8:8: Context: 'ConcreteSuper.extendedAbstractMethod' is defined here.
//   void extendedAbstractMethod();
//        ^^^^^^^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

class ConcreteSuper extends core::Object {
  synthetic constructor •() → self::ConcreteSuper
    : super core::Object::•()
    ;
  method extendedConcreteMethod() → void {}
  abstract method extendedAbstractMethod() → void;
  method declaredConcreteExtendsConcreteMethod() → void {}
  method declaredAbstractExtendsConcreteMethod() → void {}
  abstract method declaredConcreteExtendsAbstractMethod() → void;
  abstract method declaredAbstractExtendsAbstractMethod() → void;
}
class ConcreteClass extends self::ConcreteSuper {
  synthetic constructor •() → self::ConcreteClass
    : super self::ConcreteSuper::•()
    ;
  method declaredConcreteMethod() → void {}
  abstract method declaredAbstractMethod() → void;
  method declaredConcreteExtendsConcreteMethod() → void {}
  abstract method declaredAbstractExtendsConcreteMethod() → void;
  method declaredConcreteExtendsAbstractMethod() → void {}
  abstract method declaredAbstractExtendsAbstractMethod() → void;
}
static method main() → dynamic {}
