library;
//
// 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 {}
//                ^
//
// pkg/front_end/testcases/general/issue44733.dart:9:12: Error: Expected identifier, but got 'super'.
// B get x => super.x;
//            ^^^^^
//
// pkg/front_end/testcases/general/issue44733.dart:18:9: Error: A non-null value must be returned since the return type 'E' doesn't allow null.
//  - 'E' is from 'pkg/front_end/testcases/general/issue44733.dart'.
//   E get y {}
//         ^
//
// pkg/front_end/testcases/general/issue44733.dart:22:25: Error: 'F' isn't a type.
//   F get y => super.y as F;
//                         ^
//
// pkg/front_end/testcases/general/issue44733.dart:22:20: Error: Superclass has no getter named 'y'.
//   F get y => super.y as F;
//                    ^
//
import self as self;
import "dart:core" as core;

abstract class B extends self::_B&A&C {
  synthetic constructor •() → self::B
    : super self::_B&A&C::•()
    ;
}
abstract class C extends self::D /*isMixinDeclaration*/  {
}
abstract class E extends core::Object {
  synthetic constructor •() → self::E
    : super core::Object::•()
    ;
}
abstract class D extends core::Object {
  synthetic constructor •() → self::D
    : super core::Object::•()
    ;
  get y() → self::E {
    return invalid-expression "pkg/front_end/testcases/general/issue44733.dart:18:9: Error: A non-null value must be returned since the return type 'E' doesn't allow null.
 - 'E' is from 'pkg/front_end/testcases/general/issue44733.dart'.
  E get y {}
        ^" in null;
  }
}
abstract class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  get y() → invalid-type
    return invalid-expression "pkg/front_end/testcases/general/issue44733.dart:22:20: Error: Superclass has no getter named 'y'.
  F get y => super.y as F;
                   ^" as invalid-type;
}
abstract class _B&A&C extends self::A implements self::C /*isAnonymousMixin,isEliminatedMixin*/  {
  synthetic constructor •() → self::_B&A&C
    : super self::A::•()
    ;
}
static get x() → self::B
  return invalid-expression "pkg/front_end/testcases/general/issue44733.dart:9:12: Error: Expected identifier, but got 'super'.
B get x => super.x;
           ^^^^^"{<invalid>}.x;
static method f() → void {
  #L1:
  switch(self::x.{self::A::y}{invalid-type}{<invalid>}.z) /* invalid-type */ {
  }
}
static method main() → dynamic {}
