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

class Index extends core::Object {
  default constructor •() → void
    ;
}
class A extends core::Object {
  default constructor •() → void
    ;
}
class B extends self::A {
  default constructor •() → void
    ;
  operator +(self::C v) → self::A
    ;
  operator -(core::int i) → self::B
    ;
  operator *(self::B v) → self::B
    ;
  operator &(self::A v) → self::C
    ;
}
class C extends self::B {
  default constructor •() → void
    ;
}
class Test extends core::Object {
  default constructor •() → void
    ;
  operator [](self::Index i) → self::B
    ;
  operator []=(self::Index i, self::B v) → void
    ;
  method test() → void
    ;
}
static method f<T extends core::Object>() → self::f::T
  ;
static method main() → dynamic
  ;
