library;
import self as self;
import "dart:core" as core;

typedef TA = self::A;
class A extends core::Object /*hasConstConstructor*/  {
  const constructor •() → self::A
    : super core::Object::•()
    ;
  const constructor named() → self::A
    : super core::Object::•()
    ;
  static factory redir() → self::A /* redirection-target: self::B::• */
    return new self::B::•();
  static factory selfRedir() → self::A /* redirection-target: self::A::named */
    return new self::A::named();
}
class B extends self::A /*hasConstConstructor*/  {
  const constructor •() → self::B
    : super self::A::•()
    ;
}
class Test extends core::Object /*hasConstConstructor*/  {
  final field self::A a;
  const constructor named1() → self::Test
    : self::Test::a = #C1, super core::Object::•()
    ;
  const constructor named2() → self::Test
    : self::Test::a = #C2, super core::Object::•()
    ;
  const constructor named3() → self::Test
    : self::Test::a = #C1, super core::Object::•()
    ;
  const constructor named4() → self::Test
    : self::Test::a = #C1, super core::Object::•()
    ;
  const constructor named5() → self::Test
    : self::Test::a = #C1, super core::Object::•()
    ;
  const constructor named6() → self::Test
    : self::Test::a = #C2, super core::Object::•()
    ;
  const constructor named7() → self::Test
    : self::Test::a = #C1, super core::Object::•()
    ;
  const constructor named8() → self::Test
    : self::Test::a = #C1, super core::Object::•()
    ;
}

constants  {
  #C1 = self::A {}
  #C2 = self::B {}
}


Constructor coverage from constants:
org-dartlang-testcase:///issue55152_5.dart:
- A. (from org-dartlang-testcase:///issue55152_5.dart:6:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- B. (from org-dartlang-testcase:///issue55152_5.dart:13:9)
- A.named (from org-dartlang-testcase:///issue55152_5.dart:8:9)
