code: def _create_intermediate_target(self, address, suffix):
      
      if not isinstance(address, string_types):
        raise self.ExpectedAddressError("Expected string address argument, got type {type}"
                                        .format(type=type(address)))
  
      address = Address.parse(address, self._parse_context.rel_path)
      # NB(gmalmquist): Ideally there should be a way to indicate that these targets are synthetic
      # and shouldn't show up in `./pants list` etc, because we really don't want people to write
      # handwritten dependencies on them. For now just give them names containing "-unstable-" as a
      # hint.
      hash_str = hash_target(str(address), suffix)
      name = '{name}-unstable-{suffix}-{index}'.format(
        name=address.target_name,
        suffix=suffix.replace(' ', '.'),
        index=hash_str,
      )
  
      self._parse_context.create_object_if_not_exists(
        'target',
        name=name,
        dependencies=[address.spec],
        **self.extra_target_arguments
      )
  
      return ':{}'.format(name)
docs: :param string address: A target address.
      :param string suffix: A string used as a suffix of the intermediate target name.
      :returns: The address of a synthetic intermediary target.