docs: public static void appendCall(StringBuilder sb, String begin, String separator,
        String end, List<? extends CharSequence> args) {
      int size = begin.length();
      // Typically just-in-time compiler would eliminate Iterator in case foreach is used,
      // however the code below uses indexed iteration to keep the conde independent from
      // various JIT implementations (== avoid Iterator allocations even for not-so-smart JITs)
      // see https://bugs.openjdk.java.net/browse/JDK-8166840
      // see http://2016.jpoint.ru/talks/cheremin/ (video and slides)
      int numberOfArguments = args.size();
      for (int i = 0; i < numberOfArguments; i++) {
        size += args.get(i).length();
      }
      size += separator.length() * (numberOfArguments - 1);
      sb.ensureCapacity(sb.length() + size + 1);
      sb.append(begin);
      for (int i = 0; i < numberOfArguments; i++) {
        if (i > 0) {
          sb.append(separator);
        }
        sb.append(args.get(i));
      }
      sb.append(end);
    }