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

class Resource extends core::Object {
  synthetic constructor •() → self::Resource
    : super core::Object::•()
    ;
}
class Folder extends self::Resource {
  synthetic constructor •() → self::Folder
    : super self::Resource::•()
    ;
}
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 null;
static method main() → dynamic {
  core::Map<core::String, core::List<self::Folder>> map = <core::String, core::List<self::Folder>>{"pkgA": <self::Folder>[self::getResource("/pkgA/lib/") as{TypeError} self::Folder], "pkgB": <self::Folder>[self::getResource("/pkgB/lib/") as{TypeError} self::Folder]};
  core::List<core::Map<core::String, self::Folder>> list = <core::Map<core::String, self::Folder>>[<core::String, self::Folder>{"pkgA": self::getResource("/pkgA/lib/") as{TypeError} self::Folder}, <core::String, self::Folder>{"pkgB": self::getResource("/pkgB/lib/") as{TypeError} self::Folder}];
  self::Foo<core::List<self::Folder>> foo = new self::Foo::•<core::List<self::Folder>>(<self::Folder>[self::getResource("/pkgA/lib/") as{TypeError} self::Folder]);
}
