public @NotNull String getTextValue(@Nullable TextRange rangeInHost) {
    final String text = myHost.getText();
    final List<TextRange> contentRanges = getContentRanges();

    final StringBuilder builder = new StringBuilder();

    for (int i = 0; i < contentRanges.size(); i++) {
      final TextRange range = rangeInHost != null ? rangeInHost.intersection(contentRanges.get(i)) : contentRanges.get(i);
      if (range == null) continue;

      final CharSequence curString = range.subSequence(text);
      builder.append(curString);

      if (range.getEndOffset() == contentRanges.get(i).getEndOffset() && i + 1 != contentRanges.size()) {
        builder.append(getRangesJoiner(text, contentRanges, i));
      }
    }
    return processReplacements(builder, myHost.getDecodeReplacements(builder));
  }
public @NotNull String getTextValue(@Nullable TextRange rangeInHost)