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

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