writeGeneratedExtension static method
void
writeGeneratedExtension(
- ClassElement2 element,
- StructurizeResult structurized,
- String constructorName,
- SubjectCodeContext codeContext,
Implementation
static void writeGeneratedExtension(ClassElement2 element, StructurizeResult structurized,
String constructorName, SubjectCodeContext codeContext) {
var emitter = DartEmitter();
var extensionName = "${element.displayName}DogsExtension";
var builderName = "${element.displayName}Builder";
var clazz = Extension((builder) {
builder.name = extensionName;
var structureType = Reference(codeContext.cachedCounter.get(element.thisType));
builder.on = structureType;
builder.methods.add(Method((builder) => builder
..name = "rebuild"
..returns = structureType
..requiredParameters.add(Parameter((builder) => builder
..name = "f"
..type = Reference("Function($builderName b)")))
..body = Code("""
var builder = $builderName(this);
f(builder);
return builder.build();
""")));
builder.methods.add(Method((builder) => builder
..name = "copy"
..type = MethodType.getter
..returns = Reference("${element.displayName}\$Copy")
..body = Code("toBuilder()")
..lambda = true));
builder.methods.add(Method((builder) => builder
..name = "toBuilder"
..returns = Reference(builderName)
..body = Code("""
return $builderName(this);
""")));
builder.methods.add(Method((builder) => builder
..name = "toNative"
..returns = Reference("Map<String,dynamic>")
..body = Code("""
return $genAlias.dogs.convertObjectToNative(this, ${codeContext.cachedCounter.get(element.thisType)});
""")));
});
codeContext.codeBuffer.writeln(clazz.accept(emitter));
}