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

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  method call(core::String s) → core::String
    return "${s}${s}";
}
class B<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::B<self::B::T>
    : super core::Object::•()
    ;
  method call(generic-covariant-impl self::B::T t) → self::B::T
    return t;
}
class C extends core::Object {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  method call<T extends core::Object = dynamic>(self::C::call::T t) → self::C::call::T
    return t;
}
static method test() → dynamic {
  self::A a = new self::A::•();
  core::List<core::String> list1 = <dynamic>["a", "b", "c"].map(a.call).toList();
  core::List<core::String> list2 = <dynamic>["a", "b", "c"].map(a).toList();
  self::B<core::String> b = new self::B::•<dynamic>();
  core::List<core::String> list3 = <dynamic>["a", "b", "c"].map(b.call).toList();
  core::List<core::String> list4 = <dynamic>["a", "b", "c"].map(b).toList();
  self::C c = new self::C::•();
  core::List<core::String> list5 = <dynamic>["a", "b", "c"].map(c.call).toList();
  core::List<core::String> list6 = <dynamic>["a", "b", "c"].map(c).toList();
}
static method main() → dynamic {}
