MCPcopy Create free account
hub / github.com/apache/fory / generate_field_accessors

Method generate_field_accessors

compiler/fory_compiler/generators/cpp.py:734–856  ·  view source on GitHub ↗
(
        self, field: Field, parent_stack: Optional[List[Message]], indent: str
    )

Source from the content-addressed store, hash-verified

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 )

Callers 1

Calls 11

get_field_member_nameMethod · 0.95
get_field_value_typeMethod · 0.95
get_field_weak_refMethod · 0.95
is_union_typeMethod · 0.95
is_enum_typeMethod · 0.95
is_bytes_fieldMethod · 0.95
is_string_fieldMethod · 0.95
is_numeric_fieldMethod · 0.95
is_message_typeMethod · 0.95
to_snake_caseMethod · 0.80
appendMethod · 0.45

Tested by

no test coverage detected