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

typedef Alias = self::Class;
typedef ComplexAlias<unrelated X extends core::Object? = dynamic> = self::Class;
typedef GenericAlias<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> = self::GenericClass<X%, Y%>;
class Class extends core::Object /*hasConstConstructor*/  {
  const constructor •([dynamic a = #C1]) → self::Class
    : super core::Object::•()
    ;
  const constructor named({dynamic a = #C1, dynamic b = #C1}) → self::Class
    : super core::Object::•()
    ;
}
class GenericClass<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  const constructor •() → self::GenericClass<self::GenericClass::X%, self::GenericClass::Y%>
    : super core::Object::•()
    ;
  const constructor named({dynamic a = #C1, dynamic b = #C1}) → self::GenericClass<self::GenericClass::X%, self::GenericClass::Y%>
    : super core::Object::•()
    ;
}
@#C2
@#C2
@#C2
@#C2
@#C2
static method type() → void {}
static synthetic method _#ComplexAlias#new#tearOff<unrelated X extends core::Object? = dynamic>([dynamic a = #C1]) → self::Class
  return new self::Class::•(a);
static synthetic method _#ComplexAlias#named#tearOff<unrelated X extends core::Object? = dynamic>({dynamic a = #C1, dynamic b = #C1}) → self::Class
  return new self::Class::named(a: a, b: b);

constants  {
  #C1 = null
  #C2 = self::Class {}
}


Constructor coverage from constants:
org-dartlang-testcase:///issue55755.dart:
- Class.named (from org-dartlang-testcase:///issue55755.dart:7:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
- Class. (from org-dartlang-testcase:///issue55755.dart:6:9)
- GenericClass. (from org-dartlang-testcase:///issue55755.dart:11:9)
- GenericClass.named (from org-dartlang-testcase:///issue55755.dart:12:9)
