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}`); + }); }); });