| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 library barback.transformer.wrapping_aggregate_transformer; | |
| 6 | |
| 7 import 'dart:async'; | |
| 8 | |
| 9 import '../asset/asset_id.dart'; | |
| 10 import '../utils.dart'; | |
| 11 import 'aggregate_transform.dart'; | |
| 12 import 'aggregate_transformer.dart'; | |
| 13 import 'declaring_aggregate_transform.dart'; | |
| 14 import 'declaring_aggregate_transformer.dart'; | |
| 15 import 'declaring_transform.dart'; | |
| 16 import 'declaring_transformer.dart'; | |
| 17 import 'lazy_aggregate_transformer.dart'; | |
| 18 import 'lazy_transformer.dart'; | |
| 19 import 'transform.dart'; | |
| 20 import 'transformer.dart'; | |
| 21 | |
| 22 /// An [AggregateTransformer] that wraps a non-aggregate [Transformer]. | |
| 23 /// | |
| 24 /// Although barback internally works in terms of [AggregateTransformer]s, most | |
| 25 /// transformers only work on individual primary inputs in isolation. We want to | |
| 26 /// allow those transformers to implement the more user-friendly [Transformer] | |
| 27 /// interface. This class makes that possible. | |
| 28 class WrappingAggregateTransformer implements AggregateTransformer { | |
| 29 /// The wrapped transformer. | |
| 30 final Transformer transformer; | |
| 31 | |
| 32 factory WrappingAggregateTransformer(Transformer transformer) { | |
| 33 if (transformer is LazyTransformer) { | |
| 34 return new _LazyWrappingAggregateTransformer( | |
| 35 transformer as LazyTransformer); | |
| 36 } else if (transformer is DeclaringTransformer) { | |
| 37 return new _DeclaringWrappingAggregateTransformer( | |
| 38 transformer as DeclaringTransformer); | |
| 39 } else { | |
| 40 return new WrappingAggregateTransformer._(transformer); | |
| 41 } | |
| 42 } | |
| 43 | |
| 44 WrappingAggregateTransformer._(this.transformer); | |
| 45 | |
| 46 Future<String> classifyPrimary(AssetId id) { | |
| 47 return syncFuture(() => transformer.isPrimary(id)) | |
| 48 .then((isPrimary) => isPrimary ? id.path : null); | |
| 49 } | |
| 50 | |
| 51 Future apply(AggregateTransform aggregateTransform) { | |
| 52 return newTransform(aggregateTransform) | |
| 53 .then((transform) => transformer.apply(transform)); | |
| 54 } | |
| 55 | |
| 56 String toString() => transformer.toString(); | |
| 57 } | |
| 58 | |
| 59 /// A wrapper for [DeclaringTransformer]s that implements | |
| 60 /// [DeclaringAggregateTransformer]. | |
| 61 class _DeclaringWrappingAggregateTransformer | |
| 62 extends WrappingAggregateTransformer | |
| 63 implements DeclaringAggregateTransformer { | |
| 64 final DeclaringTransformer _declaring; | |
| 65 | |
| 66 _DeclaringWrappingAggregateTransformer(DeclaringTransformer transformer) | |
| 67 : _declaring = transformer, | |
| 68 super._(transformer as Transformer); | |
| 69 | |
| 70 Future declareOutputs(DeclaringAggregateTransform aggregateTransform) { | |
| 71 return newDeclaringTransform(aggregateTransform).then((transform) { | |
| 72 return (transformer as DeclaringTransformer).declareOutputs(transform); | |
| 73 }); | |
| 74 } | |
| 75 } | |
| 76 | |
| 77 /// A wrapper for [LazyTransformer]s that implements | |
| 78 /// [LazyAggregateTransformer]. | |
| 79 class _LazyWrappingAggregateTransformer | |
| 80 extends _DeclaringWrappingAggregateTransformer | |
| 81 implements LazyAggregateTransformer { | |
| 82 _LazyWrappingAggregateTransformer(LazyTransformer transformer) | |
| 83 : super(transformer); | |
| 84 } | |
| OLD | NEW |