library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue44733.dart:22:3: Error: Type 'F' not found.
//   F get y => super.y as F;
//   ^
//
// pkg/front_end/testcases/general/issue44733.dart:5:16: Error: 'A' doesn't implement 'D' so it can't be used with 'C'.
//  - 'A' is from 'pkg/front_end/testcases/general/issue44733.dart'.
//  - 'D' is from 'pkg/front_end/testcases/general/issue44733.dart'.
//  - 'C' is from 'pkg/front_end/testcases/general/issue44733.dart'.
// abstract class B extends A with C {}
//                ^
//
import self as self;
import "dart:core" as core;

abstract class _B&A&C = self::A with self::C /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_B&A&C
    : super self::A::•()
    ;
}
abstract class B extends self::_B&A&C {
  synthetic constructor •() → self::B
    ;
}
abstract class C extends self::D /*isMixinDeclaration*/  {
}
abstract class E extends core::Object {
  synthetic constructor •() → self::E
    ;
}
abstract class D extends core::Object {
  synthetic constructor •() → self::D
    ;
  get y() → self::E
    ;
}
abstract class A extends core::Object {
  synthetic constructor •() → self::A
    ;
  get y() → invalid-type
    ;
}
static get x() → self::B
  ;
static method f() → void
  ;
static method main() → dynamic
  ;
