diff --git a/packages/compiler-cli/test/transformers/program_spec.ts b/packages/compiler-cli/test/transformers/program_spec.ts index b74a49c3d9..19c945d101 100644 --- a/packages/compiler-cli/test/transformers/program_spec.ts +++ b/packages/compiler-cli/test/transformers/program_spec.ts @@ -617,6 +617,34 @@ describe('ng program', () => { ]); }); + it('should emit correctly after listing lazyRoutes', () => { + testSupport.writeFiles({ + 'src/main.ts': ` + import {NgModule} from '@angular/core'; + import {RouterModule} from '@angular/router'; + + @NgModule({ + imports: [RouterModule.forRoot([{loadChildren: './lazy/lazy#LazyModule'}])] + }) + export class MainModule {} + `, + 'src/lazy/lazy.ts': ` + import {NgModule} from '@angular/core'; + + @NgModule() + export class ChildModule {} + `, + }); + const {program, options} = createProgram(['src/main.ts', 'src/lazy/lazy.ts']); + expectNoDiagnosticsInProgram(options, program); + program.listLazyRoutes(); + program.emit(); + + const lazyNgFactory = + fs.readFileSync(path.resolve(testSupport.basePath, 'built/src/lazy/lazy.ngfactory.js')); + expect(lazyNgFactory).toContain('import * as i1 from "./lazy";'); + }); + it('should list lazyRoutes given an entryRoute recursively', () => { writeSomeRoutes(); const {program, options} = createProgram(['src/main.ts']); diff --git a/packages/compiler/src/aot/static_reflector.ts b/packages/compiler/src/aot/static_reflector.ts index 1dd5603166..daf6b8ac0d 100644 --- a/packages/compiler/src/aot/static_reflector.ts +++ b/packages/compiler/src/aot/static_reflector.ts @@ -80,8 +80,10 @@ export class StaticReflector implements CompileReflector { const refSymbol = this.symbolResolver.getSymbolByModule(ref.moduleName !, ref.name !, containingFile); const declarationSymbol = this.findSymbolDeclaration(refSymbol); - this.symbolResolver.recordModuleNameForFileName(refSymbol.filePath, ref.moduleName !); - this.symbolResolver.recordImportAs(declarationSymbol, refSymbol); + if (!containingFile) { + this.symbolResolver.recordModuleNameForFileName(refSymbol.filePath, ref.moduleName !); + this.symbolResolver.recordImportAs(declarationSymbol, refSymbol); + } return declarationSymbol; } diff --git a/packages/compiler/test/aot/static_reflector_spec.ts b/packages/compiler/test/aot/static_reflector_spec.ts index f4f90ea174..5403fb8b89 100644 --- a/packages/compiler/test/aot/static_reflector_spec.ts +++ b/packages/compiler/test/aot/static_reflector_spec.ts @@ -1062,6 +1062,22 @@ describe('StaticReflector', () => { .useValue) .toEqual({path: 'foo', data: {e: 1}}); }); + + describe('resolveExternalReference', () => { + it('should register modules names in the StaticSymbolResolver if no containingFile is given', + () => { + init({ + '/tmp/root.ts': ``, + '/tmp/a.ts': `export const x = 1;`, + }); + let symbol = + reflector.resolveExternalReference({moduleName: './a', name: 'x'}, '/tmp/root.ts'); + expect(symbolResolver.getKnownModuleName(symbol.filePath)).toBeFalsy(); + + symbol = reflector.resolveExternalReference({moduleName: 'a', name: 'x'}); + expect(symbolResolver.getKnownModuleName(symbol.filePath)).toBe('a'); + }); + }); }); const DEFAULT_TEST_DATA: {[key: string]: any} = {