Skip to content

Commit c94f239

Browse files
author
Tim Blasi
committed
fix(dart/transform): Write correct ng_deps without deferred imports
Previously, the presence of a `deferred` import would cause us to output incomplete `.ng_deps.dart` code. Closes angular#4587
1 parent 5600a95 commit c94f239

File tree

3 files changed

+59
-8
lines changed

3 files changed

+59
-8
lines changed

modules_dart/transform/lib/src/transform/common/code/ng_deps_code.dart

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -140,15 +140,13 @@ abstract class NgDepsWriterMixin
140140
..prefix = REFLECTOR_PREFIX);
141141

142142
// We do not support `partUris`, so skip outputting them.
143-
for (var importModel in model.imports) {
144-
// Ignore deferred imports here so as to not load the deferred libraries
145-
// code in the current library causing much of the code to not be
146-
// deferred. Instead `DeferredRewriter` will rewrite the code as to load
147-
// `ng_deps` in a deferred way.
148-
if (importModel.isDeferred) return;
149143

150-
writeImportModel(importModel);
151-
}
144+
// Ignore deferred imports here so as to not load the deferred libraries
145+
// code in the current library causing much of the code to not be
146+
// deferred. Instead `DeferredRewriter` will rewrite the code as to load
147+
// `ng_deps` in a deferred way.
148+
model.imports.where((i) => !i.isDeferred).forEach(writeImportModel);
149+
152150
writeExportModel(new ExportModel()..uri = model.sourceFile);
153151
model.exports.forEach(writeExportModel);
154152

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
library angular2.test.transform.common.code.ng_deps_code_tests;
2+
3+
import 'package:analyzer/analyzer.dart';
4+
import 'package:angular2/src/transform/common/code/ng_deps_code.dart';
5+
import 'package:angular2/src/transform/common/model/import_export_model.pb.dart';
6+
import 'package:angular2/src/transform/common/model/ng_deps_model.pb.dart';
7+
import 'package:guinness/guinness.dart';
8+
9+
main() => allTests();
10+
11+
void allTests() {
12+
describe('writeNgDepsModel', () {
13+
it('should output parsable code', () async {
14+
final ngDeps = new NgDepsModel()
15+
..libraryUri = 'test.foo'
16+
..imports.add(new ImportModel()
17+
..uri = 'bar.dart'
18+
..prefix = 'dep');
19+
20+
final buf = new StringBuffer();
21+
final writer = new NgDepsWriter(buf);
22+
writer.writeNgDepsModel(ngDeps);
23+
24+
var compilationUnit = parseCompilationUnit(buf.toString());
25+
26+
expect(compilationUnit).toBeNotNull();
27+
expect(compilationUnit.declarations).toBeNotNull();
28+
expect(compilationUnit.declarations.length > 0).toBeTrue();
29+
});
30+
31+
it('should output parsable code with deferred imports', () async {
32+
// Regression test for i/4587.
33+
final ngDeps = new NgDepsModel()
34+
..libraryUri = 'test.foo'
35+
..imports.add(new ImportModel()
36+
..uri = 'bar.dart'
37+
..isDeferred = true
38+
..prefix = 'dep');
39+
40+
final buf = new StringBuffer();
41+
final writer = new NgDepsWriter(buf);
42+
writer.writeNgDepsModel(ngDeps);
43+
44+
var compilationUnit = parseCompilationUnit(buf.toString());
45+
46+
expect(compilationUnit).toBeNotNull();
47+
expect(compilationUnit.declarations).toBeNotNull();
48+
expect(compilationUnit.declarations.length > 0).toBeTrue();
49+
});
50+
});
51+
}

modules_dart/transform/test/transform/transform.server.spec.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:unittest/unittest.dart' hide expect;
55
import 'package:unittest/vm_config.dart';
66

77
import 'common/async_string_writer_tests.dart' as asyncStringWriter;
8+
import 'common/code/ng_deps_code_tests.dart' as ngDepsCode;
89
import 'common/ng_meta_test.dart' as ngMetaTest;
910
import 'common/url_resolver_tests.dart' as urlResolver;
1011
import 'bind_generator/all_tests.dart' as bindGenerator;
@@ -20,6 +21,7 @@ import 'stylesheet_compiler/all_tests.dart' as stylesheetCompiler;
2021
main() {
2122
useVMConfiguration();
2223
describe('AsyncStringWriter', asyncStringWriter.allTests);
24+
describe('NgDepsCode', ngDepsCode.allTests);
2325
describe('NgMeta', ngMetaTest.allTests);
2426
describe('Bind Generator', bindGenerator.allTests);
2527
describe('Directive Metadata Linker', directiveMeta.allTests);

0 commit comments

Comments
 (0)