void execute(BrowseMode browseMode) { myBrowseMode = browseMode; Document document = myEditor.getDocument(); final PsiFile file = PsiDocumentManager.getInstance(myProject).getPsiFile(document); if (file == null) return; PsiDocumentManager.getInstance(myProject).commitAllDocuments(); if (EditorUtil.inVirtualSpace(myEditor, myPosition)) { return; } final int offset = myEditor.logicalPositionToOffset(myPosition); int selStart = myEditor.getSelectionModel().getSelectionStart(); int selEnd = myEditor.getSelectionModel().getSelectionEnd(); if (offset >= selStart && offset < selEnd) return; ProgressIndicatorUtils.scheduleWithWriteActionPriority( myProgress, new ReadTask() { @Override public void computeInReadAction(@NotNull ProgressIndicator indicator) { doExecute(file, offset); } @Override public void onCanceled(@NotNull ProgressIndicator indicator) {} }); }
/** * @return 1-based column index where tabs are treated as single characters. External tools don't * know about IDEA's tab size. */ protected static String getColumnNumber(Editor editor, LogicalPosition pos) { if (EditorUtil.inVirtualSpace(editor, pos)) { return String.valueOf(pos.column + 1); } int offset = editor.logicalPositionToOffset(pos); int lineStart = editor.getDocument().getLineStartOffset(editor.getDocument().getLineNumber(offset)); return String.valueOf(offset - lineStart + 1); }