code: def populate_link(self, finder, upgrade, require_hashes):
          # type: (PackageFinder, bool, bool) -> None
          
          if self.link is None:
              self.link = finder.find_requirement(self, upgrade)
          if self._wheel_cache is not None and not require_hashes:
              old_link = self.link
              self.link = self._wheel_cache.get(self.link, self.name)
              if old_link != self.link:
                  logger.debug('Using cached wheel link: %s', self.link)
docs: Ensure that if a link can be found for this, that it is found.
  
          Note that self.link may still be None - if Upgrade is False and the
          requirement is already installed.
  
          If require_hashes is True, don't use the wheel cache, because cached
          wheels, always built locally, have different hashes than the files
          downloaded from the index server and thus throw false hash mismatches.
          Furthermore, cached wheels at present have undeterministic contents due
          to file modification times.