code: public static HostSpecifier fromValid(String specifier) {
      // Verify that no port was specified, and strip optional brackets from
      // IPv6 literals.
      final HostAndPort parsedHost = HostAndPort.fromString(specifier);
      Preconditions.checkArgument(!parsedHost.hasPort());
      final String host = parsedHost.getHost();
  
      // Try to interpret the specifier as an IP address. Note we build
      // the address rather than using the .is* methods because we want to
      // use InetAddresses.toUriString to convert the result to a string in
      // canonical form.
      InetAddress addr = null;
      try {
        addr = InetAddresses.forString(host);
      } catch (IllegalArgumentException e) {
        // It is not an IPv4 or IPv6 literal
      }
  
      if (addr != null) {
        return new HostSpecifier(InetAddresses.toUriString(addr));
      }
  
      // It is not any kind of IP address; must be a domain name or invalid.
  
      // TODO(user): different versions of this for different factories?
      final InternetDomainName domain = InternetDomainName.from(host);
  
      if (domain.hasPublicSuffix()) {
        return new HostSpecifier(domain.toString());
      }
  
      throw new IllegalArgumentException(
          "Domain name does not have a recognized public suffix: " + host);
    }
docs: Returns a {@code HostSpecifier} built from the provided {@code specifier}, which is already
  known to be valid. If the {@code specifier} might be invalid, use {@link #from(String)}
  instead.
  
  <p>The specifier must be in one of these formats:
  
  <ul>
  <li>A domain name, like {@code google.com}
  <li>A IPv4 address string, like {@code 127.0.0.1}
  <li>An IPv6 address string with or without brackets, like {@code [2001:db8::1]} or {@code
  2001:db8::1}
  </ul>
  
  @throws IllegalArgumentException if the specifier is not valid.