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

class X extends core::Object {
  synthetic constructor •() → self::X
    ;
}
class Foo<T extends self::X = dynamic> extends core::Object {
  generic-covariant-impl field self::Foo::T x;
  constructor fromX(self::X _init) → self::Foo<self::Foo::T>
    ;
  constructor fromT(self::Foo::T _init) → self::Foo<self::Foo::T>
    ;
  constructor _internal({self::Foo::T x}) → self::Foo<self::Foo::T>
    ;
}
static method main() → void
  ;
