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

class A extends core::Object {
  synthetic constructor •() → self::A
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B
    ;
  operator +(self::C v) → self::B
    ;
  operator -(core::int i) → self::B
    ;
  operator *(self::B v) → self::B
    ;
  operator &(self::A v) → self::C
    ;
}
class C extends self::B {
  synthetic constructor •() → self::C
    ;
}
static method f<T extends core::Object? = dynamic>() → self::f::T%
  ;
static method test(self::B local, self::B? local2, self::B? local3) → void
  ;
static method main() → dynamic
  ;
