List<TextRange> () { List<TextRange> result = myValueTextRanges; if (result == null) { final int elementStart = getTextRange().getStartOffset(); final List<TextRange> ranges = ContainerUtil.map(getStringElements(), node -> { final int nodeRelativeOffset = node.getTextRange().getStartOffset() - elementStart; return node.getContentRange().shiftRight(nodeRelativeOffset); }); myValueTextRanges = result = ranges; } return result; }