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

class C<T extends core::Object> extends core::Object {
  synthetic constructor •() → void
    ;
  method f1(core::List<self::C::T> x) → void
    ;
  method f2(() → self::C::T callback) → void
    ;
  method f3((self::C::T) → self::C::T callback) → void
    ;
  method f4((self::C::T) → void callback) → void
    ;
}
static method g1(self::C<core::num> c, core::List<core::num> l) → void
  ;
static method g2(self::C<core::num> c, () → core::num callback) → void
  ;
static method g3(self::C<core::num> c, (core::num) → core::num callback) → void
  ;
static method g4(self::C<core::num> c, (core::num) → void callback) → void
  ;
static method main() → dynamic
  ;
