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

class _X<T extends core::Object* = dynamic> extends core::Object {
  static field dynamic _redirecting# = <dynamic>[self::_X::•];
  static factory •<T extends core::Object* = dynamic>() → self::_X<self::_X::•::T*>*
    let<BottomType> #redirecting_factory = self::_Y::• in let self::_X::•::T* #typeArg0 = null in invalid-expression;
}
class _Y<T extends core::Object* = dynamic> extends core::Object implements self::_X<self::_Y::T*> {
  const constructor •() → self::_Y<self::_Y::T*>*
    : super core::Object::•()
    ;
}
class A<T extends core::Object* = dynamic> extends core::Object {
  generic-covariant-impl field self::_X<self::A::T*>* x;
  constructor •(self::_X<self::A::T*>* x) → self::A<self::A::T*>*
    : self::A::x = x, super core::Object::•()
    ;
}
class B<T extends core::Object* = dynamic> extends self::A<self::B::T*> {
  constructor •() → self::B<self::B::T*>*
    : super self::A::•(#C1)
    ;
}
static method main() → dynamic {
  dynamic x = new self::B::•<dynamic>().{self::A::x};
  if(!(x is self::_Y<core::Null*>*)) {
    throw "Unexpected run-time type: `new B().x` is ${x.{core::Object::runtimeType}}, but `_Y<Null>` expected";
  }
}

constants  {
  #C1 = self::_Y<core::Null?> {}
}
