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

class D<T extends core::Object> extends core::Object {
  default constructor •() → void
    ;
}
class E<T extends core::Object> extends self::D<self::E::T> {
  default constructor •() → void
    ;
}
class B<T extends core::Object> extends core::Object {
  default constructor •() → void
    ;
  operator [](self::E<self::B::T> x) → self::D<self::B::T>
    ;
}
class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
  default constructor •() → void
    ;
  operator [](core::Object x) → self::E<asy::Future<self::C::U>>
    ;
  method h() → void
    ;
}
static method f<T extends core::Object>() → self::f::T
  ;
static method main() → dynamic
  ;
