getClassName static method

String getClassName(
  1. List<ModelClassName> listClassName,
  2. String suffix,
  3. String name,
  4. bool root,
  5. bool created,
  6. String parent, [
  7. String? parentList,
])

Generates a unique class name based on the provided parameters.

This method implements the class name generation algorithm that ensures unique names by checking against existing names and appending Greek letters when conflicts are detected.

Algorithm:

  1. Generate base class name based on suffix and name parameters
  2. If root is true, clear the existing list of class names
  3. Check if the generated name already exists with the same parent and created status
  4. If a conflict exists, try to resolve by: a. Using the base name if no conflict with created classes b. Prepending Greek letters in order until a unique name is found
  5. Add the new class name to the tracking list
  6. Return the unique class name

Parameters:

  • listClassName: List of existing ModelClassName objects for conflict checking
  • suffix: Suffix to append to the class name (e.g., 'Model', 'Entity')
  • name: Base name for the class
  • root: Whether this is a root-level class (clears existing list if true)
  • created: Whether this class is being created/generated
  • parent: Parent context or container of this class
  • parentList: Optional parent list context

Returns: A unique class name string

Example:

final listClassName = <ModelClassName>[];

// Generate a unique class name for a User model
final className1 = ModelClassNameHelper.getClassName(
  listClassName,
  'Model',
  'user',
  true, // root
  true, // created
  'models'
);
print(className1); // UserModel

// Generate another class name that might conflict
final className2 = ModelClassNameHelper.getClassName(
  listClassName,
  'Model',
  'user',
  false, // not root
  true, // created
  'models'
);
print(className2); // AlphaUserModel

Implementation

static String getClassName(List<ModelClassName> listClassName, String suffix,
    String name, bool root, bool created, String parent,
    [String? parentList]) {
  if (root) listClassName.clear();
  String apiClassName = root ? '$suffix$name' : '$name$suffix';

  if (listClassName.firstWhereOrNull((element) =>
          element.className == apiClassName &&
          element.parent == parent &&
          element.parentList == parentList &&
          element.created) !=
      null) {
    apiClassName = apiClassName;
  } else if (listClassName.firstWhereOrNull((element) =>
          element.className == apiClassName && element.created) !=
      null) {
    for (var element in geekLetter) {
      final newClassApiName = element + apiClassName;

      if (listClassName.firstWhereOrNull((element) =>
              element.className == newClassApiName &&
              element.parent == parent &&
              element.parentList == parentList &&
              element.created) !=
          null) {
        apiClassName = newClassApiName;
        break;
      }

      if (listClassName.firstWhereOrNull((element) =>
              element.className == newClassApiName &&
              element.parent == parent &&
              !element.created) !=
          null) {
        apiClassName = newClassApiName;
        break;
      }

      if (listClassName.firstWhereOrNull((element) =>
              element.className == newClassApiName &&
              element.parent != parent) ==
          null) {
        apiClassName = newClassApiName;
        break;
      }
    }
  }

  final modelClassName = ModelClassName(
    className: apiClassName,
    parent: parent,
    created: created,
    parentList: parentList,
  );
  listClassName.remove(modelClassName);
  listClassName.add(modelClassName);

  return apiClassName;
}