ProperTextRange (@NotNull TextRange range) { assertProperRange(range); int newStart = Math.max(getStartOffset(), range.getStartOffset()); int newEnd = Math.min(getEndOffset(), range.getEndOffset()); return isProperRange(newStart, newEnd) ? new ProperTextRange(newStart, newEnd) : null; }