1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-06 05:12:21 +01:00

fixed unref enum tracking

This commit is contained in:
J. Nick Koston
2025-07-18 09:24:24 -10:00
parent d6422b6d25
commit cc1abfcdb3
4 changed files with 38 additions and 14 deletions

View File

@@ -971,13 +971,11 @@ class RepeatedTypeInfo(TypeInfo):
def build_type_usage_map(
file_desc: descriptor.FileDescriptorProto,
) -> tuple[
dict[str, str | None], dict[str, str | None], dict[str, int], set[str], set[str]
]:
) -> tuple[dict[str, str | None], dict[str, str | None], dict[str, int], set[str]]:
"""Build mappings for both enums and messages to their ifdefs based on usage.
Returns:
tuple: (enum_ifdef_map, message_ifdef_map, message_source_map, used_enums, used_messages)
tuple: (enum_ifdef_map, message_ifdef_map, message_source_map, used_messages)
"""
enum_ifdef_map: dict[str, str | None] = {}
message_ifdef_map: dict[str, str | None] = {}
@@ -990,9 +988,6 @@ def build_type_usage_map(
message_usage: dict[
str, set[str]
] = {} # message_name -> set of message names that use it
used_enums: set[str] = (
set()
) # Track which enums are actually used by non-deprecated fields
used_messages: set[str] = set() # Track which messages are actually used
# Build message name to ifdef mapping for quick lookup
@@ -1018,7 +1013,6 @@ def build_type_usage_map(
# Track enum usage (only from non-deprecated fields)
if field.type == 14: # TYPE_ENUM
enum_usage.setdefault(type_name, set()).add(message.name)
used_enums.add(type_name)
# Track message usage
elif field.type == 11: # TYPE_MESSAGE
message_usage.setdefault(type_name, set()).add(message.name)
@@ -1129,7 +1123,6 @@ def build_type_usage_map(
enum_ifdef_map,
message_ifdef_map,
message_source_map,
used_enums,
used_messages,
)
@@ -1718,7 +1711,7 @@ namespace api {
content += "namespace enums {\n\n"
# Build dynamic ifdef mappings for both enums and messages
enum_ifdef_map, message_ifdef_map, message_source_map, used_enums, used_messages = (
enum_ifdef_map, message_ifdef_map, message_source_map, used_messages = (
build_type_usage_map(file)
)
@@ -1730,10 +1723,6 @@ namespace api {
if enum.options.deprecated:
continue
# Skip enums that aren't used by any non-deprecated fields
if enum.name not in used_enums:
continue
s, c, dc = build_enum_type(enum, enum_ifdef_map)
enum_ifdef = enum_ifdef_map.get(enum.name)