| Index: dart/sdk/lib/_internal/pub/asset/dart/serialize/transformer.dart
|
| diff --git a/dart/sdk/lib/_internal/pub/asset/dart/serialize/transformer.dart b/dart/sdk/lib/_internal/pub/asset/dart/serialize/transformer.dart
|
| index 901a079317a5f13546fc434bd7b4e628be7a5177..0e4d0c491b0552bdb4bfc26e54bb1bfdc72fdd83 100644
|
| --- a/dart/sdk/lib/_internal/pub/asset/dart/serialize/transformer.dart
|
| +++ b/dart/sdk/lib/_internal/pub/asset/dart/serialize/transformer.dart
|
| @@ -52,23 +52,71 @@ Map _serializeTransformer(Transformer transformer) {
|
| };
|
| }
|
|
|
| +/// Converts [transformer] into a serializable map.
|
| +Map _serializeAggregateTransformer(AggregateTransformer transformer) {
|
| + var port = new ReceivePort();
|
| + port.listen((wrappedMessage) {
|
| + respond(wrappedMessage, (message) {
|
| + if (message['type'] == 'classifyPrimary') {
|
| + return transformer.classifyPrimary(deserializeId(message['id']));
|
| + } else if (message['type'] == 'declareOutputs') {
|
| + return new Future.sync(() {
|
| + return (transformer as DeclaringAggregateTransformer).declareOutputs(
|
| + new ForeignDeclaringAggregateTransform(message['transform']));
|
| + }).then((_) => null);
|
| + } else {
|
| + assert(message['type'] == 'apply');
|
| +
|
| + // Make sure we return null so that if the transformer's [apply] returns
|
| + // a non-serializable value it doesn't cause problems.
|
| + return new Future.sync(() {
|
| + return transformer.apply(
|
| + new ForeignAggregateTransform(message['transform']));
|
| + }).then((_) => null);
|
| + }
|
| + });
|
| + });
|
| +
|
| + var type;
|
| + if (transformer is LazyAggregateTransformer) {
|
| + type = 'LazyAggregateTransformer';
|
| + } else if (transformer is DeclaringAggregateTransformer) {
|
| + type = 'DeclaringAggregateTransformer';
|
| + } else {
|
| + type = 'AggregateTransformer';
|
| + }
|
| +
|
| + return {
|
| + 'type': type,
|
| + 'toString': transformer.toString(),
|
| + 'port': port.sendPort
|
| + };
|
| +}
|
| +
|
| // Converts [group] into a serializable map.
|
| Map _serializeTransformerGroup(TransformerGroup group) {
|
| return {
|
| 'type': 'TransformerGroup',
|
| 'toString': group.toString(),
|
| 'phases': group.phases.map((phase) {
|
| - return phase.map(serializeTransformerOrGroup).toList();
|
| + return phase.map(serializeTransformerLike).toList();
|
| }).toList()
|
| };
|
| }
|
|
|
| -/// Converts [transformerOrGroup] into a serializable map.
|
| -Map serializeTransformerOrGroup(transformerOrGroup) {
|
| - if (transformerOrGroup is Transformer) {
|
| - return _serializeTransformer(transformerOrGroup);
|
| +/// Converts [transformerLike] into a serializable map.
|
| +///
|
| +/// [transformerLike] can be a [Transformer], an [AggregateTransformer], or a
|
| +/// [TransformerGroup].
|
| +Map serializeTransformerLike(transformerLike) {
|
| + if (transformerLike is Transformer) {
|
| + return _serializeTransformer(transformerLike);
|
| + } else if (transformerLike is TransformerGroup) {
|
| + return _serializeTransformerGroup(transformerLike);
|
| } else {
|
| - assert(transformerOrGroup is TransformerGroup);
|
| - return _serializeTransformerGroup(transformerOrGroup);
|
| + // This has to be last, since "transformerLike is AggregateTransformer" will
|
| + // throw on older versions of barback.
|
| + assert(transformerLike is AggregateTransformer);
|
| + return _serializeAggregateTransformer(transformerLike);
|
| }
|
| }
|
|
|