Index: sdk/lib/_internal/pub/lib/src/barback/load_all_transformers.dart |
diff --git a/sdk/lib/_internal/pub/lib/src/barback/load_all_transformers.dart b/sdk/lib/_internal/pub/lib/src/barback/load_all_transformers.dart |
index 2f9414b6c8029eea2781815a26d8ceaa8ed68b23..e954da83346936396ad1123c5390f66c81a6d8f7 100644 |
--- a/sdk/lib/_internal/pub/lib/src/barback/load_all_transformers.dart |
+++ b/sdk/lib/_internal/pub/lib/src/barback/load_all_transformers.dart |
@@ -86,7 +86,7 @@ Future loadAllTransformers(BarbackServer server, PackageGraph graph) { |
var transformers = [[rewrite]]; |
return Future.forEach(graph.packages[package].pubspec.transformers, |
(phase) { |
- return Future.wait(phase.where((id) => id.package == package) |
+ return Future.wait(phase.where((id) => id.asset.package == package) |
.map(loader.load)).then((_) { |
transformers.add(unionAll(phase.map( |
(id) => loader.transformersFor(id)))); |
@@ -148,7 +148,7 @@ Map<String, Set<String>> _computeOrderingDeps(PackageGraph graph) { |
/// Returns the set of transformer dependencies for [package]. |
Set<String> _transformerDeps(PackageGraph graph, String package) => |
unionAll(graph.packages[package].pubspec.transformers) |
- .map((id) => id.package).toSet(); |
+ .map((id) => id.asset.package).toSet(); |
/// Returns an [ApplicationException] describing an ordering dependency cycle |
/// detected in [graph]. |
@@ -167,7 +167,7 @@ ApplicationException _cycleError(PackageGraph graph, String dependee, |
return new ApplicationException("Transformer cycle detected:\n" + |
pairs(path).map((pair) { |
var transformers = unionAll(graph.packages[pair.first].pubspec.transformers) |
- .where((id) => id.package == pair.last) |
+ .where((id) => id.asset.package == pair.last) |
.map(idToLibraryIdentifier).toList(); |
if (transformers.isEmpty) { |
return " ${pair.first} depends on ${pair.last}"; |
@@ -177,15 +177,16 @@ ApplicationException _cycleError(PackageGraph graph, String dependee, |
}).join("\n")); |
} |
-/// Returns a map from each package name in [graph] to the asset ids of all |
-/// transformers exposed by that package and used by other packages. |
-Map<String, Set<AssetId>> _computePackageTransformers(PackageGraph graph) { |
+/// Returns a map from each package name in [graph] to the transformer ids of |
+/// all transformers exposed by that package and used by other packages. |
+Map<String, Set<TransformerId>> _computePackageTransformers( |
+ PackageGraph graph) { |
var packageTransformers = listToMap(graph.packages.values, |
- (package) => package.name, (_) => new Set<AssetId>()); |
+ (package) => package.name, (_) => new Set<TransformerId>()); |
for (var package in graph.packages.values) { |
for (var phase in package.pubspec.transformers) { |
for (var id in phase) { |
- packageTransformers[id.package].add(id); |
+ packageTransformers[id.asset.package].add(id); |
} |
} |
} |
@@ -196,11 +197,11 @@ Map<String, Set<AssetId>> _computePackageTransformers(PackageGraph graph) { |
class _TransformerLoader { |
final BarbackServer _server; |
- /// The loaded transformers defined in the library identified by each asset |
- /// id. |
- final _transformers = new Map<AssetId, Set<Transformer>>(); |
+ /// The loaded transformers defined in the library identified by each |
+ /// transformer id. |
+ final _transformers = new Map<TransformerId, Set<Transformer>>(); |
- /// The packages that use each transformer id. |
+ /// The packages that use each transformer asset id. |
/// |
/// Used for error reporting. |
final _transformerUsers = new Map<AssetId, Set<String>>(); |
@@ -208,29 +209,35 @@ class _TransformerLoader { |
_TransformerLoader(this._server, PackageGraph graph) { |
for (var package in graph.packages.values) { |
for (var id in unionAll(package.pubspec.transformers)) { |
- _transformerUsers.putIfAbsent(id, () => new Set<String>()) |
+ _transformerUsers.putIfAbsent(id.asset, () => new Set<String>()) |
.add(package.name); |
} |
} |
} |
- /// Loads the transformer(s) defined in the asset [id]. |
+ /// Loads the transformer(s) defined in [id]. |
/// |
/// Once the returned future completes, these transformers can be retrieved |
/// using [transformersFor]. If [id] doesn't define any transformers, this |
/// will complete to an error. |
- Future load(AssetId id) { |
+ Future load(TransformerId id) { |
if (_transformers.containsKey(id)) return new Future.value(); |
+ // TODO(nweiz): load multiple instances of the same transformer from the |
+ // same isolate rather than spinning up a separate isolate for each one. |
return loadTransformers(_server, id).then((transformers) { |
if (!transformers.isEmpty) { |
_transformers[id] = transformers; |
return; |
} |
+ var message = "No transformers"; |
+ if (id.configuration != null) { |
+ message += " that accept configuration"; |
+ } |
throw new ApplicationException( |
- "No transformers were defined in ${idToPackageUri(id)},\n" |
- "required by ${ordered(_transformerUsers[id]).join(', ')}."); |
+ "$message were defined in ${idToPackageUri(id.asset)},\n" |
+ "required by ${ordered(_transformerUsers[id.asset]).join(', ')}."); |
}); |
} |
@@ -238,7 +245,7 @@ class _TransformerLoader { |
/// |
/// It's an error to call this before [load] is called with [id] and the |
/// future it returns has completed. |
- Set<Transformers> transformersFor(AssetId id) { |
+ Set<Transformers> transformersFor(TransformerId id) { |
assert(_transformers.containsKey(id)); |
return _transformers[id]; |
} |