1515package graphql .annotations ;
1616
1717import graphql .ExecutionResult ;
18- import graphql .execution .ExecutionContext ;
19- import graphql .execution .ExecutionParameters ;
20- import graphql .execution .SimpleExecutionStrategy ;
21- import graphql .execution .TypeInfo ;
22- import graphql .language .Argument ;
23- import graphql .language .Field ;
24- import graphql .language .ObjectValue ;
25- import graphql .language .StringValue ;
26- import graphql .language .VariableReference ;
18+ import graphql .execution .*;
19+ import graphql .language .*;
2720import graphql .schema .GraphQLEnumType ;
2821import graphql .schema .GraphQLFieldDefinition ;
2922import graphql .schema .GraphQLObjectType ;
30- import graphql .schema .GraphQLType ;
3123
3224import java .util .HashMap ;
33- import java .util .List ;
3425import java .util .Optional ;
26+ import java .util .concurrent .CompletableFuture ;
3527
36- import static graphql .execution .ExecutionParameters .newParameters ;
37- import static graphql .execution .TypeInfoWorkaround .newTypeInfo ;
38-
39- public class EnhancedExecutionStrategy extends SimpleExecutionStrategy {
28+ public class EnhancedExecutionStrategy extends AsyncSerialExecutionStrategy {
4029
4130 private static final String CLIENT_MUTATION_ID = "clientMutationId" ;
4231
4332 @ Override
44- protected ExecutionResult resolveField (ExecutionContext executionContext , ExecutionParameters parameters , List < Field > fields ) {
45- GraphQLObjectType parentType = (GraphQLObjectType ) parameters .typeInfo ().type ();
46- GraphQLFieldDefinition fieldDef = getFieldDef (executionContext .getGraphQLSchema (), parentType , fields .get (0 ));
33+ protected CompletableFuture < ExecutionResult > resolveField (ExecutionContext executionContext , ExecutionStrategyParameters parameters ) {
34+ GraphQLObjectType parentType = (GraphQLObjectType ) parameters .typeInfo ().getType ();
35+ GraphQLFieldDefinition fieldDef = getFieldDef (executionContext .getGraphQLSchema (), parentType , parameters . field () .get (0 ));
4736 if (fieldDef == null ) return null ;
4837
4938 if (fieldDef .getName ().contentEquals (CLIENT_MUTATION_ID )) {
@@ -63,45 +52,48 @@ protected ExecutionResult resolveField(ExecutionContext executionContext, Execut
6352 clientMutationId = clientMutationIdVal .getValue ();
6453 }
6554
66- TypeInfo fieldTypeInfo = newTypeInfo (fieldDef .getType (), parameters .typeInfo ());
67- ExecutionParameters newParameters = newParameters ()
55+ ExecutionTypeInfo fieldTypeInfo = ExecutionTypeInfo . newTypeInfo (). type ( fieldDef .getType ()). parentInfo ( parameters .typeInfo ()). build ( );
56+ ExecutionStrategyParameters newParameters = ExecutionStrategyParameters . newParameters ()
6857 .arguments (parameters .arguments ())
6958 .fields (parameters .fields ())
59+ .nonNullFieldValidator (parameters .nonNullFieldValidator ())
7060 .typeInfo (fieldTypeInfo )
7161 .source (clientMutationId )
7262 .build ();
7363
7464
75- return completeValue (executionContext , newParameters , fields );
65+ return completeValue (executionContext , newParameters );
7666 } else {
77- return super .resolveField (executionContext , parameters , fields );
67+ return super .resolveField (executionContext , parameters );
7868 }
7969 }
8070
8171 @ Override
82- protected ExecutionResult completeValue (ExecutionContext executionContext , ExecutionParameters parameters , List < Field > fields ) {
83- GraphQLType fieldType = parameters .typeInfo ().type ();
72+ protected CompletableFuture < ExecutionResult > completeValue (ExecutionContext executionContext , ExecutionStrategyParameters parameters ) throws NonNullableFieldWasNullException {
73+ graphql . schema . GraphQLType fieldType = parameters .typeInfo ().getType ();
8474 Object result = parameters .source ();
8575 if (result instanceof Enum && fieldType instanceof GraphQLEnumType ) {
8676 Object value = ((GraphQLEnumType ) fieldType ).getCoercing ().parseValue (((Enum ) result ).name ());
87- return super .completeValue (executionContext , withSource (parameters , value ), fields );
77+ return super .completeValue (executionContext , withSource (parameters , value ));
8878 }
8979 if (result instanceof Optional ) {
9080 Object value = ((Optional <?>) result ).orElse (null );
91- return completeValue (executionContext , withSource (parameters , value ), fields );
81+ return completeValue (executionContext , withSource (parameters , value ));
9282 }
93- return super .completeValue (executionContext , parameters , fields );
83+ return super .completeValue (executionContext , parameters );
9484 }
9585
9686 /*
9787 Creates a new parameters with the specified object as its source
9888 */
99- private ExecutionParameters withSource (ExecutionParameters parameters , Object source ) {
100- return newParameters ()
89+ private ExecutionStrategyParameters withSource (ExecutionStrategyParameters parameters , Object source ) {
90+ return ExecutionStrategyParameters . newParameters ()
10191 .arguments (parameters .arguments ())
10292 .fields (parameters .fields ())
93+ .nonNullFieldValidator (parameters .nonNullFieldValidator ())
10394 .typeInfo (parameters .typeInfo ())
10495 .source (source )
10596 .build ();
10697 }
98+
10799}
0 commit comments