boolean (@NotNull CaretImpl firstCaret, @NotNull CaretImpl secondCaret) { if (firstCaret.getVisualPosition().equals(secondCaret.getVisualPosition())) { return true; } int firstStart = firstCaret.getSelectionStart(); int secondStart = secondCaret.getSelectionStart(); int firstEnd = firstCaret.getSelectionEnd(); int secondEnd = secondCaret.getSelectionEnd(); return firstStart < secondStart && firstEnd > secondStart || firstStart > secondStart && firstStart < secondEnd || firstStart == secondStart && secondEnd != secondStart && firstEnd > firstStart || (hasPureVirtualSelection(firstCaret) || hasPureVirtualSelection(secondCaret)) && (firstStart == secondStart || firstEnd == secondEnd); }