merge method
SELF
merge(
- SELF? other
)
override
Implementation
@override
SELF merge(SELF? other) {
if (other == null) return this as SELF;
final structure = _structure;
final proxy = structure.proxy;
final selfValues = proxy.getFieldValues(this);
final otherValues = proxy.getFieldValues(other);
final values = List.generate(selfValues.length, (i) {
final selfValue = selfValues[i];
final otherValue = otherValues[i];
final field = structure.fields[i];
if (selfValue == null || otherValue == null) {
return selfValue ?? otherValue;
}
if (selfValue.runtimeType == otherValue.runtimeType) {
if (selfValue is Mergeable) {
return selfValue.merge(otherValue);
}
final mergeableFunction = field.firstAnnotationOf<MergeFunction>();
if (mergeableFunction != null) {
return mergeableFunction.mergeFunction(selfValue, otherValue);
}
return selfValue;
}
return selfValue;
});
return proxy.instantiate(values) as SELF;
}