writeGeneratedExtension method

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

Implementation

void writeGeneratedExtension(
    ClassElement element,
    StructurizeResult structurized,
    String constructorName,
    SubjectCodeContext codeContext) {
  var emitter = DartEmitter();
  var extensionName = "${element.name}DogsExtension";
  var builderName = "${element.name}Builder";
  var clazz = Extension((builder) {
    builder.name = extensionName;
    builder.on = Reference(element.name);
    builder.methods.add(Method((builder) => builder
      ..name = "builder"
      ..returns = Reference(element.name)
      ..requiredParameters.add(Parameter((builder) => builder
        ..name = "func"
        ..type = Reference("Function($builderName builder)")))
      ..body = Code("""
        var builder = $builderName(this);
        func(builder);
        return builder.build();
        """)));
  });
  codeContext.codeBuffer.writeln(clazz.accept(emitter));
}