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

class A extends core::Object /*hasConstConstructor*/  {
  const constructor •(core::int x, {core::String? y = #C1}) → self::A
    : super core::Object::•()
    ;
  static factory redir(core::int x, {core::String? y = #C1}) → self::A /* redirection-target: self::A::• */
    return new self::A::•(x, y: y);
}
static method test1() → dynamic
  return #C2;
static method test2() → dynamic
  return #C2;
static method main() → dynamic {}

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


Constructor coverage from constants:
org-dartlang-testcase:///issue49087.dart:
- A. (from org-dartlang-testcase:///issue49087.dart:6:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
