def migrate_group_annotation(
annotation: GroupAnnotation, mapping: Mapping, mappings: list[Mapping]
) -> list[AbstractAnnotation]:
group_annotation = deepcopy(annotation)
authors = group_annotation.authors
authors.append(migration_author)
group_annotation.authors = authors
migrated_annotations: list[AbstractAnnotation] = []
for functionv2 in mapping.get_apiv2_elements():
if isinstance(functionv2, (Attribute, Result)):
continue
if not isinstance(functionv2, Function):
migrated_annotations.append(
TodoAnnotation(
target=functionv2.id,
authors=authors,
reviewers=group_annotation.reviewers,
comment=group_annotation.comment,
reviewResult=EnumReviewResult.NONE,
newTodo=get_migration_text(
group_annotation, mapping, for_todo_annotation=True
),
)
)
else:
parameter_replacements = _get_mappings_for_grouped_parameters(
group_annotation, mappings, functionv2
)
grouped_parameters: list[Parameter] = []
name_modifier = ""
for parameter_list in parameter_replacements:
if len(parameter_list) == 0:
name_modifier = "0" + name_modifier
else:
grouped_parameters.extend(parameter_list)
if len(parameter_list) == 1:
name_modifier = "1" + name_modifier
else:
name_modifier = "0" + name_modifier
remove_duplicates_and_preserve_order = [
i
for n, i in enumerate(grouped_parameters)
if i not in grouped_parameters[:n]
]
grouped_parameters = remove_duplicates_and_preserve_order
if len(grouped_parameters) < 2 < len(group_annotation.parameters):
migrated_annotations.append(
TodoAnnotation(
target=functionv2.id,
authors=authors,
reviewers=group_annotation.reviewers,
comment=group_annotation.comment,
reviewResult=EnumReviewResult.NONE,
newTodo=get_migration_text(
group_annotation,
mapping,
for_todo_annotation=True,
additional_information=grouped_parameters,
),
)
)
continue
if len(grouped_parameters) != len(group_annotation.parameters):
group_name = group_annotation.groupName + str(
int(name_modifier, base=2)
)
migrated_annotations.append(
GroupAnnotation(
target=functionv2.id,
authors=authors,
reviewers=group_annotation.reviewers,
comment=get_migration_text(
group_annotation,
mapping,
additional_information=grouped_parameters,
),
reviewResult=EnumReviewResult.UNSURE,
groupName=group_name,
parameters=[parameter.name for parameter in grouped_parameters],
)
)
else:
migrated_annotations.append(
GroupAnnotation(
target=functionv2.id,
authors=authors,
reviewers=group_annotation.reviewers,
comment=group_annotation.comment,
reviewResult=EnumReviewResult.NONE,
groupName=group_annotation.groupName,
parameters=[parameter.name for parameter in grouped_parameters],
)
)
return migrated_annotations