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

Unified Diff: sdk/lib/_internal/pub/lib/src/barback/dependency_computer.dart

Issue 600933004: Precompute untransformed packages when determining trnasformer dependencies. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | sdk/lib/_internal/pub_generated/lib/src/barback/dependency_computer.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/pub/lib/src/barback/dependency_computer.dart
diff --git a/sdk/lib/_internal/pub/lib/src/barback/dependency_computer.dart b/sdk/lib/_internal/pub/lib/src/barback/dependency_computer.dart
index 4609e9c7fdd372cf453cfc016d4b1d49e08690ef..bac5ab5adb3ea5fbc5b42fba7ad74dc5c06514de 100644
--- a/sdk/lib/_internal/pub/lib/src/barback/dependency_computer.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback/dependency_computer.dart
@@ -36,7 +36,20 @@ class DependencyComputer {
/// A cache of the results of [transformersNeededByPackage].
final _transformersNeededByPackages = new Map<String, Set<TransformerId>>();
+ /// The set of all packages that neither use transformers themselves nor
+ /// import packages that use transformers.
+ ///
+ /// This is precomputed before any package computers are loaded.
+ final _untransformedPackages = new Set<String>();
+
DependencyComputer(this._graph) {
+ for (var package in ordered(_graph.packages.keys)) {
+ if (_graph.transitiveDependencies(package).every((dependency) =>
+ dependency.pubspec.transformers.isEmpty)) {
+ _untransformedPackages.add(package);
+ }
+ }
+
ordered(_graph.packages.keys).forEach(_loadPackageComputer);
}
@@ -98,13 +111,10 @@ class DependencyComputer {
/// [packageUri] (a "package:" URI) can be safely imported from an external
/// package.
Set<TransformerId> _transformersNeededByPackageUri(Uri packageUri) {
- // TODO(nweiz): We can do some pre-processing on the package graph (akin to
- // the old ordering dependency computation) to figure out which packages are
- // guaranteed not to require any transformers. That'll let us avoid extra
- // work here and in [_transformersNeededByPackage].
-
var components = p.split(p.fromUri(packageUri.path));
var packageName = components.first;
+ if (_untransformedPackages.contains(packageName)) return new Set();
+
var package = _graph.packages[packageName];
if (package == null) {
// TODO(nweiz): include source range information here.
@@ -131,6 +141,8 @@ class DependencyComputer {
/// transformation may import any dependency or hit any transformer, so we
/// have to assume that it will.
Set<TransformerId> _transformersNeededByPackage(String rootPackage) {
+ if (_untransformedPackages.contains(rootPackage)) return new Set();
+
if (_transformersNeededByPackages.containsKey(rootPackage)) {
return _transformersNeededByPackages[rootPackage];
}
« no previous file with comments | « no previous file | sdk/lib/_internal/pub_generated/lib/src/barback/dependency_computer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698