library #lib /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

@#C3
class A extends core::Object {
  constructor •() → self::A
    : super core::Object::•()
    ;
  @#C3
  static factory foo() → self::A
    return new self::B::•();
}
class B extends self::A {
  constructor •() → self::B
    : super self::A::•()
    ;
}
abstract class C extends core::Object {
  constructor •() → self::C
    : super core::Object::•()
    ;
  @#C3
  static factory bar() → self::C
    return [@vm.inferred-type.metadata=#lib::E] self::D::baz();
}
abstract class D extends self::C {
  constructor •() → self::D
    : super self::C::•()
    ;
  static factory baz() → self::D
    return new self::E::•();
}
class E extends self::D {
  constructor •() → self::E
    : super self::D::•()
    ;
}
static method main() → void {}
constants  {
  #C1 = "vm:entry-point"
  #C2 = null
  #C3 = core::pragma {name:#C1, options:#C2}
}
