diff --git a/modules/@angular/compiler/src/metadata_resolver.ts b/modules/@angular/compiler/src/metadata_resolver.ts index 7b6244ee43e85..6270315039bdc 100644 --- a/modules/@angular/compiler/src/metadata_resolver.ts +++ b/modules/@angular/compiler/src/metadata_resolver.ts @@ -862,11 +862,14 @@ export class CompileMetadataResolver { } else { provider = resolveForwardRef(provider); let providerMeta: cpl.ProviderMeta; - if (provider && typeof provider == 'object' && provider.hasOwnProperty('provide')) { + if (provider && typeof provider === 'object' && provider.hasOwnProperty('provide')) { this._validateProvider(provider); providerMeta = new cpl.ProviderMeta(provider.provide, provider); } else if (isValidType(provider)) { providerMeta = new cpl.ProviderMeta(provider, {useClass: provider}); + } else if (provider === void 0) { + this._reportError(new SyntaxError( + `Encountered undefined provider! Usually this means you have a circular dependencies (might be caused by using 'barrel' index.ts files.`)); } else { const providersInfo = (providers.reduce( diff --git a/modules/@angular/compiler/test/metadata_resolver_spec.ts b/modules/@angular/compiler/test/metadata_resolver_spec.ts index e7255eaad1b15..484599f4fe376 100644 --- a/modules/@angular/compiler/test/metadata_resolver_spec.ts +++ b/modules/@angular/compiler/test/metadata_resolver_spec.ts @@ -233,6 +233,16 @@ export function main() { SyntaxError, /Invalid provider for SimpleService. useClass cannot be undefined./); })); + it('should throw with descriptive error message when provider is undefined', + inject([CompileMetadataResolver], (resolver: CompileMetadataResolver) => { + @NgModule({providers: [undefined]}) + class SomeModule { + } + + expect(() => resolver.loadNgModuleDirectiveAndPipeMetadata(SomeModule, true)) + .toThrowError(SyntaxError, /Encountered undefined provider!/); + })); + it('should throw with descriptive error message when one of providers is not present', inject([CompileMetadataResolver], (resolver: CompileMetadataResolver) => { @NgModule({declarations: [MyBrokenComp3]})