code: public ExecutionStepInfo changeTypeWithPreservedNonNull(GraphQLOutputType newType) {
          assertTrue(!GraphQLTypeUtil.isNonNull(newType), "newType can't be non null");
          if (isNonNullType()) {
              return new ExecutionStepInfo(GraphQLNonNull.nonNull(newType), fieldDefinition, field, path, this.parent, arguments, this.fieldContainer);
          } else {
              return new ExecutionStepInfo(newType, fieldDefinition, field, path, this.parent, arguments, this.fieldContainer);
          }
      }
docs: This allows you to morph a type into a more specialized form yet return the same
  parent and non-null ness, for example taking a {@link GraphQLInterfaceType}
  and turning it into a specific {@link graphql.schema.GraphQLObjectType}
  after type resolution has occurred
  
  @param newType the new type to be
  
  @return a new type info with the same