code: @Override
      @Deprecated
      protected void handleTransliterate(Replaceable text,
                                         Position index, boolean incremental) {
          /* We keep start and limit fixed the entire time,
           * relative to the text -- limit may move numerically if text is
           * inserted or removed.  The cursor moves from start to limit, with
           * replacements happening under it.
           *
           * Example: rules 1. ab>x|y
           *                2. yc>z
           *
           * |eabcd   start - no match, advance cursor
           * e|abcd   match rule 1 - change text & adjust cursor
           * ex|ycd   match rule 2 - change text & adjust cursor
           * exz|d    no match, advance cursor
           * exzd|    done
           */
  
          /* A rule like
           *   a>b|a
           * creates an infinite loop. To prevent that, we put an arbitrary
           * limit on the number of iterations that we take, one that is
           * high enough that any reasonable rules are ok, but low enough to
           * prevent a server from hanging.  The limit is 16 times the
           * number of characters n, unless n is so large that 16n exceeds a
           * uint32_t.
           */
          synchronized(data)  {
              int loopCount = 0;
              int loopLimit = (index.limit - index.start) << 4;
              if (loopLimit < 0) {
                  loopLimit = 0x7FFFFFFF;
              }
  
              while (index.start < index.limit &&
                      loopCount <= loopLimit &&
                      data.ruleSet.transliterate(text, index, incremental)) {
                  ++loopCount;
              }
          }
      }
docs: Implements {@link Transliterator#handleTransliterate}.
  @deprecated This API is ICU internal only.
  @hide draft / provisional / internal are hidden on Android