writeChangeDetectionStatements method
Implementation
List<o.Statement> writeChangeDetectionStatements() {
var statements = <o.Statement>[];
if (detectChangesInInputsMethod.isEmpty &&
_updateContentQueriesMethod.isEmpty &&
afterContentLifecycleCallbacksMethod.isEmpty &&
detectChangesRenderPropertiesMethod.isEmpty &&
_updateViewQueriesMethod.isEmpty &&
afterViewLifecycleCallbacksMethod.isEmpty &&
(viewType == ViewType.host || viewChildren.isEmpty) &&
viewContainers.isEmpty) {
return statements;
}
statements.addAll(nameResolver.getLocalDeclarations());
statements.addAll(detectChangesInInputsMethod.finish());
for (var contentChild in viewContainers) {
statements.add(
contentChild.callMethod('detectChangesInNestedViews', []).toStmt());
}
var afterContentStmts =
List<o.Statement>.from(_updateContentQueriesMethod.finish())
..addAll(afterContentLifecycleCallbacksMethod.finish());
if (afterContentStmts.isNotEmpty) {
statements.add(o.IfStmt(notThrowOnChanges, afterContentStmts));
}
statements.addAll(detectChangesRenderPropertiesMethod.finish());
for (var viewChild in viewChildren) {
statements.add(
viewChild.componentView!.callMethod('detectChanges', []).toStmt());
}
var afterViewStmts =
List<o.Statement>.from(_updateViewQueriesMethod.finish())
..addAll(afterViewLifecycleCallbacksMethod.finish());
if (afterViewStmts.isNotEmpty) {
statements.add(o.IfStmt(notThrowOnChanges, afterViewStmts));
}
var varStmts = <Object>[];
var readVars = o.findReadVarNames(statements);
var writeVars = o.findWriteVarNames(statements);
varStmts.addAll(maybeCachedCtxDeclarationStatement(readVars: readVars));
if (readVars.contains(DetectChangesVars.changed.name) ||
writeVars.contains(DetectChangesVars.changed.name)) {
varStmts.add(DetectChangesVars.changed
.set(o.literal(false))
.toDeclStmt(o.BOOL_TYPE));
}
if (readVars.contains(DetectChangesVars.firstCheck.name)) {
varStmts.add(o.DeclareVarStmt(DetectChangesVars.firstCheck.name!,
o.THIS_EXPR.prop('firstCheck'), o.BOOL_TYPE));
}
return List.from(varStmts)..addAll(statements);
}