(
self, field: Field, parent_stack: Optional[List[Message]], indent: str
)
| 732 | ) |
| 733 | |
| 734 | def generate_field_accessors( |
| 735 | self, field: Field, parent_stack: Optional[List[Message]], indent: str |
| 736 | ) -> List[str]: |
| 737 | lines: List[str] = [] |
| 738 | field_name = self.to_snake_case(field.name) |
| 739 | member_name = self.get_field_member_name(field) |
| 740 | value_type = self.get_field_value_type(field, parent_stack) |
| 741 | weak_ref = self.get_field_weak_ref(field) |
| 742 | is_union = self.is_union_type(field.field_type, parent_stack) |
| 743 | is_enum = self.is_enum_type(field.field_type, parent_stack) |
| 744 | is_collection = isinstance(field.field_type, (ListType, ArrayType, MapType)) |
| 745 | is_bytes = self.is_bytes_field(field) |
| 746 | is_string = self.is_string_field(field) |
| 747 | needs_mutable = is_string or is_collection or is_bytes or is_union |
| 748 | no_setter = is_collection or is_bytes or is_union |
| 749 | value_getter = self.is_numeric_field(field) or is_enum |
| 750 | |
| 751 | if self.is_message_type(field.field_type, parent_stack) and ( |
| 752 | field.ref or weak_ref |
| 753 | ): |
| 754 | lines.append(f"{indent}bool has_{field_name}() const {{") |
| 755 | if weak_ref: |
| 756 | lines.append(f"{indent} return !{member_name}.expired();") |
| 757 | else: |
| 758 | lines.append(f"{indent} return {member_name} != nullptr;") |
| 759 | lines.append(f"{indent}}}") |
| 760 | lines.append("") |
| 761 | lines.append(f"{indent}const {value_type}& {field_name}() const {{") |
| 762 | lines.append(f"{indent} return {member_name};") |
| 763 | lines.append(f"{indent}}}") |
| 764 | lines.append("") |
| 765 | lines.append(f"{indent}{value_type}* mutable_{field_name}() {{") |
| 766 | lines.append(f"{indent} return &{member_name};") |
| 767 | lines.append(f"{indent}}}") |
| 768 | lines.append("") |
| 769 | lines.append(f"{indent}void set_{field_name}({value_type} value) {{") |
| 770 | lines.append(f"{indent} {member_name} = std::move(value);") |
| 771 | lines.append(f"{indent}}}") |
| 772 | lines.append("") |
| 773 | lines.append(f"{indent}void clear_{field_name}() {{") |
| 774 | lines.append(f"{indent} {member_name} = {value_type}();") |
| 775 | lines.append(f"{indent}}}") |
| 776 | return lines |
| 777 | |
| 778 | if self.is_message_type(field.field_type, parent_stack): |
| 779 | lines.append(f"{indent}bool has_{field_name}() const {{") |
| 780 | lines.append(f"{indent} return {member_name} != nullptr;") |
| 781 | lines.append(f"{indent}}}") |
| 782 | lines.append("") |
| 783 | lines.append(f"{indent}const {value_type}& {field_name}() const {{") |
| 784 | lines.append(f"{indent} return *{member_name};") |
| 785 | lines.append(f"{indent}}}") |
| 786 | lines.append("") |
| 787 | lines.append(f"{indent}{value_type}* mutable_{field_name}() {{") |
| 788 | lines.append(f"{indent} if (!{member_name}) {{") |
| 789 | lines.append( |
| 790 | f"{indent} {member_name} = std::make_unique<{value_type}>();" |
| 791 | ) |
no test coverage detected