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

abstract class A<T extends core::Object* = dynamic> extends core::Object {
  generic-covariant-impl field core::List<self::A::T*>* z = null;
  synthetic constructor •() → self::A<self::A::T*>*
    : super core::Object::•()
    ;
  abstract get x() → core::List<self::A::T*>*;
  abstract set y(generic-covariant-impl core::List<self::A::T*>* value) → void;
}
class B extends self::A<core::int*> {
  field core::List<core::int*>* x = null;
  generic-covariant-impl field core::List<core::int*>* y = null;
  generic-covariant-impl field core::List<core::int*>* z = null;
  synthetic constructor •() → self::B*
    : super self::A::•()
    ;
}
static method main() → dynamic {}
