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

8
我正在开发一个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。巧合的是,这也是我在发布的链接中下一个问题,但没有得到答案 :(


当你说“选定的文本”时,你是指实际上被高亮的内容,还是仅仅光标所在位置的当前关键字? - StockB
2个回答

7

您可以像此主题中所示那样,请求ActiveEditor

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提到了这篇博客文章“程序化查询当前文本选择”,与这个SO答案类似(在博客文章之前写的)“通过插件命令从eclipse编辑器替换所选代码”


另请参见具有类似问题的 SO 问题 https://dev59.com/1krSa4cB1Zd3GeqPUTE3。 - VonC
谢谢 :) 在我提交问题后,我决定在Google上搜索我之前发布的方法,只是看看是否有任何匹配项。其中一项是http://usayadis.wordpress.com/2009/10/20/programmatically-query-current-text-selection/,它恰好做了我想要的事情。谢谢和问候, Krt_Malta - Krt_Malta

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());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接