Index: dart/sdk/lib/_internal/pub/lib/src/barback/foreign_transformer.dart |
diff --git a/dart/sdk/lib/_internal/pub/lib/src/barback/foreign_transformer.dart b/dart/sdk/lib/_internal/pub/lib/src/barback/foreign_transformer.dart |
index 2fc1a0fbf3a70a25b14dea6ee7b3af768f21e41a..bbe0acd73a17b4ed1c791df700bc4a78ad27ba1e 100644 |
--- a/dart/sdk/lib/_internal/pub/lib/src/barback/foreign_transformer.dart |
+++ b/dart/sdk/lib/_internal/pub/lib/src/barback/foreign_transformer.dart |
@@ -12,6 +12,7 @@ import 'package:barback/barback.dart'; |
import '../../../asset/dart/serialize.dart'; |
import '../barback.dart'; |
import 'excluding_transformer.dart'; |
+import 'excluding_aggregate_transformer.dart'; |
/// A wrapper for a transformer that's in a different isolate. |
class _ForeignTransformer extends Transformer { |
@@ -64,6 +65,58 @@ class _ForeignLazyTransformer extends _ForeignDeclaringTransformer |
: super(map); |
} |
+/// A wrapper for an aggregate transformer that's in a different isolate. |
+class _ForeignAggregateTransformer extends AggregateTransformer { |
+ /// The port with which we communicate with the child isolate. |
+ /// |
+ /// This port and all messages sent across it are specific to this |
+ /// transformer. |
+ final SendPort _port; |
+ |
+ /// The result of calling [toString] on the transformer in the isolate. |
+ final String _toString; |
+ |
+ _ForeignAggregateTransformer(Map map) |
+ : _port = map['port'], |
+ _toString = map['toString']; |
+ |
+ Future<String> classifyPrimary(AssetId id) { |
+ return call(_port, { |
+ 'type': 'classifyPrimary', |
+ 'id': serializeId(id) |
+ }); |
+ } |
+ |
+ Future apply(AggregateTransform transform) { |
+ return call(_port, { |
+ 'type': 'apply', |
+ 'transform': serializeAggregateTransform(transform) |
+ }); |
+ } |
+ |
+ String toString() => _toString; |
+} |
+ |
+class _ForeignDeclaringAggregateTransformer extends _ForeignAggregateTransformer |
+ implements DeclaringAggregateTransformer { |
+ _ForeignDeclaringAggregateTransformer(Map map) |
+ : super(map); |
+ |
+ Future declareOutputs(DeclaringAggregateTransform transform) { |
+ return call(_port, { |
+ 'type': 'declareOutputs', |
+ 'transform': serializeDeclaringAggregateTransform(transform) |
+ }); |
+ } |
+} |
+ |
+class _ForeignLazyAggregateTransformer |
+ extends _ForeignDeclaringAggregateTransformer |
+ implements LazyAggregateTransformer { |
+ _ForeignLazyAggregateTransformer(Map map) |
+ : super(map); |
+} |
+ |
/// A wrapper for a transformer group that's in a different isolate. |
class _ForeignGroup implements TransformerGroup { |
final Iterable<Iterable> phases; |
@@ -73,7 +126,7 @@ class _ForeignGroup implements TransformerGroup { |
_ForeignGroup(TransformerId id, Map map) |
: phases = map['phases'].map((phase) { |
- return phase.map((transformer) => deserializeTransformerOrGroup( |
+ return phase.map((transformer) => deserializeTransformerLike( |
transformer, id)).toList(); |
}).toList(), |
_toString = map['toString']; |
@@ -81,8 +134,9 @@ class _ForeignGroup implements TransformerGroup { |
String toString() => _toString; |
} |
-/// Converts a serializable map into a [Transformer] or a [TransformerGroup]. |
-deserializeTransformerOrGroup(Map map, TransformerId id) { |
+/// Converts a serializable map into a [Transformer], an [AggregateTransformer], |
+/// or a [TransformerGroup]. |
+deserializeTransformerLike(Map map, TransformerId id) { |
var transformer; |
switch(map['type']) { |
case 'TransformerGroup': return new _ForeignGroup(id, map); |
@@ -95,8 +149,23 @@ deserializeTransformerOrGroup(Map map, TransformerId id) { |
case 'LazyTransformer': |
transformer = new _ForeignLazyTransformer(map); |
break; |
+ case 'AggregateTransformer': |
+ transformer = new _ForeignAggregateTransformer(map); |
+ break; |
+ case 'DeclaringAggregateTransformer': |
+ transformer = new _ForeignDeclaringAggregateTransformer(map); |
+ break; |
+ case 'LazyAggregateTransformer': |
+ transformer = new _ForeignLazyAggregateTransformer(map); |
+ break; |
default: assert(false); |
} |
- return ExcludingTransformer.wrap(transformer, id.includes, id.excludes); |
+ if (transformer is Transformer) { |
+ return ExcludingTransformer.wrap(transformer, id.includes, id.excludes); |
+ } else { |
+ assert(transformer is AggregateTransformer); |
+ return ExcludingAggregateTransformer.wrap( |
+ transformer, id.includes, id.excludes); |
+ } |
} |