void (@NotNull Editor editor, @NotNull CaretStopPolicy caretStopPolicy, boolean isWithSelection, boolean isCamel) { Document document = editor.getDocument(); SelectionModel selectionModel = editor.getSelectionModel(); int selectionStart = selectionModel.getLeadSelectionOffset(); CaretModel caretModel = editor.getCaretModel(); LogicalPosition blockSelectionStart = caretModel.getLogicalPosition(); int offset = caretModel.getOffset(); if (offset == document.getTextLength()) { return; } int newOffset; FoldRegion currentFoldRegion = editor.getFoldingModel().getCollapsedRegionAtOffset(offset); if (currentFoldRegion != null) { newOffset = currentFoldRegion.getEndOffset(); } else { newOffset = getNextCaretStopOffset(editor, caretStopPolicy, isCamel); if (newOffset == offset) return; FoldRegion foldRegion = editor.getFoldingModel().getCollapsedRegionAtOffset(newOffset); if (foldRegion != null) { newOffset = foldRegion.getStartOffset(); } } if (editor instanceof EditorImpl) { int boundaryOffset = ((EditorImpl)editor).findNearestDirectionBoundary(offset, true); if (boundaryOffset >= 0) { newOffset = Math.min(boundaryOffset, newOffset); } } caretModel.moveToOffset(newOffset); EditorModificationUtilEx.scrollToCaret(editor); setupSelection(editor, isWithSelection, selectionStart, blockSelectionStart); }