From 6be95ae88ade2c7542b6efb740c9f8d575115b79 Mon Sep 17 00:00:00 2001 From: Tim Blasi Date: Mon, 19 Oct 2015 13:49:24 -0700 Subject: [PATCH] fix(dart/transform): Fix issue with deferred in .ng_deps Fix an issue in the linking step which prevents libraries from being imported as `deferred`. --- .../ng_deps_linker.dart | 4 +++- .../directive_metadata_linker/all_tests.dart | 18 +++++++++++++++++ .../test/transform/integration/all_tests.dart | 3 ++- .../integration/deferred_files/bar.dart | 2 +- .../integration/deferred_files/dep.dart | 6 ++++++ .../deferred_files/expected/bar.dart | 17 ---------------- .../deferred_files/expected/output.dart | 20 +++++++++++++++++++ 7 files changed, 50 insertions(+), 20 deletions(-) create mode 100644 modules_dart/transform/test/transform/integration/deferred_files/dep.dart delete mode 100644 modules_dart/transform/test/transform/integration/deferred_files/expected/bar.dart diff --git a/modules_dart/transform/lib/src/transform/directive_metadata_linker/ng_deps_linker.dart b/modules_dart/transform/lib/src/transform/directive_metadata_linker/ng_deps_linker.dart index cd1458d449..531057a11d 100644 --- a/modules_dart/transform/lib/src/transform/directive_metadata_linker/ng_deps_linker.dart +++ b/modules_dart/transform/lib/src/transform/directive_metadata_linker/ng_deps_linker.dart @@ -65,7 +65,9 @@ bool _isNotDartDirective(dynamic model) => !isDartCoreUri(model.uri); /// associated `.ng_deps.json` file, if one exists. Future> _processNgImports(NgDepsModel model, AssetReader reader, AssetId assetId, UrlResolver resolver) async { - final importsAndExports = new List.from(model.imports)..addAll(model.exports); + final importsAndExports = + new List.from(model.imports.where((i) => !i.isDeferred)) + ..addAll(model.exports); final retVal = {}; final assetUri = toAssetUri(assetId); return Future diff --git a/modules_dart/transform/test/transform/directive_metadata_linker/all_tests.dart b/modules_dart/transform/test/transform/directive_metadata_linker/all_tests.dart index f5e23b45bd..2f46857683 100644 --- a/modules_dart/transform/test/transform/directive_metadata_linker/all_tests.dart +++ b/modules_dart/transform/test/transform/directive_metadata_linker/all_tests.dart @@ -164,6 +164,24 @@ void allTests() { expect(linkedImport.isNgDeps).toBeTrue(); expect(linkedImport.prefix.startsWith('i')).toBeTrue(); }); + + it('should not chain `deferred` libraries.', () async { + fooNgMeta.ngDeps + ..libraryUri = 'test.foo' + ..imports.add(new ImportModel() + ..uri = 'bar.dart' + ..isDeferred = true + ..prefix = 'dep'); + barNgMeta.ngDeps.libraryUri = 'test.bar'; + updateReader(); + + var linked = (await _testLink(reader, fooAssetId)).ngDeps; + expect(linked).toBeNotNull(); + var linkedImport = linked.imports.firstWhere( + (i) => i.uri.endsWith('bar.ng_deps.dart'), + orElse: () => null); + expect(linkedImport).toBeNull(); + }); }); } diff --git a/modules_dart/transform/test/transform/integration/all_tests.dart b/modules_dart/transform/test/transform/integration/all_tests.dart index f603d08c9c..5463637e06 100644 --- a/modules_dart/transform/test/transform/integration/all_tests.dart +++ b/modules_dart/transform/test/transform/integration/all_tests.dart @@ -179,6 +179,7 @@ void allTests() { void _testDeferredRewriter() { var inputs = { 'a|web/bar.dart': 'deferred_files/bar.dart', + 'a|web/dep.dart': 'deferred_files/dep.dart', 'a|web/index.dart': 'deferred_files/index.dart' }; inputs.addAll(commonInputs); @@ -186,7 +187,7 @@ void _testDeferredRewriter() { var outputs = { 'a|web/bar.ng_deps.dart': _readFile('deferred_files/expected/bar.ng_deps.dart'), - 'a|web/bar.dart': _readFile('deferred_files/expected/bar.dart'), + 'a|web/bar.dart': deferredOuts.barContents, 'a|web/index.dart': deferredOuts.indexContents }; testPhases( diff --git a/modules_dart/transform/test/transform/integration/deferred_files/bar.dart b/modules_dart/transform/test/transform/integration/deferred_files/bar.dart index b9151d0b2a..8ebf3294b8 100644 --- a/modules_dart/transform/test/transform/integration/deferred_files/bar.dart +++ b/modules_dart/transform/test/transform/integration/deferred_files/bar.dart @@ -2,7 +2,7 @@ library bar; import 'package:angular2/src/core/metadata.dart'; -import 'deps/my_dep.dart' deferred as dep; +import 'dep.dart' deferred as dep; @Component(selector: '[soup]') @View(template: '') diff --git a/modules_dart/transform/test/transform/integration/deferred_files/dep.dart b/modules_dart/transform/test/transform/integration/deferred_files/dep.dart new file mode 100644 index 0000000000..ba8d5563e4 --- /dev/null +++ b/modules_dart/transform/test/transform/integration/deferred_files/dep.dart @@ -0,0 +1,6 @@ +library dep; + +import 'package:angular2/src/core/metadata.dart'; + +@Injectable() +void doImmediateThing() {} diff --git a/modules_dart/transform/test/transform/integration/deferred_files/expected/bar.dart b/modules_dart/transform/test/transform/integration/deferred_files/expected/bar.dart deleted file mode 100644 index b9151d0b2a..0000000000 --- a/modules_dart/transform/test/transform/integration/deferred_files/expected/bar.dart +++ /dev/null @@ -1,17 +0,0 @@ -library bar; - -import 'package:angular2/src/core/metadata.dart'; - -import 'deps/my_dep.dart' deferred as dep; - -@Component(selector: '[soup]') -@View(template: '') -class MyComponent { - void doDeferredThing() { - dep.loadLibrary().then((_) { - dep.doImmediateThing(); - }); - } -} - -void execImmediate() {} diff --git a/modules_dart/transform/test/transform/integration/deferred_files/expected/output.dart b/modules_dart/transform/test/transform/integration/deferred_files/expected/output.dart index f70b733fac..547b950b86 100644 --- a/modules_dart/transform/test/transform/integration/deferred_files/expected/output.dart +++ b/modules_dart/transform/test/transform/integration/deferred_files/expected/output.dart @@ -16,3 +16,23 @@ void main() { }); } '''; + +const barContents = ''' +library bar; + +import 'package:angular2/src/core/metadata.dart'; + +import 'dep.ng_deps.dart' deferred as dep; + +@Component(selector: '[soup]') +@View(template: '') +class MyComponent { + void doDeferredThing() { + dep.loadLibrary().then((_) {dep.initReflector();}).then((_) { + dep.doImmediateThing(); + }); + } +} + +void execImmediate() {} +''';