TextRange (@NotNull TextRange range) { if (equals(range)) { return this; } int newStart = Math.max(myStartOffset, range.getStartOffset()); int newEnd = Math.min(myEndOffset, range.getEndOffset()); return isProperRange(newStart, newEnd) ? new TextRange(newStart, newEnd) : null; }