generateFactoryMethod function

String generateFactoryMethod(
  1. FactoryMethodInfo factory,
  2. String classNameTrimmed,
  3. 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();
}