@@ -47,12 +47,21 @@ def initialize(name: nil, context:, schema:)
47
47
end . compare_by_identity
48
48
} . compare_by_identity
49
49
50
- @cached_visible_arguments = Hash . new do |h , arg |
51
- h [ arg ] = if @cached_visible [ arg ] && ( arg_type = arg . type . unwrap ) && @cached_visible [ arg_type ]
52
- true
53
- else
54
- false
55
- end
50
+ @cached_visible_arguments = Hash . new do |h , owner |
51
+ h [ owner ] = Hash . new do |h2 , arg |
52
+ h2 [ arg ] = if @cached_visible [ arg ] && ( arg_type = arg . type . unwrap ) && @cached_visible [ arg_type ]
53
+ case owner
54
+ when GraphQL ::Schema ::Field
55
+ @cached_visible_fields [ owner . owner ] [ owner ]
56
+ when Class
57
+ @cached_visible [ owner ]
58
+ else
59
+ raise "Unexpected argument owner for `#{ arg . path } `: #{ owner . inspect } "
60
+ end
61
+ else
62
+ false
63
+ end
64
+ end . compare_by_identity
56
65
end . compare_by_identity
57
66
58
67
@cached_parent_fields = Hash . new do |h , type |
@@ -82,7 +91,7 @@ def initialize(name: nil, context:, schema:)
82
91
end . compare_by_identity
83
92
84
93
@cached_arguments = Hash . new do |h , owner |
85
- h [ owner ] = non_duplicate_items ( owner . all_argument_definitions , @cached_visible_arguments )
94
+ h [ owner ] = non_duplicate_items ( owner . all_argument_definitions , @cached_visible_arguments [ owner ] )
86
95
end . compare_by_identity
87
96
88
97
@loadable_possible_types = Hash . new { |h , union_type | h [ union_type ] = union_type . possible_types } . compare_by_identity
@@ -180,7 +189,7 @@ def argument(owner, arg_name)
180
189
if arg . is_a? ( Array )
181
190
visible_arg = nil
182
191
arg . each do |arg_defn |
183
- if @cached_visible_arguments [ arg_defn ]
192
+ if @cached_visible_arguments [ owner ] [ arg_defn ]
184
193
if visible_arg . nil?
185
194
visible_arg = arg_defn
186
195
else
@@ -190,7 +199,7 @@ def argument(owner, arg_name)
190
199
end
191
200
visible_arg
192
201
else
193
- if arg && @cached_visible_arguments [ arg ]
202
+ if arg && @cached_visible_arguments [ owner ] [ arg ]
194
203
arg
195
204
else
196
205
nil
@@ -292,7 +301,7 @@ def load_all_types
292
301
@all_types_loaded = true
293
302
visit = Visibility ::Visit . new ( @schema ) do |member |
294
303
if member . is_a? ( Module ) && member . respond_to? ( :kind )
295
- if @cached_visible [ member ]
304
+ if @cached_visible [ member ] && referenced? ( member )
296
305
type_name = member . graphql_name
297
306
if ( prev_t = @all_types [ type_name ] ) && !prev_t . equal? ( member )
298
307
raise_duplicate_definition ( member , prev_t )
@@ -312,7 +321,18 @@ def load_all_types
312
321
end
313
322
314
323
def referenced? ( type_defn )
315
- @schema . visibility . all_references [ type_defn ] . any? { |r | r == true || @cached_visible [ r ] }
324
+ @schema . visibility . all_references [ type_defn ] . any? do |ref |
325
+ case ref
326
+ when GraphQL ::Schema ::Argument
327
+ @cached_visible_arguments [ ref . owner ] [ ref ]
328
+ when GraphQL ::Schema ::Field
329
+ @cached_visible_fields [ ref . owner ] [ ref ]
330
+ when Module
331
+ @cached_visible [ ref ]
332
+ when true
333
+ true
334
+ end
335
+ end
316
336
end
317
337
318
338
def possible_types_for ( type )
0 commit comments