code: protected CompletableFuture<FieldValueInfo> resolveFieldWithInfo(ExecutionContext executionContext, ExecutionStrategyParameters parameters) {
          GraphQLFieldDefinition fieldDef = getFieldDef(executionContext, parameters, parameters.getField().getSingleField());
  
          Instrumentation instrumentation = executionContext.getInstrumentation();
          InstrumentationContext<ExecutionResult> fieldCtx = instrumentation.beginField(
                  new InstrumentationFieldParameters(executionContext, fieldDef, createExecutionStepInfo(executionContext, parameters, fieldDef, null))
          );
  
          CompletableFuture<FetchedValue> fetchFieldFuture = fetchField(executionContext, parameters);
          CompletableFuture<FieldValueInfo> result = fetchFieldFuture.thenApply((fetchedValue) ->
                  completeField(executionContext, parameters, fetchedValue));
  
          CompletableFuture<ExecutionResult> executionResultFuture = result.thenCompose(FieldValueInfo::getFieldValue);
  
          fieldCtx.onDispatched(executionResultFuture);
          executionResultFuture.whenComplete(fieldCtx::onCompleted);
          return result;
      }
docs: Called to fetch a value for a field and its extra runtime info and resolve it further in terms of the graphql query.  This will call
  #fetchField followed by #completeField and the completed {@link graphql.execution.FieldValueInfo} is returned.
  <p>
  An execution strategy can iterate the fields to be executed and call this method for each one
  <p>
  Graphql fragments mean that for any give logical field can have one or more {@link Field} values associated with it
  in the query, hence the fieldList.  However the first entry is representative of the field for most purposes.
  
  @param executionContext contains the top level execution parameters
  @param parameters       contains the parameters holding the fields to be executed and source object
  
  @return a promise to a {@link FieldValueInfo}
  
  @throws NonNullableFieldWasNullException in the {@link FieldValueInfo#getFieldValue()} future if a non null field resolves to a null value