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

typedef F<Y extends core::Object? = dynamic> = self::A<Y%>;
class P<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  const constructor •(self::P::T% t) → self::P<self::P::T%>
    : super core::Object::•()
    ;
}
class A<X extends core::Object? = dynamic> extends self::P<self::A::X%> /*hasConstConstructor*/  {
  const constructor foo(self::A::X% x) → self::A<self::A::X%>
    : super self::P::•(x)
    ;
  constructor •(self::A::X% x) → self::A<self::A::X%>
    : assert(#C1 =={core::Object::==}{(core::Object) → core::bool} #C1), super self::P::•(x)
    ;
}

constants  {
  #C1 = self::A<core::String> {}
}


Constructor coverage from constants:
org-dartlang-testcase:///flutter_issue148611.dart:
- A.foo (from org-dartlang-testcase:///flutter_issue148611.dart:12:9)
- P. (from org-dartlang-testcase:///flutter_issue148611.dart:8:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
