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

class A<T extends core::Object = dynamic> extends core::Object {
  generic-covariant-impl field self::A::T x = null;
  synthetic constructor •() → self::A<self::A::T>
    : super core::Object::•()
    ;
}
class B<E extends core::Object = dynamic> extends self::A<self::B::E> {
  generic-covariant-impl field self::B::E y = null;
  synthetic constructor •() → self::B<self::B::E>
    : super self::A::•()
    ;
  get x() → self::B::E
    return this.{self::B::y};
}
static method foo() → dynamic {
  core::int y = new self::B::•<core::String>().x;
  core::String z = new self::B::•<core::String>().x;
}
static method main() → dynamic {
  self::foo();
}
