@@ -34,48 +34,47 @@ def build_field_plan(
3434 parent_defer_usages = RefSet ()
3535
3636 grouped_field_set : GroupedFieldSet = {}
37-
3837 new_grouped_field_sets : RefMap [DeferUsageSet , GroupedFieldSet ] = RefMap ()
3938
40- map_ : dict [str , tuple [DeferUsageSet , FieldGroup ]] = {}
41-
4239 for response_key , field_group in original_grouped_field_set .items ():
43- defer_usage_set : RefSet [DeferUsage ] = RefSet ()
44- in_original_result = False
45- for field_details in field_group :
46- defer_usage = field_details .defer_usage
47- if defer_usage is None :
48- in_original_result = True
49- continue
50- defer_usage_set .add (defer_usage )
51- if in_original_result :
52- defer_usage_set .clear ()
53- else :
54- defer_usage_set -= {
55- defer_usage
56- for defer_usage in defer_usage_set
57- if any (
58- ancestor in defer_usage_set for ancestor in defer_usage .ancestors
59- )
60- }
61- map_ [response_key ] = (defer_usage_set , field_group )
62-
63- for response_key , [defer_usage_set , field_group ] in map_ .items ():
64- if defer_usage_set == parent_defer_usages :
40+ filtered_defer_usage_set = get_filtered_defer_usage_set (field_group )
41+
42+ if filtered_defer_usage_set == parent_defer_usages :
6543 grouped_field_set [response_key ] = field_group
6644 continue
6745
68- for (
69- new_grouped_field_set_defer_usage_set ,
70- new_grouped_field_set_field_group ,
71- ) in new_grouped_field_sets .items (): # pragma: no branch
72- if new_grouped_field_set_defer_usage_set == defer_usage_set :
73- new_grouped_field_set = new_grouped_field_set_field_group
46+ for defer_usage_set in new_grouped_field_sets :
47+ if defer_usage_set == filtered_defer_usage_set :
48+ new_grouped_field_set = new_grouped_field_sets [defer_usage_set ]
7449 break
7550 else :
7651 new_grouped_field_set = {}
77- new_grouped_field_sets [defer_usage_set ] = new_grouped_field_set
52+ new_grouped_field_sets [filtered_defer_usage_set ] = new_grouped_field_set
7853
7954 new_grouped_field_set [response_key ] = field_group
8055
8156 return FieldPlan (grouped_field_set , new_grouped_field_sets )
57+
58+
59+ def get_filtered_defer_usage_set (field_group : FieldGroup ) -> RefSet [DeferUsage ]:
60+ """Get a filtered set of defer usages."""
61+ # Create the set of defer usages for the field group.
62+ filtered_defer_usage_set : RefSet [DeferUsage ] = RefSet ()
63+ for field_details in field_group :
64+ defer_usage = field_details .defer_usage
65+ if defer_usage is None :
66+ filtered_defer_usage_set .clear ()
67+ return filtered_defer_usage_set
68+ filtered_defer_usage_set .add (defer_usage )
69+
70+ # Remove defer usages that have a parent defer usage in the set.
71+ # Since we remove in place, we need to iterate over a copy of the set.
72+ for defer_usage in tuple (filtered_defer_usage_set ):
73+ parent_defer_usage : DeferUsage | None = defer_usage .parent_defer_usage
74+ while parent_defer_usage is not None :
75+ if parent_defer_usage in filtered_defer_usage_set :
76+ filtered_defer_usage_set .discard (defer_usage )
77+ break
78+ parent_defer_usage = parent_defer_usage .parent_defer_usage
79+
80+ return filtered_defer_usage_set
0 commit comments