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

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