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 {
  static field self::B staticVariable;
  static field self::B? staticVariable2;
  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 field self::B topLevelVariable;
static field self::B? topLevelVariable2;
static method f<T extends core::Object? = dynamic>() → self::f::T%
  ;
static method test_topLevelVariable() → void
  ;
static method test_staticVariable() → void
  ;
static method main() → dynamic
  ;
