fix(compiler): properly report missing DI tokens (#9065)

Fixes #8245
This commit is contained in:
Pawel Kozlowski
2016-06-10 01:07:06 +02:00
committed by Victor Berchet
parent 9146bb0816
commit 3aca5ff9e2
2 changed files with 25 additions and 1 deletions

View File

@ -260,11 +260,12 @@ export class CompileMetadataResolver {
getDependenciesMetadata(typeOrFunc: Type | Function,
dependencies: any[]): cpl.CompileDiDependencyMetadata[] {
let hasUnknownDeps = false;
let params = isPresent(dependencies) ? dependencies : this._reflector.parameters(typeOrFunc);
if (isBlank(params)) {
params = [];
}
return params.map((param) => {
let dependenciesMetadata: cpl.CompileDiDependencyMetadata[] = params.map((param) => {
if (isBlank(param)) {
return null;
}
@ -306,6 +307,7 @@ export class CompileMetadataResolver {
token = param;
}
if (isBlank(token)) {
hasUnknownDeps = true;
return null;
}
return new cpl.CompileDiDependencyMetadata({
@ -320,6 +322,15 @@ export class CompileMetadataResolver {
});
});
if (hasUnknownDeps) {
let depsTokens = dependenciesMetadata.map((dep) => {
return dep ? stringify(dep.token) : '?';
}).join(', ');
throw new BaseException(`Can't resolve all parameters for ${stringify(typeOrFunc)}: (${depsTokens}).`);
}
return dependenciesMetadata;
}
getTokenMetadata(token: any): cpl.CompileTokenMetadata {