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

Unified Diff: dart/sdk/lib/_internal/pub/asset/dart/serialize/transformer.dart

Issue 310233002: Expose aggregate transformers in pub. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: code review Created 6 years, 6 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
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);
}
}

Powered by Google App Engine
This is Rietveld 408576698