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

Method registration_order

compiler/fory_compiler/generators/scala.py:941–991  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

939 return self.source_file(class_name, lines)
940
941 def registration_order(self) -> List[Tuple[object, Optional[str]]]:
942 entries: List[Tuple[object, Optional[str], List[Message]]] = []
943
944 def message_path(messages: List[Message]) -> str:
945 return ".".join(message.name for message in messages)
946
947 def add_message(message: Message, parent_stack: List[Message]) -> None:
948 owner_path = ".".join(owner.name for owner in parent_stack) or None
949 entries.append((message, owner_path, parent_stack))
950 current_stack = [*parent_stack, message]
951 for enum in message.nested_enums:
952 entries.append((enum, message_path(current_stack), current_stack))
953 for union in message.nested_unions:
954 entries.append((union, message_path(current_stack), current_stack))
955 for nested in message.nested_messages:
956 add_message(nested, current_stack)
957
958 for enum in self.schema.enums:
959 entries.append((enum, None, []))
960 for union in self.schema.unions:
961 entries.append((union, None, []))
962 for message in self.schema.messages:
963 add_message(message, [])
964
965 local_entries: Dict[int, Tuple[object, Optional[str], List[Message]]] = {
966 id(type_def): (type_def, owner_path, parent_stack)
967 for type_def, owner_path, parent_stack in entries
968 if not self.is_imported_type(type_def)
969 }
970 ordered: List[Tuple[object, Optional[str]]] = []
971 visiting: Set[int] = set()
972 visited: Set[int] = set()
973
974 def visit(type_def: object) -> None:
975 key = id(type_def)
976 if key in visited or key not in local_entries:
977 return
978 if key in visiting:
979 return
980 visiting.add(key)
981 _, _, parent_stack = local_entries[key]
982 for dependency in self.registration_dependencies(type_def, parent_stack):
983 visit(dependency)
984 visiting.remove(key)
985 visited.add(key)
986 current, owner_path, _ = local_entries[key]
987 ordered.append((current, owner_path))
988
989 for type_def, _, _ in entries:
990 visit(type_def)
991 return ordered
992
993 def registration_dependencies(
994 self, type_def: object, parent_stack: List[Message]

Callers 1

generate_module_fileMethod · 0.95

Calls 4

is_imported_typeMethod · 0.95
add_messageFunction · 0.85
setFunction · 0.50
appendMethod · 0.45

Tested by

no test coverage detected