Skip to content

migrate_group_annotation

Source code in src/library_analyzer/processing/migration/annotations/_migrate_group_annotation.py
def migrate_group_annotation(
    origin_annotation: GroupAnnotation,
    mapping: Mapping,
    mappings: list[Mapping],
) -> list[AbstractAnnotation]:
    migrated_annotations: list[AbstractAnnotation] = []

    for functionv2 in mapping.get_apiv2_elements():
        group_annotation = deepcopy(origin_annotation)
        authors = group_annotation.authors
        authors.append(migration_author)
        group_annotation.authors = authors
        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:
                group_annotation.target = functionv2.id
                group_annotation.parameters = [parameter.name for parameter in grouped_parameters]
                migrated_annotations.append(group_annotation)

    return migrated_annotations