| Index: packages/package_config/lib/src/packages_io_impl.dart
|
| diff --git a/packages/package_config/lib/src/packages_io_impl.dart b/packages/package_config/lib/src/packages_io_impl.dart
|
| index 21b61fdab0591cc483d1af2d53cee5515f659d90..0e9474639420d7552a6f0d524cfd05f71b161121 100644
|
| --- a/packages/package_config/lib/src/packages_io_impl.dart
|
| +++ b/packages/package_config/lib/src/packages_io_impl.dart
|
| @@ -14,15 +14,21 @@ import "packages_impl.dart";
|
| /// A [Packages] implementation based on a local directory.
|
| class FilePackagesDirectoryPackages extends PackagesBase {
|
| final Directory _packageDir;
|
| + final Map<String, Uri> _packageToBaseUriMap = <String, Uri>{};
|
| +
|
| FilePackagesDirectoryPackages(this._packageDir);
|
|
|
| - Uri getBase(String packageName) =>
|
| - new Uri.file(path.join(_packageDir.path, packageName, '.'));
|
| + Uri getBase(String packageName) {
|
| + return _packageToBaseUriMap.putIfAbsent(packageName, () {
|
| + return new Uri.file(path.join(_packageDir.path, packageName, '.'));
|
| + });
|
| + }
|
|
|
| Iterable<String> _listPackageNames() {
|
| - return _packageDir.listSync()
|
| - .where((e) => e is Directory)
|
| - .map((e) => path.basename(e.path));
|
| + return _packageDir
|
| + .listSync()
|
| + .where((e) => e is Directory)
|
| + .map((e) => path.basename(e.path));
|
| }
|
|
|
| Iterable<String> get packages => _listPackageNames();
|
|
|