void (int newCaretOffset, int caretShift) { int newSelectionStart; int newSelectionEnd = newCaretOffset; if (caretShift < 0) { if (getMouseSelectionState() == MOUSE_SELECTION_STATE_WORD_SELECTED) { newSelectionEnd = myCaretModel.getWordAtCaretStart(mySettings.isCamelWords() && mySettings.isMouseClickSelectionHonorsCamelWords()); } else if (getMouseSelectionState() == MOUSE_SELECTION_STATE_LINE_SELECTED) { newSelectionEnd = visualPositionToOffset(new VisualPosition(getCaretModel().getVisualPosition().line, 0)); } newSelectionStart = validateOffset(mySavedSelectionEnd); } else { if (getMouseSelectionState() == MOUSE_SELECTION_STATE_WORD_SELECTED) { newSelectionEnd = myCaretModel.getWordAtCaretEnd(mySettings.isCamelWords() && mySettings.isMouseClickSelectionHonorsCamelWords()); } else if (getMouseSelectionState() == MOUSE_SELECTION_STATE_LINE_SELECTED) { newSelectionEnd = visualPositionToOffset(new VisualPosition(getCaretModel().getVisualPosition().line + 1, 0)); } newSelectionStart = validateOffset(mySavedSelectionStart); } if (newSelectionEnd < 0) newSelectionEnd = newCaretOffset; mySelectionModel.setSelection(newSelectionStart, newSelectionEnd); myCaretModel.moveToOffset(newSelectionEnd); }