fix(ngc): codegen allows --strictNullChecks (#10991)

This commit is contained in:
Alex Eagle 2016-08-22 15:30:18 -07:00 committed by Kara
parent 8560e1e4bf
commit 01111b04ff
3 changed files with 25 additions and 14 deletions

View File

@ -250,12 +250,13 @@ export abstract class AbstractEmitterVisitor implements o.StatementVisitor, o.Ex
ctx.print(`)`);
return null;
}
visitLiteralExpr(ast: o.LiteralExpr, ctx: EmitterVisitorContext): any {
visitLiteralExpr(ast: o.LiteralExpr, ctx: EmitterVisitorContext, absentValue: string = 'null'):
any {
var value = ast.value;
if (isString(value)) {
ctx.print(escapeSingleQuoteString(value, this._escapeDollarInStrings));
} else if (isBlank(value)) {
ctx.print('null');
ctx.print(absentValue);
} else {
ctx.print(`${value}`);
}

View File

@ -72,6 +72,10 @@ class _TsEmitterVisitor extends AbstractEmitterVisitor implements o.TypeVisitor
}
}
visitLiteralExpr(ast: o.LiteralExpr, ctx: EmitterVisitorContext): any {
super.visitLiteralExpr(ast, ctx, '(null as any)');
}
visitExternalExpr(ast: o.ExternalExpr, ctx: EmitterVisitorContext): any {
this._visitIdentifier(ast.value, ast.typeParams, ctx);
return null;

View File

@ -290,35 +290,41 @@ export function main() {
it('should support builtin types', () => {
var writeVarExpr = o.variable('a').set(o.NULL_EXPR);
expect(emitStmt(writeVarExpr.toDeclStmt(o.DYNAMIC_TYPE))).toEqual('var a:any = null;');
expect(emitStmt(writeVarExpr.toDeclStmt(o.BOOL_TYPE))).toEqual('var a:boolean = null;');
expect(emitStmt(writeVarExpr.toDeclStmt(o.INT_TYPE))).toEqual('var a:number = null;');
expect(emitStmt(writeVarExpr.toDeclStmt(o.NUMBER_TYPE))).toEqual('var a:number = null;');
expect(emitStmt(writeVarExpr.toDeclStmt(o.STRING_TYPE))).toEqual('var a:string = null;');
expect(emitStmt(writeVarExpr.toDeclStmt(o.FUNCTION_TYPE))).toEqual('var a:Function = null;');
expect(emitStmt(writeVarExpr.toDeclStmt(o.DYNAMIC_TYPE)))
.toEqual('var a:any = (null as any);');
expect(emitStmt(writeVarExpr.toDeclStmt(o.BOOL_TYPE)))
.toEqual('var a:boolean = (null as any);');
expect(emitStmt(writeVarExpr.toDeclStmt(o.INT_TYPE)))
.toEqual('var a:number = (null as any);');
expect(emitStmt(writeVarExpr.toDeclStmt(o.NUMBER_TYPE)))
.toEqual('var a:number = (null as any);');
expect(emitStmt(writeVarExpr.toDeclStmt(o.STRING_TYPE)))
.toEqual('var a:string = (null as any);');
expect(emitStmt(writeVarExpr.toDeclStmt(o.FUNCTION_TYPE)))
.toEqual('var a:Function = (null as any);');
});
it('should support external types', () => {
var writeVarExpr = o.variable('a').set(o.NULL_EXPR);
expect(emitStmt(writeVarExpr.toDeclStmt(o.importType(sameModuleIdentifier))))
.toEqual('var a:someLocalId = null;');
.toEqual('var a:someLocalId = (null as any);');
expect(emitStmt(writeVarExpr.toDeclStmt(o.importType(externalModuleIdentifier)))).toEqual([
`import * as import0 from 'somePackage/someOtherPath';`,
`var a:import0.someExternalId = null;`
`var a:import0.someExternalId = (null as any);`
].join('\n'));
});
it('should support combined types', () => {
var writeVarExpr = o.variable('a').set(o.NULL_EXPR);
expect(emitStmt(writeVarExpr.toDeclStmt(new o.ArrayType(null))))
.toEqual('var a:any[] = null;');
.toEqual('var a:any[] = (null as any);');
expect(emitStmt(writeVarExpr.toDeclStmt(new o.ArrayType(o.INT_TYPE))))
.toEqual('var a:number[] = null;');
.toEqual('var a:number[] = (null as any);');
expect(emitStmt(writeVarExpr.toDeclStmt(new o.MapType(null))))
.toEqual('var a:{[key: string]:any} = null;');
.toEqual('var a:{[key: string]:any} = (null as any);');
expect(emitStmt(writeVarExpr.toDeclStmt(new o.MapType(o.INT_TYPE))))
.toEqual('var a:{[key: string]:number} = null;');
.toEqual('var a:{[key: string]:number} = (null as any);');
});
});
}