Skip to content

migrate_group_annotation

Source code in library_analyzer/processing/migration/annotations/_migrate_group_annotation.py
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