fix(ngcc): ensure that adjacent statements go after helper calls (#33689)

Previously the renderers were fixed so that they inserted extra
"adjacent" statements after the last static property of classes.

In order to help the build-optimizer (in Angular CLI) to be able to
tree-shake classes effectively, these statements should also appear
after any helper calls, such as `__decorate()`.

This commit moves the computation of this positioning into the
`NgccReflectionHost` via the `getEndOfClass()` method, which
returns the last statement that is related to the class.

FW-1668

PR Close #33689
This commit is contained in:
Pete Bacon Darwin
2019-11-08 11:01:26 +00:00
committed by Kara Erickson
parent f67802ddc0
commit c5400616f8
9 changed files with 172 additions and 52 deletions

View File

@ -2530,5 +2530,20 @@ runInEachFileSystem(() => {
]);
});
});
describe('getEndOfClass()', () => {
it('should return the last static property of the class', () => {
loadTestFiles([SOME_DIRECTIVE_FILE]);
const {program} = makeTestBundleProgram(SOME_DIRECTIVE_FILE.name);
const host = new Esm5ReflectionHost(new MockLogger(), false, program.getTypeChecker());
const classSymbol =
host.findClassSymbols(program.getSourceFile(SOME_DIRECTIVE_FILE.name) !)[0];
const endOfClass = host.getEndOfClass(classSymbol);
expect(endOfClass.getText()).toEqual(`SomeDirective.propDecorators = {
"input1": [{ type: Input },],
"input2": [{ type: Input },],
};`);
});
});
});
});