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

typedef F<contravariant U extends core::Object* = dynamic, V extends core::Object* = dynamic> = (U*) →* V*;
class Foo<T extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::Foo<self::Foo::T*>*
    : super core::Object::•()
    ;
  get v1() → self::Bar<self::Foo::T*>*
    return #C1;
  get v2() → self::Bar<core::List<self::Foo::T*>*>*
    return #C2;
  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
    return #C3;
  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
    return #C4;
  get v5() → core::List<self::Foo::T*>*
    return #C5;
  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
    return #C6;
  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
    return #C8;
  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
    return #C9;
  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
    return #C10;
}
class Bar<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
  const constructor •() → self::Bar<self::Bar::T*>*
    : super core::Object::•()
    ;
}
static method main() → dynamic {}

constants  {
  #C1 = self::Bar<core::Null?> {}
  #C2 = self::Bar<core::List<core::Null?>*> {}
  #C3 = self::Bar<(core::Object*) →* core::Null?> {}
  #C4 = self::Bar<((core::Null?) →* core::Object*) →* core::Null?> {}
  #C5 = <core::Null?>[]
  #C6 = <(core::Object*) →* core::Null?>[]
  #C7 = <dynamic>[]
  #C8 = core::_ImmutableMap<core::Null?, core::Null?> {_kvPairs:#C7}
  #C9 = core::_ImmutableMap<(core::Object*) →* core::Null?, core::Null?> {_kvPairs:#C7}
  #C10 = core::_ImmutableMap<core::Null?, (core::Object*) →* core::Null?> {_kvPairs:#C7}
}
