@@ -429,7 +429,8 @@ def evaluate_selection(result_name, field_ast_nodes_or_ast_node, owner_object, o
429429 # This seems janky, but we need to know
430430 # the field's return type at this path in order
431431 # to propagate `null`
432- if return_type . non_null?
432+ return_type_non_null = return_type . non_null?
433+ if return_type_non_null
433434 ( selections_result . graphql_non_null_field_names ||= [ ] ) . push ( result_name )
434435 end
435436 # Set this before calling `run_with_directives`, so that the directive can have the latest path
@@ -449,22 +450,22 @@ def evaluate_selection(result_name, field_ast_nodes_or_ast_node, owner_object, o
449450 resolved_arguments = GraphQL ::Execution ::Interpreter ::Arguments ::EMPTY
450451 if field_defn . extras . size == 0
451452 evaluate_selection_with_resolved_keyword_args (
452- NO_ARGS , resolved_arguments , field_defn , ast_node , field_ast_nodes , owner_type , object , is_eager_field , result_name , selections_result , parent_object , return_type ,
453+ NO_ARGS , resolved_arguments , field_defn , ast_node , field_ast_nodes , owner_type , object , is_eager_field , result_name , selections_result , parent_object , return_type , return_type_non_null
453454 )
454455 else
455- evaluate_selection_with_args ( resolved_arguments , field_defn , ast_node , field_ast_nodes , owner_type , object , is_eager_field , result_name , selections_result , parent_object , return_type )
456+ evaluate_selection_with_args ( resolved_arguments , field_defn , ast_node , field_ast_nodes , owner_type , object , is_eager_field , result_name , selections_result , parent_object , return_type , return_type_non_null )
456457 end
457458 else
458459 @query . arguments_cache . dataload_for ( ast_node , field_defn , object ) do |resolved_arguments |
459- evaluate_selection_with_args ( resolved_arguments , field_defn , ast_node , field_ast_nodes , owner_type , object , is_eager_field , result_name , selections_result , parent_object , return_type )
460+ evaluate_selection_with_args ( resolved_arguments , field_defn , ast_node , field_ast_nodes , owner_type , object , is_eager_field , result_name , selections_result , parent_object , return_type , return_type_non_null )
460461 end
461462 end
462463 end
463464
464- def evaluate_selection_with_args ( arguments , field_defn , ast_node , field_ast_nodes , owner_type , object , is_eager_field , result_name , selection_result , parent_object , return_type ) # rubocop:disable Metrics/ParameterLists
465+ def evaluate_selection_with_args ( arguments , field_defn , ast_node , field_ast_nodes , owner_type , object , is_eager_field , result_name , selection_result , parent_object , return_type , return_type_non_null ) # rubocop:disable Metrics/ParameterLists
465466 after_lazy ( arguments , owner : owner_type , field : field_defn , ast_node : ast_node , owner_object : object , arguments : arguments , result_name : result_name , result : selection_result ) do |resolved_arguments |
466467 if resolved_arguments . is_a? ( GraphQL ::ExecutionError ) || resolved_arguments . is_a? ( GraphQL ::UnauthorizedError )
467- continue_value ( resolved_arguments , owner_type , field_defn , return_type . non_null? , ast_node , result_name , selection_result )
468+ continue_value ( resolved_arguments , owner_type , field_defn , return_type_non_null , ast_node , result_name , selection_result )
468469 next
469470 end
470471
@@ -513,11 +514,11 @@ def evaluate_selection_with_args(arguments, field_defn, ast_node, field_ast_node
513514 resolved_arguments . keyword_arguments
514515 end
515516
516- evaluate_selection_with_resolved_keyword_args ( kwarg_arguments , resolved_arguments , field_defn , ast_node , field_ast_nodes , owner_type , object , is_eager_field , result_name , selection_result , parent_object , return_type )
517+ evaluate_selection_with_resolved_keyword_args ( kwarg_arguments , resolved_arguments , field_defn , ast_node , field_ast_nodes , owner_type , object , is_eager_field , result_name , selection_result , parent_object , return_type , return_type_non_null )
517518 end
518519 end
519520
520- def evaluate_selection_with_resolved_keyword_args ( kwarg_arguments , resolved_arguments , field_defn , ast_node , field_ast_nodes , owner_type , object , is_eager_field , result_name , selection_result , parent_object , return_type ) # rubocop:disable Metrics/ParameterLists
521+ def evaluate_selection_with_resolved_keyword_args ( kwarg_arguments , resolved_arguments , field_defn , ast_node , field_ast_nodes , owner_type , object , is_eager_field , result_name , selection_result , parent_object , return_type , return_type_non_null ) # rubocop:disable Metrics/ParameterLists
521522 st = get_current_runtime_state
522523 st . current_field = field_defn
523524 st . current_object = object
@@ -553,7 +554,7 @@ def evaluate_selection_with_resolved_keyword_args(kwarg_arguments, resolved_argu
553554 end
554555 end
555556 after_lazy ( app_result , owner : owner_type , field : field_defn , ast_node : ast_node , owner_object : object , arguments : resolved_arguments , result_name : result_name , result : selection_result ) do |inner_result |
556- continue_value = continue_value ( inner_result , owner_type , field_defn , return_type . non_null? , ast_node , result_name , selection_result )
557+ continue_value = continue_value ( inner_result , owner_type , field_defn , return_type_non_null , ast_node , result_name , selection_result )
557558 if HALT != continue_value
558559 continue_field ( continue_value , owner_type , field_defn , return_type , ast_node , next_selections , false , object , resolved_arguments , result_name , selection_result )
559560 end
@@ -573,7 +574,7 @@ def evaluate_selection_with_resolved_keyword_args(kwarg_arguments, resolved_argu
573574
574575
575576 def dead_result? ( selection_result )
576- selection_result . graphql_dead || ( ( parent = selection_result . graphql_parent ) && parent . graphql_dead )
577+ selection_result . graphql_dead # || ((parent = selection_result.graphql_parent) && parent.graphql_dead)
577578 end
578579
579580 def set_result ( selection_result , result_name , value )
@@ -827,21 +828,21 @@ def continue_field(value, owner_type, field, current_type, ast_node, next_select
827828 inner_type = current_type . of_type
828829 # This is true for objects, unions, and interfaces
829830 use_dataloader_job = !inner_type . unwrap . kind . input?
831+ inner_type_non_null = inner_type . non_null?
830832 response_list = GraphQLResultArray . new ( result_name , selection_result )
831- response_list . graphql_non_null_list_items = inner_type . non_null?
833+ response_list . graphql_non_null_list_items = inner_type_non_null
832834 set_result ( selection_result , result_name , response_list )
833835 idx = 0
834836 list_value = begin
835837 value . each do |inner_value |
836- break if dead_result? ( response_list )
837838 this_idx = idx
838839 idx += 1
839840 if use_dataloader_job
840841 @dataloader . append_job do
841- resolve_list_item ( inner_value , inner_type , ast_node , field , owner_object , arguments , this_idx , response_list , next_selections , owner_type )
842+ resolve_list_item ( inner_value , inner_type , inner_type_non_null , ast_node , field , owner_object , arguments , this_idx , response_list , next_selections , owner_type )
842843 end
843844 else
844- resolve_list_item ( inner_value , inner_type , ast_node , field , owner_object , arguments , this_idx , response_list , next_selections , owner_type )
845+ resolve_list_item ( inner_value , inner_type , inner_type_non_null , ast_node , field , owner_object , arguments , this_idx , response_list , next_selections , owner_type )
845846 end
846847 end
847848
@@ -871,14 +872,14 @@ def continue_field(value, owner_type, field, current_type, ast_node, next_select
871872 end
872873 end
873874
874- def resolve_list_item ( inner_value , inner_type , ast_node , field , owner_object , arguments , this_idx , response_list , next_selections , owner_type ) # rubocop:disable Metrics/ParameterLists
875+ def resolve_list_item ( inner_value , inner_type , inner_type_non_null , ast_node , field , owner_object , arguments , this_idx , response_list , next_selections , owner_type ) # rubocop:disable Metrics/ParameterLists
875876 st = get_current_runtime_state
876877 st . current_result_name = this_idx
877878 st . current_result = response_list
878879 call_method_on_directives ( :resolve_each , owner_object , ast_node . directives ) do
879880 # This will update `response_list` with the lazy
880881 after_lazy ( inner_value , owner : inner_type , ast_node : ast_node , field : field , owner_object : owner_object , arguments : arguments , result_name : this_idx , result : response_list ) do |inner_inner_value |
881- continue_value = continue_value ( inner_inner_value , owner_type , field , inner_type . non_null? , ast_node , this_idx , response_list )
882+ continue_value = continue_value ( inner_inner_value , owner_type , field , inner_type_non_null , ast_node , this_idx , response_list )
882883 if HALT != continue_value
883884 continue_field ( continue_value , owner_type , field , inner_type , ast_node , next_selections , false , owner_object , arguments , this_idx , response_list )
884885 end
0 commit comments