从Eclipse Java编辑器中获取所选文本

时间:2010-03-07 10:31:11

标签: eclipse eclipse-plugin editor

我正在开发一个Eclipse插件,在按下按钮时,插件会在Java编辑器中获取所选文本并放入一个出现的文本框。

我的代码看起来像这样:我从这里得到它:http://dev.eclipse.org/newslists/news.eclipse.newcomer/msg02200.html

private ITextSelection getSelection(ITextEditor editor) {
     ISelection selection = editor.getSelectionProvider()
            .getSelection();
     return (ITextSelection) selection;
}

private String getSelectedText(ITextEditor editor) {
     return getSelection(editor).getText();
}

问题是如何显示Java编辑器的ITextEditor。巧合的是,这是我发布的链接中的下一个问题,但没有答案:(

2 个答案:

答案 0 :(得分:7)

你可以要求ActiveEditor,如this thread

IEditorPart part;

part =
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().get
ActiveEditor();

if(part instanceof ITextEditor){
    ITextEditor editor = (ITextEditor)part;
    IDocumentProvider provider = editor.getDocumentProvider();
    IDocument document = provider.getDocument(editor.getEditorInput());

OP Krt_Malta提及此blog entry "Programmatically query current text selection",这与其他SO回答类似(在博客条目之前写成"Replace selected code from eclipse editor through plugin command"

答案 1 :(得分:1)

我想在VonCs的答案中添加一件事。他描述的用于获取选择的技术对于所有类型的文本编辑器都是有用的,而不仅仅是Java编辑器。但是他的解决方案在工作区部分为MultiPageEditorPart的情况下不起作用,因为它不是ITextEditor

但在许多情况下(例如使用标准XML编辑器),MultiPageEditorPart的页面为ITextEditor。在这些情况下,您可以从MultiPageEditorPart获取活动页面并从中获取选择。

可以使用以下代码完成此操作:

ITextEditor editor = null;

if (part instanceof ITextEditor) {
    editor = (ITextEditor) part;
} else if (part instanceof MultiPageEditorPart) {
    Object page = ((MultiPageEditorPart) part).getSelectedPage();
    if (page instanceof ITextEditor) editor = (ITextEditor) page;
}

if (editor != null) {
    IDocumentProvider provider = editor.getDocumentProvider();
    IDocument document = provider.getDocument(editor.getEditorInput());
}