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

typedef F<contravariant T extends core::Object* = dynamic> = (T*) →* void;
typedef G<contravariant T extends core::Object* = dynamic, U extends core::Object* = dynamic> = (T*) →* U*;
class C<T extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T*>*
    ;
  method f1(generic-covariant-impl self::C::T* x) → void
    ;
  method f2(generic-covariant-impl core::List<self::C::T*>* x) → self::C::T*
    ;
}
static method g1(self::C<core::num*>* c) → (core::num*) →* void
  ;
static method g2(self::C<core::int*>* c, core::Object* x) → void
  ;
static method g3(self::C<core::num*>* c) → (core::List<core::num*>*) →* core::num*
  ;
static method test() → void
  ;
static method main() → dynamic
  ;
