refactor(change_detect): Move (de)hydrate logic into dedicated methods
Call new `(de)hydrateDirectives` methods from `(de)hydrate`. Add a null implementation in `AbstractChangeDetector` and only override if necessary for the specific change detector. Update to #3248
This commit is contained in:
@ -115,7 +115,7 @@ class _CodegenState {
|
||||
this.$_PROTOS_ACCESSOR,
|
||||
this.$_DIRECTIVES_ACCESSOR)
|
||||
: super(${_encodeValue(_changeDetectorDefId)}, $_DISPATCHER_ACCESSOR) {
|
||||
${_names.genDehydrateFields()}
|
||||
dehydrateDirectives(false);
|
||||
}
|
||||
|
||||
void detectChangesInRecords(throwOnChange) {
|
||||
@ -123,9 +123,9 @@ class _CodegenState {
|
||||
$_UTIL.throwDehydrated();
|
||||
}
|
||||
try {
|
||||
this.__detectChangesInRecords(throwOnChange);
|
||||
__detectChangesInRecords(throwOnChange);
|
||||
} catch (e, s) {
|
||||
this.throwError($_CURRENT_PROTO, e, s);
|
||||
throwError($_CURRENT_PROTO, e, s);
|
||||
}
|
||||
}
|
||||
|
||||
@ -151,19 +151,21 @@ class _CodegenState {
|
||||
$_MODE_ACCESSOR = '$_changeDetectionMode';
|
||||
${_names.getContextName()} = context;
|
||||
$_LOCALS_ACCESSOR = locals;
|
||||
${_genHydrateDirectives()}
|
||||
${_genHydrateDetectors()}
|
||||
hydrateDirectives(directives);
|
||||
$_ALREADY_CHECKED_ACCESSOR = false;
|
||||
$_PIPES_ACCESSOR = pipes;
|
||||
}
|
||||
|
||||
${_maybeGenHydrateDirectives()}
|
||||
|
||||
void dehydrate() {
|
||||
${_names.genPipeOnDestroy()}
|
||||
${_names.genDehydrateFields()}
|
||||
dehydrateDirectives(true);
|
||||
$_LOCALS_ACCESSOR = null;
|
||||
$_PIPES_ACCESSOR = null;
|
||||
}
|
||||
|
||||
${_maybeGenDehydrateDirectives()}
|
||||
|
||||
hydrated() => ${_names.getContextName()} != null;
|
||||
|
||||
static $_GEN_PREFIX.ProtoChangeDetector
|
||||
@ -184,6 +186,34 @@ class _CodegenState {
|
||||
''');
|
||||
}
|
||||
|
||||
String _maybeGenDehydrateDirectives() {
|
||||
var destroyPipesParamName = 'destroyPipes';
|
||||
var destroyPipesCode = _names.genPipeOnDestroy();
|
||||
if (destroyPipesCode.isNotEmpty) {
|
||||
destroyPipesCode = 'if (${destroyPipesParamName}) { '
|
||||
'${destroyPipesCode}'
|
||||
'}';
|
||||
}
|
||||
var dehydrateFieldsCode = _names.genDehydrateFields();
|
||||
if (destroyPipesCode.isEmpty && dehydrateFieldsCode.isEmpty) return '';
|
||||
return 'void dehydrateDirectives(${destroyPipesParamName}) {'
|
||||
'${destroyPipesCode}'
|
||||
'${dehydrateFieldsCode}'
|
||||
'}';
|
||||
}
|
||||
|
||||
String _maybeGenHydrateDirectives() {
|
||||
var hydrateDirectivesCode = _genHydrateDirectives();
|
||||
var hydrateDetectorsCode = _genHydrateDetectors();
|
||||
if (hydrateDirectivesCode.isEmpty && hydrateDetectorsCode.isEmpty) {
|
||||
return '';
|
||||
}
|
||||
return 'void hydrateDirectives(directives) { '
|
||||
'$hydrateDirectivesCode'
|
||||
'$hydrateDetectorsCode'
|
||||
'}';
|
||||
}
|
||||
|
||||
String _genHydrateDirectives() {
|
||||
var buf = new StringBuffer();
|
||||
var directiveFieldNames = _names.getAllDirectiveNames();
|
||||
@ -412,7 +442,7 @@ class _CodegenState {
|
||||
|
||||
String _genCheckNoChanges() {
|
||||
if (this._generateCheckNoChanges) {
|
||||
return 'void checkNoChanges() { this.runDetectChanges(true); }';
|
||||
return 'void checkNoChanges() { runDetectChanges(true); }';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
|
Reference in New Issue
Block a user