library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class C<T extends self::A> extends core::Object {
  late covariant-by-class field self::C::T _field;
  synthetic constructor •() → self::C<self::C::T>
    : super core::Object::•()
    ;
  method foo(covariant-by-class self::C::T x) → dynamic {
    this.{self::C::_field} = x;
  }
}
class D extends self::C<self::B> {
  synthetic constructor •() → self::D
    : super self::C::•()
    ;
}
abstract class _Foo&Object&C = core::Object with self::C<self::B> /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Foo&Object&C
    : super core::Object::•()
    ;
  mixin-super-stub get _field() → self::B
    return super.{self::C::_field};
  mixin-super-stub set _field(covariant-by-class self::B value) → void
    return super.{self::C::_field} = value;
  mixin-super-stub method foo(covariant-by-class self::B x) → dynamic
    return super.{self::C::foo}(x);
}
class Foo extends self::_Foo&Object&C {
  synthetic constructor •() → self::Foo
    : super self::_Foo&Object&C::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
}
static method main() → dynamic {
  self::Foo foo = new self::Foo::•();
  foo.{self::_Foo&Object&C::foo}(new self::B::•()){(self::B) → dynamic};
}
