docs: static ImmutableList<NameValuePair> buildParameters(
        String analyticsId,
        String clientId,
        String virtualPageName,
        String virtualPageTitle,
        String eventType,
        String eventName,
        boolean isUserSignedIn,
        boolean isUserInternal,
        Optional<Boolean> isUserTrialEligible,
        Optional<String> projectNumberHash,
        Optional<String> billingIdHash,
        Optional<String> clientHostname,
        Random random) {
      checkNotNull(analyticsId);
      checkNotNull(clientId);
      checkNotNull(virtualPageTitle);
      checkNotNull(virtualPageName);
      checkNotNull(eventType);
      checkNotNull(eventName);
      checkNotNull(projectNumberHash);
      checkNotNull(billingIdHash);
      checkNotNull(clientHostname);
      checkNotNull(random);
  
      ImmutableList.Builder<NameValuePair> listBuilder = new ImmutableList.Builder<>();
  
      // Analytics information
      // Protocol version
      listBuilder.add(new BasicNameValuePair(PARAM_PROTOCOL, "1"));
      // Analytics ID to send report to
      listBuilder.add(new BasicNameValuePair(PARAM_PROPERTY_ID, analyticsId));
      // Always report as a pageview
      listBuilder.add(new BasicNameValuePair(PARAM_TYPE, VALUE_TYPE_PAGEVIEW));
      // Always report as interactive
      listBuilder.add(new BasicNameValuePair(PARAM_IS_NON_INTERACTIVE, VALUE_FALSE));
      // Add a randomly generated cache buster
      listBuilder.add(new BasicNameValuePair(PARAM_CACHEBUSTER, Long.toString(random.nextLong())));
  
      // Event information
      listBuilder.add(new BasicNameValuePair(PARAM_EVENT_TYPE, eventType));
      listBuilder.add(new BasicNameValuePair(PARAM_EVENT_NAME, eventName));
      if (clientHostname.isPresent() && !clientHostname.get().isEmpty()) {
        listBuilder.add(new BasicNameValuePair(PARAM_HOSTNAME, clientHostname.get()));
      }
  
      // User information
      listBuilder.add(new BasicNameValuePair(PARAM_CLIENT_ID, clientId));
      if (projectNumberHash.isPresent() && !projectNumberHash.get().isEmpty()) {
        listBuilder.add(new BasicNameValuePair(PARAM_PROJECT_NUM_HASH, projectNumberHash.get()));
      }
      if (billingIdHash.isPresent() && !billingIdHash.get().isEmpty()) {
        listBuilder.add(new BasicNameValuePair(PARAM_BILLING_ID_HASH, billingIdHash.get()));
      }
      listBuilder.add(new BasicNameValuePair(PARAM_USER_SIGNED_IN, toValue(isUserSignedIn)));
      listBuilder.add(new BasicNameValuePair(PARAM_USER_INTERNAL, toValue(isUserInternal)));
      if (isUserTrialEligible.isPresent()) {
        listBuilder.add(new BasicNameValuePair(PARAM_USER_TRIAL_ELIGIBLE,
            toValue(isUserTrialEligible.get())));
      }
  
      // Virtual page information
      listBuilder.add(new BasicNameValuePair(PARAM_IS_VIRTUAL, VALUE_TRUE));
      listBuilder.add(new BasicNameValuePair(PARAM_PAGE, virtualPageName));
      if (!virtualPageTitle.isEmpty()) {
        listBuilder.add(new BasicNameValuePair(PARAM_PAGE_TITLE, virtualPageTitle));
      }
  
      return listBuilder.build();
    }