writeGeneratedBuilder method

void writeGeneratedBuilder(
  1. ClassElement element,
  2. StructurizeResult structurized,
  3. String constructorName,
  4. SubjectCodeContext codeContext,
)

Implementation

void writeGeneratedBuilder(
    ClassElement element,
    StructurizeResult structurized,
    String constructorName,
    SubjectCodeContext codeContext) {
  var emitter = DartEmitter();
  var builderName = "${element.name}Builder";
  var clazz = Class((builder) {
    builder.name = builderName;

    builder.extend =
        Reference("$genAlias.Builder<${codeContext.className(element)}>");

    builder.constructors.add(Constructor((builder) => builder
      ..requiredParameters.add(Parameter((builder) => builder
        ..toSuper = true
        ..name = "\$src"))));

    for (var element in structurized.structure.fields) {
      builder.methods.add(Method((builder) => builder
        ..name = element.accessor
        ..type = MethodType.setter
        ..requiredParameters.add(Parameter((builder) => builder
          ..name = "value"
          ..type = Reference(element.type)))
        ..body = Code("\$overrides['${element.name}'] = value;")));
    }
  });
  codeContext.codeBuffer.writeln(clazz.accept(emitter));
}