code: @Override
  	public Downloader build() {
  		Downloader underlying = null;
  		CacheProvider<URI, byte[]> cache = null;
  
  		try {
  			underlying = Objects.requireNonNull(this.underlying.build(), "Underlying downloader builder returns null");
  			cache = buildCacheProvider();
  			LOGGER.fine("Using cache provider: " + cache);
  			return new CachedDownloader(underlying, cache);
  
  		} catch (Throwable e) {
  			if (underlying != null) {
  				try {
  					underlying.shutdown();
  				} catch (Throwable e1) {
  					e.addSuppressed(e1);
  				}
  			}
  			if (cache != null) {
  				try {
  					cache.close();
  				} catch (Throwable e1) {
  					e.addSuppressed(e1);
  				}
  			}
  			throw e;
  		}
  	}
docs: ===