docs: protected FieldValueInfo completeField(ExecutionContext executionContext, ExecutionStrategyParameters parameters, FetchedValue fetchedValue) {
          Field field = parameters.getField().getSingleField();
          GraphQLObjectType parentType = (GraphQLObjectType) parameters.getExecutionStepInfo().getUnwrappedNonNullType();
          GraphQLFieldDefinition fieldDef = getFieldDef(executionContext.getGraphQLSchema(), parentType, field);
          ExecutionStepInfo executionStepInfo = createExecutionStepInfo(executionContext, parameters, fieldDef, parentType);
  
          Instrumentation instrumentation = executionContext.getInstrumentation();
          InstrumentationFieldCompleteParameters instrumentationParams = new InstrumentationFieldCompleteParameters(executionContext, parameters, fieldDef, executionStepInfo, fetchedValue);
          InstrumentationContext<ExecutionResult> ctxCompleteField = instrumentation.beginFieldComplete(
                  instrumentationParams
          );
  
          GraphQLCodeRegistry codeRegistry = executionContext.getGraphQLSchema().getCodeRegistry();
          Map<String, Object> argumentValues = valuesResolver.getArgumentValues(codeRegistry, fieldDef.getArguments(), field.getArguments(), executionContext.getVariables());
  
          NonNullableFieldValidator nonNullableFieldValidator = new NonNullableFieldValidator(executionContext, executionStepInfo);
  
          ExecutionStrategyParameters newParameters = parameters.transform(builder ->
                  builder.executionStepInfo(executionStepInfo)
                          .arguments(argumentValues)
                          .source(fetchedValue.getFetchedValue())
                          .localContext(fetchedValue.getLocalContext())
                          .nonNullFieldValidator(nonNullableFieldValidator)
          );
  
          log.debug("'{}' completing field '{}'...", executionContext.getExecutionId(), executionStepInfo.getPath());
  
          FieldValueInfo fieldValueInfo = completeValue(executionContext, newParameters);
  
          CompletableFuture<ExecutionResult> executionResultFuture = fieldValueInfo.getFieldValue();
          ctxCompleteField.onDispatched(executionResultFuture);
          executionResultFuture.whenComplete(ctxCompleteField::onCompleted);
          return fieldValueInfo;
      }