对于我的插件,我正在尝试访问 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”)
不幸的是,我不知道我应该寻找什么。
最佳答案
你应该这样做:
((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/