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

class B extends core::Object {
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
  method f(core::int x, core::int y) → void {}
}
abstract class I<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::I<self::I::T%>
    : super core::Object::•()
    ;
  abstract method f(covariant-by-class self::I::T% x, core::Object y) → void;
}
abstract class C extends self::B implements self::I<core::int> {
  synthetic constructor •() → self::C
    : super self::B::•()
    ;
  forwarding-stub method f(covariant-by-class core::int x, core::Object y) → void
    return super.{self::B::f}(x, y as core::int);
}
static method main() → void {}
