library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "package:expect/expect.dart" as exp;

import "package:expect/expect.dart";

class A extends core::Object {
  static final field dynamic _redirecting# = <dynamic>[#C1]/*isLegacy*/;
  constructor •() → self::A
    : super core::Object::•() {}
  static factory foo() → self::A
    return self::C::bar();
  method m() → core::int {
    return 1;
  }
}
class C extends self::A {
  static final field dynamic _redirecting# = <dynamic>[#C2]/*isLegacy*/;
  constructor •() → self::C
    : super self::A::•() {}
  static factory bar() → self::C
    return new self::D::•();
  method m() → core::int {
    return 1;
  }
}
class D extends self::C {
  synthetic constructor •() → self::D
    : super self::C::•()
    ;
  method m() → core::int {
    return 2;
  }
}
static method main() → dynamic {
  self::A a = new self::D::•();
  exp::Expect::equals(2, a.{self::A::m}(){() → core::int});
}

constants  {
  #C1 = constructor-tearoff self::A::foo
  #C2 = constructor-tearoff self::C::bar
}
