| 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];
|
| }
|
|
|