java - 如何在 Eclipse 中获取选定的代码?

标签 java eclipse eclipse-plugin

对于我的插件,我正在尝试访问 CompilationUnitEditor 中的选定代码。因此,我向上下文菜单添加了一个贡献并使用了以下代码:

public class ContextMenuHandler implements IEditorActionDelegate {

    private IEditorPart editorPart;

    @Override
    public void setActiveEditor(IAction action, IEditorPart editorPart) {
        this.editorPart = editorPart;
    }

    @Override
    public void run(IAction action) {
        JavaUI.getEditorInputJavaElement(editorPart.getEditorInput());
    }

    @Override
    public void selectionChanged(IAction action, ISelection selection) {
        if (selection instanceof TextSelection) {
            TextSelection text = (TextSelection) selection;
            System.out.println("Text: " + text.getText());
        } else {
            System.out.println(selection);
        }
    }

}

现在的问题是方法 selectionChanged(...) 仅在我真正选择某些东西时才被调用,以便我可以复制/粘贴它。但是我想访问像这样突出显示的代码元素(在这里我想获得“IEditorPart”)

enter image description here

不幸的是,我不知道我应该寻找什么。

最佳答案

你应该这样做:

        ((CompilationUnitEditor) editorPart).getViewer().getSelectedRange();

ISourceViewer 类有很多关于源位置和编辑器的有用且有趣的方法。您可能还想查看 JavaSourceViewer


编辑

看来我没有完全回答你的问题。问题是 selectionChanged 事件仅在选择的长度 > 0 时被调用。我不知道为什么会这样,但这就是 Action 委托(delegate)一直工作的方式。

如果您想在插入符更改时收到通知,您应该向编辑器的查看器注册一个选择更改监听器。做这样的事情:

((CompilationUnitEditor) editorPart).getViewer()
  .addSelectionChangedListener(mySelectionListener);

mySelectionListener 属于 org.eclipse.jface.viewers.ISelectionChangedListener 类型。以这种方式注册,应该会给你所有你正​​在寻找的事件。请注意在编辑器关闭时取消注册。

关于java - 如何在 Eclipse 中获取选定的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10453617/

相关文章:

php - Eclipse插件背景颜色变化

java - 从不同的 Eclipse 插件项目调用类

java - Java 数组从小到大排序的方法

java - 如何在 Android 中验证 IAP?

java - 选择 Eclipse 上 Ubuntu 中的 JTextField 上看不到的文件路径

java - RCP通讯

java - 响应中的 JAX/Jersey 自定义错误代码

java - 如何在 Java 8 流中将参数化的 getter 调用为映射器?

java - 如何解决 org.codehaus.cargo.container.ContainerException

android - 如何使用 AndroidManifest Merger