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

typedef F<T extends core::Object> = (T) → void;
abstract class A<T extends core::Object> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  abstract method f(generic-covariant-impl generic-covariant-interface self::A::T x, core::int y) → void;
}
class B<T extends core::Object> extends core::Object implements self::A<(self::B::T) → void> {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method f(generic-covariant-impl (self::B::T) → void x, core::int y) → void {}
}
abstract class I<T extends core::Object> extends core::Object implements self::A<(self::I::T) → void> {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  abstract method f(generic-covariant-impl (self::I::T) → void x, core::Object y) → void;
}
class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
  synthetic constructor •() → void
    : super self::B::•()
    ;
  abstract forwarding-stub method f(generic-covariant-impl generic-covariant-interface ((self::C::T) → void) → void x, core::Object y) → void;
}
static method main() → void {}
