MethodMergeBuilder function

Method MethodMergeBuilder({
  1. required String className,
  2. required List<FieldInfo> fields,
})

Implementation

Method MethodMergeBuilder({
  required String className,
  required List<FieldInfo> fields,
}) {
  return Method((b) {
    b.annotations.add(refer('override'));
    b.name = 'merge';
    b.returns = refer(className);
    b.requiredParameters.add(Parameter((b) {
      b.name = 'other';
      b.type = refer('$className?');
    }));
    b.body = Code('''
        if (other == null) return this;

        return $className(
          ${fields.map((field) {
      final fieldName = field.name;
      if (field.hasDto) {
        return '$fieldName: $fieldName?.merge(other.$fieldName) ?? other.$fieldName';
      }

      return '$fieldName: other.$fieldName ?? $fieldName';
    }).join(', ')},);
      ''');
  });
}