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