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

class B extends core::Object {
  synthetic constructor •() → self::B
    ;
  method f(core::int x) → core::int
    ;
}
abstract class I extends core::Object {
  synthetic constructor •() → self::I
    ;
  abstract method f(covariant-by-declaration core::Object x) → core::int;
}
class C extends self::B implements self::I {
  synthetic constructor •() → self::C
    ;
  forwarding-stub method f(covariant-by-declaration core::Object x) → core::int
    return super.{self::B::f}(x as core::int);
}
static method expectTypeError(() → void callback) → void
  ;
static method expect(core::Object value, core::Object expected) → void
  ;
static method g(self::C c) → void
  ;
static method test(self::C c, self::I i) → void
  ;
static method main() → dynamic
  ;
