X Tutup
Skip to content

Commit 2acc1ad

Browse files
author
Tim Blasi
committed
feat(dart/transform): Declare transformer outputs
Update transformers to declare a superset of their outputs. This helps barback compute the Asset graph and can lead to faster transformation.
1 parent b9ea394 commit 2acc1ad

File tree

7 files changed

+58
-9
lines changed

7 files changed

+58
-9
lines changed

modules_dart/transform/lib/src/transform/bind_generator/transformer.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,19 @@ import 'generator.dart';
1616
///
1717
/// These setters are registered in the same `setupReflection` function with
1818
/// the `registerType` calls.
19-
class BindGenerator extends Transformer {
19+
class BindGenerator extends Transformer implements DeclaringTransformer {
2020
final TransformerOptions options;
2121

2222
BindGenerator(this.options);
2323

2424
@override
2525
bool isPrimary(AssetId id) => id.path.endsWith(DEPS_EXTENSION);
2626

27+
@override
28+
declareOutputs(DeclaringTransform transform) {
29+
transform.declareOutput(transform.primaryId);
30+
}
31+
2732
@override
2833
Future apply(Transform transform) async {
2934
await log.initZoned(transform, () async {

modules_dart/transform/lib/src/transform/deferred_rewriter/transformer.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import 'rewriter.dart';
1313
/// Transformer responsible for rewriting deferred library loads to enable
1414
/// initializing the reflector in a deferred way to keep the code with the
1515
/// deferred library.
16-
class DeferredRewriter extends Transformer {
16+
class DeferredRewriter extends Transformer implements DeclaringTransformer {
1717
final TransformerOptions options;
1818

1919
DeferredRewriter(this.options);
@@ -22,6 +22,11 @@ class DeferredRewriter extends Transformer {
2222
bool isPrimary(AssetId id) =>
2323
id.extension.endsWith('dart') && !id.path.endsWith(DEPS_EXTENSION);
2424

25+
@override
26+
declareOutputs(DeclaringTransform transform) {
27+
transform.declareOutput(transform.primaryId);
28+
}
29+
2530
@override
2631
Future apply(Transform transform) async {
2732
await log.initZoned(transform, () async {

modules_dart/transform/lib/src/transform/directive_linker/transformer.dart

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,17 @@ import 'linker.dart';
1414
/// {@link DirectiveProcessor} and ensuring that the generated calls to
1515
/// `setupReflection` call the necessary `setupReflection` method in all
1616
/// dependencies.
17-
class DirectiveLinker extends Transformer {
17+
class DirectiveLinker extends Transformer implements DeclaringTransformer {
1818
DirectiveLinker();
1919

2020
@override
2121
bool isPrimary(AssetId id) => id.path.endsWith(DEPS_EXTENSION);
2222

23+
@override
24+
declareOutputs(DeclaringTransform transform) {
25+
transform.declareOutput(transform.primaryId);
26+
}
27+
2328
@override
2429
Future apply(Transform transform) async {
2530
await log.initZoned(transform, () async {
@@ -37,12 +42,18 @@ class DirectiveLinker extends Transformer {
3742

3843
/// Transformer responsible for removing unnecessary `.ng_deps.dart` files
3944
/// created by {@link DirectiveProcessor}.
40-
class EmptyNgDepsRemover extends Transformer {
45+
class EmptyNgDepsRemover extends Transformer implements DeclaringTransformer {
4146
EmptyNgDepsRemover();
4247

4348
@override
4449
bool isPrimary(AssetId id) => id.path.endsWith(DEPS_EXTENSION);
4550

51+
/// We occasionally consume the primary input, but that depends on the
52+
/// contents of the file, so we conservatively do not declare any outputs nor
53+
/// consumption to ensure that we declare a superset of our actual outputs.
54+
@override
55+
declareOutputs(DeclaringTransform transform) => null;
56+
4657
@override
4758
Future apply(Transform transform) async {
4859
await log.initZoned(transform, () async {

modules_dart/transform/lib/src/transform/directive_metadata_extractor/transformer.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,20 @@ import 'extractor.dart';
1414
/// {@link DirectiveProcessor} and creating associated `.ng_meta.dart` files.
1515
/// These files contain commented Json-formatted representations of all
1616
/// `Directive`s in the associated file.
17-
class DirectiveMetadataExtractor extends Transformer {
17+
class DirectiveMetadataExtractor extends Transformer
18+
implements DeclaringTransformer {
1819
final _encoder = const JsonEncoder.withIndent(' ');
1920

2021
DirectiveMetadataExtractor();
2122

2223
@override
2324
bool isPrimary(AssetId id) => id.path.endsWith(DEPS_EXTENSION);
2425

26+
@override
27+
declareOutputs(DeclaringTransform transform) {
28+
transform.declareOutput(_outputAssetId(transform.primaryId));
29+
}
30+
2531
@override
2632
Future apply(Transform transform) async {
2733
await log.initZoned(transform, () async {

modules_dart/transform/lib/src/transform/directive_processor/transformer.dart

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,25 @@ import 'rewriter.dart';
2222
///
2323
/// This transformer is the first phase in a two-phase transform. It should
2424
/// be followed by {@link DirectiveLinker}.
25-
class DirectiveProcessor extends Transformer {
25+
class DirectiveProcessor extends Transformer implements DeclaringTransformer {
2626
final TransformerOptions options;
2727

2828
DirectiveProcessor(this.options);
2929

3030
@override
3131
bool isPrimary(AssetId id) => id.extension.endsWith('dart');
3232

33+
/// We don't always output these, but providing a superset of our outputs
34+
/// should be safe. Barback will just have to wait until `apply` finishes to
35+
/// determine that one or the other will not be emitted.
36+
@override
37+
declareOutputs(DeclaringTransform transform) {
38+
transform.declareOutput(
39+
transform.primaryId.changeExtension(ALIAS_EXTENSION));
40+
transform.declareOutput(
41+
transform.primaryId.changeExtension(DEPS_EXTENSION));
42+
}
43+
3344
@override
3445
Future apply(Transform transform) async {
3546
await log.initZoned(transform, () async {

modules_dart/transform/lib/src/transform/reflection_remover/transformer.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import 'remove_reflection_capabilities.dart';
1919
/// have already been run and that a .ng_deps.dart file has been generated for
2020
/// {@link options.entryPoint}. The instantiation of {@link ReflectionCapabilities} is
2121
/// replaced by calling `setupReflection` in that .ng_deps.dart file.
22-
class ReflectionRemover extends Transformer {
22+
class ReflectionRemover extends Transformer implements DeclaringTransformer {
2323
final TransformerOptions options;
2424

2525
ReflectionRemover(this.options);
@@ -28,6 +28,11 @@ class ReflectionRemover extends Transformer {
2828
bool isPrimary(AssetId id) => options.entryPointGlobs != null &&
2929
options.entryPointGlobs.any((g) => g.matches(id.path));
3030

31+
@override
32+
declareOutputs(DeclaringTransform transform) {
33+
transform.declareOutput(transform.primaryId);
34+
}
35+
3136
@override
3237
Future apply(Transform transform) async {
3338
await log.initZoned(transform, () async {

modules_dart/transform/lib/src/transform/template_compiler/transformer.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,19 @@ import 'generator.dart';
1818
/// extracting information about what reflection is necessary to render and
1919
/// use that template. It then generates code in place of those reflective
2020
/// accesses.
21-
class TemplateCompiler extends Transformer {
21+
class TemplateCompiler extends Transformer implements DeclaringTransformer {
2222
final TransformerOptions options;
2323

2424
TemplateCompiler(this.options);
2525

2626
@override
2727
bool isPrimary(AssetId id) => id.path.endsWith(DEPS_EXTENSION);
2828

29+
@override
30+
declareOutputs(DeclaringTransform transform) {
31+
transform.declareOutput(transform.primaryId);
32+
}
33+
2934
@override
3035
Future apply(Transform transform) async {
3136
await log.initZoned(transform, () async {
@@ -34,7 +39,8 @@ class TemplateCompiler extends Transformer {
3439
var reader = new AssetReader.fromTransform(transform);
3540
var transformedCode = formatter.format(await processTemplates(reader, id,
3641
generateChangeDetectors: options.generateChangeDetectors,
37-
reflectPropertiesAsAttributes: options.reflectPropertiesAsAttributes));
42+
reflectPropertiesAsAttributes:
43+
options.reflectPropertiesAsAttributes));
3844
transform.addOutput(new Asset.fromString(id, transformedCode));
3945
});
4046
}

0 commit comments

Comments
 (0)
X Tutup