@Override
  @NotNull
  public List<Pair<TextRange, String>> getDecodedFragments() {
    final int elementStart = getTextRange().getStartOffset();
    List<Pair<TextRange, String>> result = myDecodedFragments;
    if (result == null) {
      final List<Pair<TextRange, String>> combined = StreamEx.of(getStringElements())
        .flatMap(node -> StreamEx.of(node.getDecodedFragments())
          .map(pair -> {
            final int nodeRelativeOffset = node.getTextRange().getStartOffset() - elementStart;
            return Pair.create(pair.getFirst().shiftRight(nodeRelativeOffset), pair.getSecond());
          }))
        .toList();
      myDecodedFragments = result = combined;
    }
    return result;
  }
@Override
  @NotNull
  public List<Pair<TextRange, String>> getDecodedFragments()