From ce0f4f0d7c862fa293ffb9e61a6edf4d49c117b2 Mon Sep 17 00:00:00 2001 From: Chuck Jazdzewski Date: Thu, 13 Jul 2017 15:55:59 -0600 Subject: [PATCH] fix(tsc-wrapped): report errors for invalid ast forms (#17994) Fixes: #17993 --- tools/@angular/tsc-wrapped/src/evaluator.ts | 3 +++ .../tsc-wrapped/test/collector.spec.ts | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/tools/@angular/tsc-wrapped/src/evaluator.ts b/tools/@angular/tsc-wrapped/src/evaluator.ts index ef442c0e5d..ee43f71b59 100644 --- a/tools/@angular/tsc-wrapped/src/evaluator.ts +++ b/tools/@angular/tsc-wrapped/src/evaluator.ts @@ -388,6 +388,9 @@ export class Evaluator { if (isFoldableError(expression)) { return recordEntry(expression, node); } + if (!elementAccessExpression.argumentExpression) { + return recordEntry(errorSymbol('Expression form not supported', node), node); + } const index = this.evaluateNode(elementAccessExpression.argumentExpression); if (isFoldableError(expression)) { return recordEntry(expression, node); diff --git a/tools/@angular/tsc-wrapped/test/collector.spec.ts b/tools/@angular/tsc-wrapped/test/collector.spec.ts index 985c08836b..a83edd48c1 100644 --- a/tools/@angular/tsc-wrapped/test/collector.spec.ts +++ b/tools/@angular/tsc-wrapped/test/collector.spec.ts @@ -864,6 +864,28 @@ describe('Collector', () => { const metadata = collector.getMetadata(source); expect(metadata).toBeUndefined(); }); + + it('should be able to collect an invalid access expression', () => { + const source = createSource(` + import {Component} from '@angular/core'; + + const value = []; + @Component({ + provider: [{provide: 'some token', useValue: value[]}] + }) + export class MyComponent {} + `); + const metadata = collector.getMetadata(source); + expect(metadata.metadata.MyComponent).toEqual({ + __symbolic: 'class', + decorators: [{ + __symbolic: 'error', + message: 'Expression form not supported', + line: 5, + character: 55 + }] + }); + }); }); function override(fileName: string, content: string) {