code: protected void processReader(IModule module, ModuleBuildReader reader) throws IOException {
  		// Add the cache key generator list to the result list
  		List<ICacheKeyGenerator> keyGenList = reader.getCacheKeyGenerators();
  		if (keyGenList != null) {
  			keyGens.addAll(keyGenList);
  		}
  		if (smGen != null) {
  			// If we're generating a source map, then merge the source map for the module
  			// into the layer source map.
  			SourceMap moduleSourceMap = reader.getSourceMap();
  			if (moduleSourceMap != null && writer instanceof LineCountingStringWriter) {
  				sectionCount++;
  				LineCountingStringWriter lcWriter = (LineCountingStringWriter)writer;
  				try {
  					smGen.mergeMapSection(lcWriter.getLine(), lcWriter.getColumn(), moduleSourceMap.map);
  				} catch (SourceMapParseException e) {
  					throw new IOException(e);
  				}
  				// Save the sources content, indexed by the module name, so that we can
  				// add the 'sourcesContent' property to the layer map after the map
  				// has been generated.  We need to do this because SourceMapGeneratorV3
  				// does not merge the sourcesContent properties from module source maps into
  				// the merged layer source map.
  				sourcesMap.put(moduleSourceMap.name, moduleSourceMap.source);
  			}
  		}
  		// Add the reader contents to the result
  		try {
  			IOUtils.copy(reader, writer);
  		} finally {
  			IOUtils.closeQuietly(reader);
  		}
  		if (reader.isError()) {
  			errorMessages.add(reader.getErrorMessage());
  		}
  	}
docs: Adds the content from {@code reader}, together with any transport contributions,
  to the response aggregation.
  @param module
  The module id
  @param reader
  The module build reader
  @throws IOException