generateFactoryMethod function
String
generateFactoryMethod(
- FactoryMethodInfo factory,
- String classNameTrimmed,
- List<
NameTypeClassComment> allFields
Implementation
String generateFactoryMethod(
FactoryMethodInfo factory,
String classNameTrimmed,
List<NameTypeClassComment> allFields,
) {
var sb = StringBuffer();
// Generate factory method signature
sb.write(" factory ${classNameTrimmed}.${factory.name}(");
if (factory.parameters.isNotEmpty) {
if (factory.parameters.any((p) => p.isNamed)) {
sb.write("{");
sb.write(
factory.parameters
.map((p) {
var prefix = p.isRequired ? "required " : "";
var suffix = p.hasDefaultValue && p.defaultValue != null
? " = ${p.defaultValue}"
: "";
var cleanType = p.type.replaceAll('\$', '');
return "${prefix}${cleanType} ${p.name}${suffix}";
})
.join(", "),
);
sb.write("}");
} else {
sb.write(
factory.parameters
.map((p) {
var suffix = p.hasDefaultValue && p.defaultValue != null
? " = ${p.defaultValue}"
: "";
var cleanType = p.type.replaceAll('\$', '');
return "${cleanType} ${p.name}${suffix}";
})
.join(", "),
);
}
}
sb.write(") => ");
// Generate simple factory body - transform $ClassName to ClassName
var bodyCode = factory.bodyCode;
if (bodyCode.contains('return ') && bodyCode.endsWith(';')) {
// Remove 'return ' and trailing ';' for arrow function
bodyCode = bodyCode.substring(7, bodyCode.length - 1);
}
// Transform the body to use the correct constructor name
bodyCode = bodyCode
.replaceAll(
'${factory.className.replaceAll('\$', '')}._',
'${classNameTrimmed}._',
)
.replaceAll('\$', '');
sb.writeln("${bodyCode};");
sb.writeln();
return sb.toString();
}