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

Unified Diff: dart/sdk/lib/_internal/pub/lib/src/barback/foreign_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/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);
+ }
}

Powered by Google App Engine
This is Rietveld 408576698