getClassName static method
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:
- Generate base class name based on suffix and name parameters
- If root is true, clear the existing list of class names
- Check if the generated name already exists with the same parent and created status
- 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
- Add the new class name to the tracking list
- Return the unique class name
Parameters:
listClassName: List of existing ModelClassName objects for conflict checkingsuffix: Suffix to append to the class name (e.g., 'Model', 'Entity')name: Base name for the classroot: Whether this is a root-level class (clears existing list if true)created: Whether this class is being created/generatedparent: Parent context or container of this classparentList: 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;
}