docs: @JsonCreator
      public static HostAddress fromString(String hostPortString)
      {
          requireNonNull(hostPortString, "hostPortString is null");
          String host;
          String portString = null;
  
          if (hostPortString.startsWith("[")) {
              // Parse a bracketed host, typically an IPv6 literal.
              Matcher matcher = BRACKET_PATTERN.matcher(hostPortString);
              if (!matcher.matches()) {
                  throw new IllegalArgumentException("Invalid bracketed host/port: " + hostPortString);
              }
              host = matcher.group(1);
              portString = matcher.group(2);  // could be null
          }
          else {
              int colonPos = hostPortString.indexOf(':');
              if (colonPos >= 0 && hostPortString.indexOf(':', colonPos + 1) == -1) {
                  // Exactly 1 colon.  Split into host:port.
                  host = hostPortString.substring(0, colonPos);
                  portString = hostPortString.substring(colonPos + 1);
              }
              else {
                  // 0 or 2+ colons.  Bare hostname or IPv6 literal.
                  host = hostPortString;
              }
          }
  
          int port = NO_PORT;
          if (portString != null && portString.length() != 0) {
              // Try to parse the whole port string as a number.
              // JDK7 accepts leading plus signs. We don't want to.
              if (portString.startsWith("+")) {
                  throw new IllegalArgumentException("Unparseable port number: " + hostPortString);
              }
              try {
                  port = Integer.parseInt(portString);
              }
              catch (NumberFormatException e) {
                  throw new IllegalArgumentException("Unparseable port number: " + hostPortString);
              }
              if (!isValidPort(port)) {
                  throw new IllegalArgumentException("Port number out of range: " + hostPortString);
              }
          }
  
          return new HostAddress(host, port);
      }