2222import graphql .schema .DataFetcher ;
2323import graphql .schema .GraphQLSchema ;
2424import graphql .validation .ValidationError ;
25- import org .jspecify .annotations .NonNull ;
25+ import org .jspecify .annotations .NullMarked ;
2626import org .jspecify .annotations .Nullable ;
2727
2828import java .util .AbstractMap ;
4545 * @see graphql.execution.instrumentation.Instrumentation
4646 */
4747@ PublicApi
48+ @ NullMarked
4849public class ChainedInstrumentation implements Instrumentation {
4950
5051 // This class is inspired from https://github.com/leangen/graphql-spqr/blob/master/src/main/java/io/leangen/graphql/GraphQLRuntime.java#L80
@@ -113,29 +114,29 @@ protected void chainedConsume(InstrumentationState state, BiConsumer<Instrumenta
113114 }
114115
115116 @ Override
116- public @ NonNull CompletableFuture <InstrumentationState > createStateAsync (InstrumentationCreateStateParameters parameters ) {
117+ public CompletableFuture <InstrumentationState > createStateAsync (InstrumentationCreateStateParameters parameters ) {
117118 return ChainedInstrumentationState .combineAll (instrumentations , parameters );
118119 }
119120
120121 @ Override
121- public InstrumentationContext <ExecutionResult > beginExecution (InstrumentationExecutionParameters parameters , InstrumentationState state ) {
122+ public @ Nullable InstrumentationContext <ExecutionResult > beginExecution (InstrumentationExecutionParameters parameters , InstrumentationState state ) {
122123 return chainedCtx (state , (instrumentation , specificState ) -> instrumentation .beginExecution (parameters , specificState ));
123124 }
124125
125126
126127 @ Override
127- public InstrumentationContext <Document > beginParse (InstrumentationExecutionParameters parameters , InstrumentationState state ) {
128+ public @ Nullable InstrumentationContext <Document > beginParse (InstrumentationExecutionParameters parameters , InstrumentationState state ) {
128129 return chainedCtx (state , (instrumentation , specificState ) -> instrumentation .beginParse (parameters , specificState ));
129130 }
130131
131132
132133 @ Override
133- public InstrumentationContext <List <ValidationError >> beginValidation (InstrumentationValidationParameters parameters , InstrumentationState state ) {
134+ public @ Nullable InstrumentationContext <List <ValidationError >> beginValidation (InstrumentationValidationParameters parameters , InstrumentationState state ) {
134135 return chainedCtx (state , (instrumentation , specificState ) -> instrumentation .beginValidation (parameters , specificState ));
135136 }
136137
137138 @ Override
138- public InstrumentationContext <ExecutionResult > beginExecuteOperation (InstrumentationExecuteOperationParameters parameters , InstrumentationState state ) {
139+ public @ Nullable InstrumentationContext <ExecutionResult > beginExecuteOperation (InstrumentationExecuteOperationParameters parameters , InstrumentationState state ) {
139140 return chainedCtx (state , (instrumentation , specificState ) -> instrumentation .beginExecuteOperation (parameters , specificState ));
140141 }
141142
@@ -145,7 +146,7 @@ public InstrumentationContext<ExecutionResult> beginExecuteOperation(Instrumenta
145146 }
146147
147148 @ Override
148- public ExecutionStrategyInstrumentationContext beginExecutionStrategy (InstrumentationExecutionStrategyParameters parameters , InstrumentationState state ) {
149+ public @ Nullable ExecutionStrategyInstrumentationContext beginExecutionStrategy (InstrumentationExecutionStrategyParameters parameters , InstrumentationState state ) {
149150 if (instrumentations .isEmpty ()) {
150151 return ExecutionStrategyInstrumentationContext .NOOP ;
151152 }
@@ -172,12 +173,12 @@ public ExecutionStrategyInstrumentationContext beginExecutionStrategy(Instrument
172173
173174 @ ExperimentalApi
174175 @ Override
175- public InstrumentationContext <Object > beginDeferredField (InstrumentationFieldParameters parameters , InstrumentationState state ) {
176+ public @ Nullable InstrumentationContext <Object > beginDeferredField (InstrumentationFieldParameters parameters , InstrumentationState state ) {
176177 return chainedCtx (state , (instrumentation , specificState ) -> instrumentation .beginDeferredField (parameters , specificState ));
177178 }
178179
179180 @ Override
180- public InstrumentationContext <ExecutionResult > beginSubscribedFieldEvent (InstrumentationFieldParameters parameters , InstrumentationState state ) {
181+ public @ Nullable InstrumentationContext <ExecutionResult > beginSubscribedFieldEvent (InstrumentationFieldParameters parameters , InstrumentationState state ) {
181182 return chainedCtx (state , (instrumentation , specificState ) -> instrumentation .beginSubscribedFieldEvent (parameters , specificState ));
182183 }
183184
@@ -188,12 +189,12 @@ public InstrumentationContext<ExecutionResult> beginSubscribedFieldEvent(Instrum
188189
189190 @ SuppressWarnings ("deprecation" )
190191 @ Override
191- public InstrumentationContext <Object > beginFieldFetch (InstrumentationFieldFetchParameters parameters , InstrumentationState state ) {
192+ public @ Nullable InstrumentationContext <Object > beginFieldFetch (InstrumentationFieldFetchParameters parameters , InstrumentationState state ) {
192193 return chainedCtx (state , (instrumentation , specificState ) -> instrumentation .beginFieldFetch (parameters , specificState ));
193194 }
194195
195196 @ Override
196- public FieldFetchingInstrumentationContext beginFieldFetching (InstrumentationFieldFetchParameters parameters , InstrumentationState state ) {
197+ public @ Nullable FieldFetchingInstrumentationContext beginFieldFetching (InstrumentationFieldFetchParameters parameters , InstrumentationState state ) {
197198 if (instrumentations .isEmpty ()) {
198199 return FieldFetchingInstrumentationContext .NOOP ;
199200 }
@@ -217,41 +218,35 @@ public FieldFetchingInstrumentationContext beginFieldFetching(InstrumentationFie
217218 return chainedCtx (state , (instrumentation , specificState ) -> instrumentation .beginFieldListCompletion (parameters , specificState ));
218219 }
219220
220- @ NonNull
221221 @ Override
222222 public ExecutionInput instrumentExecutionInput (ExecutionInput executionInput , InstrumentationExecutionParameters parameters , InstrumentationState state ) {
223223 return chainedInstrument (state , executionInput , (instrumentation , specificState , accumulator ) -> instrumentation .instrumentExecutionInput (accumulator , parameters , specificState ));
224224 }
225225
226- @ NonNull
227226 @ Override
228227 public DocumentAndVariables instrumentDocumentAndVariables (DocumentAndVariables documentAndVariables , InstrumentationExecutionParameters parameters , InstrumentationState state ) {
229228 return chainedInstrument (state , documentAndVariables , (instrumentation , specificState , accumulator ) ->
230229 instrumentation .instrumentDocumentAndVariables (accumulator , parameters , specificState ));
231230 }
232231
233- @ NonNull
234232 @ Override
235233 public GraphQLSchema instrumentSchema (GraphQLSchema schema , InstrumentationExecutionParameters parameters , InstrumentationState state ) {
236234 return chainedInstrument (state , schema , (instrumentation , specificState , accumulator ) ->
237235 instrumentation .instrumentSchema (accumulator , parameters , specificState ));
238236 }
239237
240- @ NonNull
241238 @ Override
242239 public ExecutionContext instrumentExecutionContext (ExecutionContext executionContext , InstrumentationExecutionParameters parameters , InstrumentationState state ) {
243240 return chainedInstrument (state , executionContext , (instrumentation , specificState , accumulator ) ->
244241 instrumentation .instrumentExecutionContext (accumulator , parameters , specificState ));
245242 }
246243
247- @ NonNull
248244 @ Override
249245 public DataFetcher <?> instrumentDataFetcher (DataFetcher <?> dataFetcher , InstrumentationFieldFetchParameters parameters , InstrumentationState state ) {
250246 return chainedInstrument (state , dataFetcher , (Instrumentation instrumentation , InstrumentationState specificState , DataFetcher <?> accumulator ) ->
251247 instrumentation .instrumentDataFetcher (accumulator , parameters , specificState ));
252248 }
253249
254- @ NonNull
255250 @ Override
256251 public CompletableFuture <ExecutionResult > instrumentExecutionResult (ExecutionResult executionResult , InstrumentationExecutionParameters parameters , InstrumentationState state ) {
257252 ImmutableList <Map .Entry <Instrumentation , InstrumentationState >> entries = chainedMapAndDropNulls (state , AbstractMap .SimpleEntry ::new );
@@ -300,7 +295,7 @@ public void onDispatched() {
300295 }
301296
302297 @ Override
303- public void onCompleted (T result , Throwable t ) {
298+ public void onCompleted (@ Nullable T result , @ Nullable Throwable t ) {
304299 contexts .forEach (context -> context .onCompleted (result , t ));
305300 }
306301 }
@@ -319,7 +314,7 @@ public void onDispatched() {
319314 }
320315
321316 @ Override
322- public void onCompleted (ExecutionResult result , Throwable t ) {
317+ public void onCompleted (@ Nullable ExecutionResult result , @ Nullable Throwable t ) {
323318 contexts .forEach (context -> context .onCompleted (result , t ));
324319 }
325320
@@ -348,7 +343,7 @@ public void onDispatched() {
348343 }
349344
350345 @ Override
351- public void onCompleted (Map <String , Object > result , Throwable t ) {
346+ public void onCompleted (@ Nullable Map <String , Object > result , @ Nullable Throwable t ) {
352347 contexts .forEach (context -> context .onCompleted (result , t ));
353348 }
354349
@@ -387,7 +382,7 @@ public void onExceptionHandled(DataFetcherResult<Object> dataFetcherResult) {
387382 }
388383
389384 @ Override
390- public void onCompleted (Object result , Throwable t ) {
385+ public void onCompleted (@ Nullable Object result , @ Nullable Throwable t ) {
391386 contexts .forEach (context -> context .onCompleted (result , t ));
392387 }
393388 }
@@ -407,7 +402,7 @@ public void onDispatched() {
407402 }
408403
409404 @ Override
410- public void onCompleted (Object result , Throwable t ) {
405+ public void onCompleted (@ Nullable Object result , @ Nullable Throwable t ) {
411406 contexts .forEach (context -> context .onCompleted (result , t ));
412407 }
413408 }
0 commit comments