library test /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class Folder extends core::Object {
  synthetic constructor •() → self::Folder
    : super core::Object::•()
    ;
}
class Resource extends self::Folder {
  synthetic constructor •() → self::Resource
    : super self::Folder::•()
    ;
}
class Foo<T extends core::Object? = dynamic> extends core::Object {
  constructor •(self::Foo::T% t) → self::Foo<self::Foo::T%>
    : super core::Object::•()
    ;
}
static method getResource(core::String str) → self::Resource
  return throw "";
static method test() → dynamic {
  core::Map<core::String, core::List<self::Folder>> map = <core::String, core::List<self::Folder>>{"pkgA": core::_GrowableList::_literal1<self::Folder>(self::getResource("/pkgA/lib/")), "pkgB": core::_GrowableList::_literal1<self::Folder>(self::getResource("/pkgB/lib/"))};
  core::List<core::Map<core::String, self::Folder>> list = core::_GrowableList::_literal2<core::Map<core::String, self::Folder>>(<core::String, self::Folder>{"pkgA": self::getResource("/pkgA/lib/")}, <core::String, self::Folder>{"pkgB": self::getResource("/pkgB/lib/")});
  self::Foo<core::List<self::Folder>> foo = new self::Foo::•<core::List<self::Folder>>(core::_GrowableList::_literal1<self::Folder>(self::getResource("/pkgA/lib/")));
}
