X Tutup
Skip to content

Commit 27ead8c

Browse files
author
Tim Blasi
committed
feat(dart/transform): Do not declare outputs
Experience shows that for large projects, declaring transformer outputs can cause ~10x slowdown. Remove output declarations to avoid this.
1 parent 1caccc4 commit 27ead8c

File tree

9 files changed

+8
-83
lines changed

9 files changed

+8
-83
lines changed

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,20 @@ import 'generator.dart';
1616
///
1717
/// These setters are registered in the same `setupReflection` function with
1818
/// the `registerType` calls.
19-
class BindGenerator extends Transformer implements DeclaringTransformer {
19+
class BindGenerator extends Transformer {
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.consumePrimary();
30-
transform.declareOutput(transform.primaryId);
31-
}
32-
3327
@override
3428
Future apply(Transform transform) async {
3529
await log.initZoned(transform, () async {
3630
var primaryId = transform.primaryInput.id;
3731
var reader = new AssetReader.fromTransform(transform);
3832
var transformedCode = await createNgSettersAndGetters(reader, primaryId);
39-
transform.consumePrimary();
4033
transform.addOutput(new Asset.fromString(
4134
primaryId, formatter.format(transformedCode, uri: primaryId.path)));
4235
});

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

Lines changed: 1 addition & 10 deletions
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 implements DeclaringTransformer {
16+
class DeferredRewriter extends Transformer {
1717
final TransformerOptions options;
1818

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

25-
@override
26-
declareOutputs(DeclaringTransform transform) {
27-
transform.consumePrimary();
28-
transform.declareOutput(transform.primaryId);
29-
}
30-
3125
@override
3226
Future apply(Transform transform) async {
3327
await log.initZoned(transform, () async {
3428
var asset = transform.primaryInput;
3529
var reader = new AssetReader.fromTransform(transform);
3630
var transformedCode = await rewriteDeferredLibraries(reader, asset.id);
37-
transform.consumePrimary();
3831
if (transformedCode != null) {
3932
transform.addOutput(new Asset.fromString(asset.id, transformedCode));
40-
} else {
41-
transform.addOutput(asset);
4233
}
4334
});
4435
}

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

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,19 @@ import 'ng_meta_linker.dart';
2020
///
2121
/// See `common/ng_meta.dart` for the JSON format of these files are serialized
2222
/// to.
23-
class DirectiveMetadataLinker extends Transformer
24-
implements DeclaringTransformer {
23+
class DirectiveMetadataLinker extends Transformer {
2524
final _encoder = const JsonEncoder.withIndent(' ');
2625

2726
@override
2827
bool isPrimary(AssetId id) => id.path.endsWith(META_EXTENSION);
2928

30-
@override
31-
declareOutputs(DeclaringTransform transform) {
32-
// TODO(kegluenq): We should consume this, but doing so causes barback to
33-
// incorrectly determine what assets are available in this phase.
34-
// transform.consumePrimary();
35-
transform.declareOutput(transform.primaryId);
36-
transform.declareOutput(_depsAssetId(transform.primaryId));
37-
}
38-
3929
@override
4030
Future apply(Transform transform) {
4131
return log.initZoned(transform, () {
4232
var primaryId = transform.primaryInput.id;
4333

4434
return linkDirectiveMetadata(
4535
new AssetReader.fromTransform(transform), primaryId).then((ngMeta) {
46-
// See above
47-
// transform.consumePrimary();
4836
if (ngMeta != null) {
4937
if (!ngMeta.types.isEmpty || !ngMeta.aliases.isEmpty) {
5038
transform.addOutput(new Asset.fromString(

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

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import 'rewriter.dart';
2121
///
2222
/// This transformer is the first phase in a two-phase transform. It should
2323
/// be followed by {@link DirectiveLinker}.
24-
class DirectiveProcessor extends Transformer implements DeclaringTransformer {
24+
class DirectiveProcessor extends Transformer {
2525
final TransformerOptions options;
2626
final _encoder = const JsonEncoder.withIndent(' ');
2727

@@ -30,14 +30,6 @@ class DirectiveProcessor extends Transformer implements DeclaringTransformer {
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(_ngMetaAssetId(transform.primaryId));
39-
}
40-
4133
@override
4234
Future apply(Transform transform) async {
4335
Html5LibDomAdapter.makeCurrent();

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import 'package:barback/barback.dart';
1717
import 'package:dart_style/dart_style.dart';
1818

1919
/// Processes .dart files and inlines `templateUrl` and styleUrls` values.
20-
class InlinerForTest extends Transformer implements DeclaringTransformer {
20+
class InlinerForTest extends Transformer {
2121
final DartFormatter _formatter;
2222
final AnnotationMatcher _annotationMatcher;
2323

@@ -28,17 +28,10 @@ class InlinerForTest extends Transformer implements DeclaringTransformer {
2828
@override
2929
bool isPrimary(AssetId id) => id.extension.endsWith('dart');
3030

31-
@override
32-
declareOutputs(DeclaringTransform transform) {
33-
transform.consumePrimary();
34-
transform.declareOutput(transform.primaryId);
35-
}
36-
3731
@override
3832
Future apply(Transform transform) async {
3933
return initZoned(transform, () async {
4034
var primaryId = transform.primaryInput.id;
41-
transform.consumePrimary();
4235
var inlinedCode = await inline(new AssetReader.fromTransform(transform),
4336
primaryId, _annotationMatcher);
4437
if (inlinedCode == null || inlinedCode.isEmpty) {

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

Lines changed: 1 addition & 8 deletions
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 implements DeclaringTransformer {
22+
class ReflectionRemover extends Transformer {
2323
final TransformerOptions options;
2424

2525
ReflectionRemover(this.options);
@@ -28,12 +28,6 @@ class ReflectionRemover extends Transformer implements DeclaringTransformer {
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.consumePrimary();
34-
transform.declareOutput(transform.primaryId);
35-
}
36-
3731
@override
3832
Future apply(Transform transform) async {
3933
await log.initZoned(transform, () async {
@@ -51,7 +45,6 @@ class ReflectionRemover extends Transformer implements DeclaringTransformer {
5145
var transformedCode = await removeReflectionCapabilities(
5246
new AssetReader.fromTransform(transform), primaryId,
5347
mirrorMode: mirrorMode, writeStaticInit: writeStaticInit);
54-
transform.consumePrimary();
5548
transform.addOutput(new Asset.fromString(primaryId, transformedCode));
5649
});
5750
}

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,14 @@ import 'package:barback/barback.dart';
1212
import 'processor.dart';
1313

1414
/// Pre-compiles CSS stylesheet files to Dart code for Angular 2.
15-
class StylesheetCompiler extends Transformer implements DeclaringTransformer {
15+
class StylesheetCompiler extends Transformer {
1616
StylesheetCompiler();
1717

1818
@override
1919
bool isPrimary(AssetId id) {
2020
return id.path.endsWith(CSS_EXTENSION);
2121
}
2222

23-
@override
24-
declareOutputs(DeclaringTransform transform) {
25-
transform.declareOutput(nonShimmedStylesheetAssetId(transform.primaryId));
26-
transform.declareOutput(shimmedStylesheetAssetId(transform.primaryId));
27-
}
28-
2923
@override
3024
Future apply(Transform transform) async {
3125
await log.initZoned(transform, () async {

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

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,14 @@ 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 implements DeclaringTransformer {
21+
class TemplateCompiler extends Transformer {
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.consumePrimary();
32-
transform.declareOutput(transform.primaryId);
33-
transform.declareOutput(templatesAssetId(transform.primaryId));
34-
}
35-
3629
@override
3730
Future apply(Transform transform) async {
3831
await log.initZoned(transform, () async {
@@ -41,7 +34,6 @@ class TemplateCompiler extends Transformer implements DeclaringTransformer {
4134
var reader = new AssetReader.fromTransform(transform);
4235
var outputs = await processTemplates(reader, primaryId,
4336
reflectPropertiesAsAttributes: options.reflectPropertiesAsAttributes);
44-
transform.consumePrimary();
4537
var ngDepsCode = '';
4638
var templatesCode = '';
4739
if (outputs != null) {

modules_dart/transform/test/transform/stylesheet_compiler/all_tests.dart

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,6 @@ allTests() {
4141
.toBe(false);
4242
});
4343

44-
it('should declare outputs', () {
45-
var transform = new FakeDeclaringTransform()
46-
..primaryId = new AssetId('somepackage', 'lib/style.css');
47-
subject.declareOutputs(transform);
48-
expect(transform.outputs.length).toBe(2);
49-
expect(transform.outputs[0].toString())
50-
.toEqual('somepackage|lib/style.css.dart');
51-
expect(transform.outputs[1].toString())
52-
.toEqual('somepackage|lib/style.css.shim.dart');
53-
});
54-
5544
it('should compile stylesheets', () async {
5645
var cssFile = new Asset.fromString(
5746
new AssetId('somepackage', 'lib/style.css'), SIMPLE_CSS);

0 commit comments

Comments
 (0)
X Tutup