writeGeneratedConverter method
void
writeGeneratedConverter(
- ClassElement element,
- StructurizeResult structurized,
- String constructorName,
- SubjectCodeContext codeContext,
Implementation
void writeGeneratedConverter(
ClassElement element,
StructurizeResult structurized,
String constructorName,
SubjectCodeContext codeContext) {
var emitter = DartEmitter();
var converterName = "${element.name}Converter";
var clazz = Class((builder) {
builder.name = converterName;
builder.extend = Reference(
"$genAlias.DefaultStructureConverter<${codeContext.className(element)}>");
builder.fields.add(Field((builder) => builder
..name = "structure"
..type = Reference(
"$genAlias.DogStructure<${codeContext.className(element)}>")
..annotations.add(CodeExpression(Code("override")))
..assignment = Code(
"const ${structurized.structure.code(structurized.fieldNames.map((e) => "_$e").toList())}")
..modifier = FieldModifier.final$));
for (var value in structurized.fieldNames) {
builder.methods.add(Method((builder) => builder
..name = "_$value"
..returns = Reference("dynamic")
..requiredParameters.add(Parameter((builder) => builder
..type = Reference(codeContext.className(element))
..name = "obj"))
..static = true
..lambda = true
..body = Code("obj.$value")));
}
builder.methods.add(Method((builder) => builder
..name = "_activator"
..returns = Reference(codeContext.className(element))
..requiredParameters.add(Parameter((builder) => builder
..type = Reference("List")
..name = "list"))
..static = true
..lambda = true
..body = Code(structurized.activator)));
});
codeContext.codeBuffer.writeln(clazz.accept(emitter));
}