From 372c7bae4402115d2895b4e375828ef2a440a7e8 Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Tue, 26 Sep 2017 13:28:16 +0100 Subject: [PATCH] fix(@angular-devkit/build-optimizer): don't add pure to super calls Fix https://github.com/angular/angular-cli/issues/7799 --- .../src/transforms/prefix-functions.ts | 7 +++++++ .../src/transforms/prefix-functions_spec.ts | 18 +++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts index 1e94b34eae..b876cefcf6 100644 --- a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts +++ b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts @@ -70,6 +70,7 @@ export function findTopLevelFunctions(parentNode: ts.Node): ts.Node[] { topLevelFunctions.push(node.parent); } else if ((node.kind === ts.SyntaxKind.CallExpression || node.kind === ts.SyntaxKind.NewExpression) + && !isSuperCall(node) && !hasPureComment(node) ) { topLevelFunctions.push(node); @@ -117,3 +118,9 @@ function hasPureComment(node: ts.Node) { return leadingComment && leadingComment.some((comment) => comment.text === pureFunctionComment); } + +function isSuperCall(node: ts.Node) { + const callExpr = node as ts.CallExpression; + + return callExpr.expression && callExpr.expression.kind === ts.SyntaxKind.SuperKeyword; +} diff --git a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions_spec.ts b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions_spec.ts index 031936e7ea..f322bb9aac 100644 --- a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions_spec.ts +++ b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions_spec.ts @@ -83,7 +83,7 @@ describe('prefix-functions', () => { expect(oneLine`${transform(input)}`).toEqual(oneLine`${output}`); }); - it('doesn\'t adds comment when inside function declarations or expressions', () => { + it('doesn\'t add comment when inside function declarations or expressions', () => { const input = stripIndent` function funcDecl() { var newClazz = Clazz(); @@ -102,5 +102,21 @@ describe('prefix-functions', () => { expect(oneLine`${transform(input)}`).toEqual(oneLine`${output}`); }); + + it('doesn\'t add comment to super calls', () => { + const input = oneLine` + class ExtendedClass extends BaseClass { + constructor(e) { + super(e); + } + } + `; + const output = stripIndent` + ${emptyImportsComment} + ${input} + `; + + expect(oneLine`${transform(input)}`).toEqual(oneLine`${output}`); + }); }); });