Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(960)

Side by Side Diff: lib/src/packages_io_impl.dart

Issue 2041103005: Cache packageName to base Uri mapping. (Closed) Base URL: https://github.com/dart-lang/package_config@master
Patch Set: Prepare for publishing. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« .gitignore ('K') | « .gitignore ('k') | pubspec.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /// Implementations of [Packages] that can only be used in server based 5 /// Implementations of [Packages] that can only be used in server based
6 /// applications. 6 /// applications.
7 library package_config.packages_io_impl; 7 library package_config.packages_io_impl;
8 8
9 import "dart:collection" show UnmodifiableMapView; 9 import "dart:collection" show UnmodifiableMapView;
10 import "dart:io" show Directory; 10 import "dart:io" show Directory;
11 import "package:path/path.dart" as path; 11 import "package:path/path.dart" as path;
12 import "packages_impl.dart"; 12 import "packages_impl.dart";
13 13
14 /// A [Packages] implementation based on a local directory. 14 /// A [Packages] implementation based on a local directory.
15 class FilePackagesDirectoryPackages extends PackagesBase { 15 class FilePackagesDirectoryPackages extends PackagesBase {
16 final Directory _packageDir; 16 final Directory _packageDir;
17 final Map<String, Uri> _packageToBaseUriMap = <String, Uri>{};
18
17 FilePackagesDirectoryPackages(this._packageDir); 19 FilePackagesDirectoryPackages(this._packageDir);
18 20
19 Uri getBase(String packageName) => 21 Uri getBase(String packageName) {
20 new Uri.file(path.join(_packageDir.path, packageName, '.')); 22 return _packageToBaseUriMap.putIfAbsent(packageName, () {
23 return new Uri.file(path.join(_packageDir.path, packageName, '.'));
24 });
25 }
21 26
22 Iterable<String> _listPackageNames() { 27 Iterable<String> _listPackageNames() {
23 return _packageDir 28 return _packageDir
24 .listSync() 29 .listSync()
25 .where((e) => e is Directory) 30 .where((e) => e is Directory)
26 .map((e) => path.basename(e.path)); 31 .map((e) => path.basename(e.path));
27 } 32 }
28 33
29 Iterable<String> get packages => _listPackageNames(); 34 Iterable<String> get packages => _listPackageNames();
30 35
31 Map<String, Uri> asMap() { 36 Map<String, Uri> asMap() {
32 var result = <String, Uri>{}; 37 var result = <String, Uri>{};
33 for (var packageName in _listPackageNames()) { 38 for (var packageName in _listPackageNames()) {
34 result[packageName] = getBase(packageName); 39 result[packageName] = getBase(packageName);
35 } 40 }
36 return new UnmodifiableMapView<String, Uri>(result); 41 return new UnmodifiableMapView<String, Uri>(result);
37 } 42 }
38 } 43 }
OLDNEW
« .gitignore ('K') | « .gitignore ('k') | pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698