class A {
  const A();
  const factory A.redir() = B;
  const A.named();
  const factory A.selfRedir() = A.named;
}

class B extends A {
  const B();
}

typedef TA = A;

class Test {
  final A a;
  const Test.named1() : a = const A();
  const Test.named2() : a = const A.redir();
  const Test.named3() : a = const A.named();
  const Test.named4() : a = const A.selfRedir();
  const Test.named5() : a = const TA();
  const Test.named6() : a = const TA.redir();
  const Test.named7() : a = const TA.named();
  const Test.named8() : a = const TA.selfRedir();
}
