code: @PublicEvolving
  	public <OUT> DataStreamSource<OUT> createInput(InputFormat<OUT, ?> inputFormat) {
  		return createInput(inputFormat, TypeExtractor.getInputFormatTypes(inputFormat));
  	}
docs: Generic method to create an input data stream with {@link org.apache.flink.api.common.io.InputFormat}.
  
  <p>Since all data streams need specific information about their types, this method needs to determine the
  type of the data produced by the input format. It will attempt to determine the data type by reflection,
  unless the input format implements the {@link org.apache.flink.api.java.typeutils.ResultTypeQueryable} interface.
  In the latter case, this method will invoke the
  {@link org.apache.flink.api.java.typeutils.ResultTypeQueryable#getProducedType()} method to determine data
  type produced by the input format.
  
  <p><b>NOTES ON CHECKPOINTING: </b> In the case of a {@link FileInputFormat}, the source
  (which executes the {@link ContinuousFileMonitoringFunction}) monitors the path, creates the
  {@link org.apache.flink.core.fs.FileInputSplit FileInputSplits} to be processed, forwards
  them to the downstream {@link ContinuousFileReaderOperator} to read the actual data, and exits,
  without waiting for the readers to finish reading. This implies that no more checkpoint
  barriers are going to be forwarded after the source exits, thus having no checkpoints.
  
  @param inputFormat
  The input format used to create the data stream
  @param <OUT>
  The type of the returned data stream
  @return The data stream that represents the data created by the input format