Source:
protected CompletableFuture<ExecutionResult> completeValue(ExecutionContext executionContext, ExecutionStrategyParameters parameters) throws NonNullableFieldWasNullException { ExecutionTypeInfo typeInfo = parameters.typeInfo(); Object result = unboxPossibleOptional(parameters.source()); GraphQLType fieldType = typeInfo.getType(); if (result != null && result instanceof DataFetcherResult) { DataFetcherResult<Object> dataFetcherResult = (DataFetcherResult)result; result = dataFetcherResult.getData(); dataFetcherResult.getErrors().stream() .map(relError -> new AbsoluteGraphQLError(parameters, relError)) .forEach(e -> executionContext.addError(e, ExecutionPath.fromList(e.getPath()))); } if (result == null) { return completedFuture(new ExecutionResultImpl(parameters.nonNullFieldValidator().validate(parameters.path(), null), null)); } else if (fieldType instanceof GraphQLList) { return completeValueForList(executionContext, parameters, toIterable(result)); } else if (fieldType instanceof GraphQLScalarType) { return completeValueForScalar(executionContext, parameters, (GraphQLScalarType) fieldType, result); } else if (fieldType instanceof GraphQLEnumType) { return completeValueForEnum(executionContext, parameters, (GraphQLEnumType) fieldType, result); } GraphQLObjectType resolvedType = resolveType(executionContext, parameters, fieldType); FieldCollectorParameters collectorParameters = newParameters() .schema(executionContext.getGraphQLSchema()) .objectType(resolvedType) .fragments(executionContext.getFragmentsByName()) .variables(executionContext.getVariables()) .build(); Map<String, List<Field>> subFields = fieldCollector.collectFields(collectorParameters, parameters.field()); ExecutionTypeInfo newTypeInfo = typeInfo.treatAs(resolvedType); NonNullableFieldValidator nonNullableFieldValidator = new NonNullableFieldValidator(executionContext, newTypeInfo); ExecutionStrategyParameters newParameters = ExecutionStrategyParameters.newParameters() .typeInfo(newTypeInfo) .fields(subFields) .nonNullFieldValidator(nonNullableFieldValidator) .path(parameters.path()) .source(result).build(); return executionContext.getQueryStrategy().execute(executionContext, newParameters); }

Target:
protected CompletableFuture<ExecutionResult> completeValue(ExecutionContext executionContext, ExecutionStrategyParameters parameters) throws NonNullableFieldWasNullException { ExecutionTypeInfo typeInfo = parameters.typeInfo(); Object result = unboxPossibleOptional(parameters.source()); GraphQLType fieldType = typeInfo.getType(); if (result == null) { return completedFuture(new ExecutionResultImpl(parameters.nonNullFieldValidator().validate(parameters.path(), null), null)); } else if (fieldType instanceof GraphQLList) { return completeValueForList(executionContext, parameters, toIterable(result)); } else if (fieldType instanceof GraphQLScalarType) { return completeValueForScalar(executionContext, parameters, (GraphQLScalarType) fieldType, result); } else if (fieldType instanceof GraphQLEnumType) { return completeValueForEnum(executionContext, parameters, (GraphQLEnumType) fieldType, result); } GraphQLObjectType resolvedType = resolveType(executionContext, parameters, fieldType); FieldCollectorParameters collectorParameters = newParameters() .schema(executionContext.getGraphQLSchema()) .objectType(resolvedType) .fragments(executionContext.getFragmentsByName()) .variables(executionContext.getVariables()) .build(); Map<String, List<Field>> subFields = fieldCollector.collectFields(collectorParameters, parameters.field()); ExecutionTypeInfo newTypeInfo = typeInfo.treatAs(resolvedType); NonNullableFieldValidator nonNullableFieldValidator = new NonNullableFieldValidator(executionContext, newTypeInfo); ExecutionStrategyParameters newParameters = ExecutionStrategyParameters.newParameters() .typeInfo(newTypeInfo) .fields(subFields) .nonNullFieldValidator(nonNullableFieldValidator) .path(parameters.path()) .source(result).build(); return executionContext.getQueryStrategy().execute(executionContext, newParameters); }