fix(ivy): ensure factory statements are emitted correctly (#25425)

A small bug caused base factory variable statements for @Component to
not be emitted properly. At the same time as this is fixed, those
statements are now emitted as const.

PR Close #25425
This commit is contained in:
Alex Rickabaugh 2018-08-10 11:26:41 +01:00 committed by Ben Lesh
parent 82e2725154
commit b40c437379
2 changed files with 5 additions and 4 deletions

View File

@ -165,7 +165,7 @@ export class ComponentDecoratorHandler implements DecoratorHandler<R3ComponentMe
return { return {
name: 'ngComponentDef', name: 'ngComponentDef',
initializer: res.expression, initializer: res.expression,
statements: [], statements: res.statements,
type: res.type, type: res.type,
}; };
} }

View File

@ -181,7 +181,8 @@ export function compileFactoryFunction(meta: R3FactoryMetadata):
} else { } else {
const baseFactory = o.variable(`ɵ${meta.name}_BaseFactory`); const baseFactory = o.variable(`ɵ${meta.name}_BaseFactory`);
const getInheritedFactory = o.importExpr(R3.getInheritedFactory); const getInheritedFactory = o.importExpr(R3.getInheritedFactory);
const baseFactoryStmt = baseFactory.set(getInheritedFactory.callFn([meta.type])).toDeclStmt(); const baseFactoryStmt = baseFactory.set(getInheritedFactory.callFn([meta.type]))
.toDeclStmt(o.INFERRED_TYPE, [o.StmtModifier.Final]);
statements.push(baseFactoryStmt); statements.push(baseFactoryStmt);
// There is no constructor, use the base class' factory to construct typeForCtor. // There is no constructor, use the base class' factory to construct typeForCtor.
@ -205,8 +206,8 @@ export function compileFactoryFunction(meta: R3FactoryMetadata):
if (meta.delegate.isEquivalent(meta.type)) { if (meta.delegate.isEquivalent(meta.type)) {
throw new Error(`Illegal state: compiling factory that delegates to itself`); throw new Error(`Illegal state: compiling factory that delegates to itself`);
} }
const delegateFactoryStmt = const delegateFactoryStmt = delegateFactory.set(getFactoryOf.callFn([meta.delegate]))
delegateFactory.set(getFactoryOf.callFn([meta.delegate])).toDeclStmt(); .toDeclStmt(o.INFERRED_TYPE, [o.StmtModifier.Final]);
statements.push(delegateFactoryStmt); statements.push(delegateFactoryStmt);
const r = makeConditionalFactory(delegateFactory.callFn([])); const r = makeConditionalFactory(delegateFactory.callFn([]));