我目前正在编写一个Eclipse插件。在其中,我想以编程方式打开一个编辑器并选择一部分文本。打开的文件不必导入工作区(这就是我在下面的代码中使用IFileStore的原因。)
我正在使用类似的代码:
IFileStore fileStore = EFS.getLocalFileSystem().getStore(localPath);
IEditorPart part = IDE.openEditorOnFileStore(page, fileStore);
final int posStart = ...;
final int posEnd = ...;
part.getEditorSite().getSelectionProvider().setSelection(
new TextSelection(posStart, posEnd - posStart));
对于Java文件,它工作正常,但对于XML Schema(XSD),它没有。编辑器打开,但未选择任何文本。
从调试开始,我可以看出该部分的类型是org.eclipse.wst.xsd.ui.internal.editor.InternalXSDMultiPageEditor,选择管理器是org.eclipse.wst.xsd.ui.internal.adt .editor.CommonSelectionManager
我的目标是Eclipse Mars和Neon,它似乎不适用于两者。
我能做些什么才能让它发挥作用?或至少找到一些进一步的信息?
答案 0 :(得分:0)
在查看WTP代码之后,目前似乎不支持此功能。但是我通过明确检查编辑器是否是多部件编辑器找到了一种解决方法:
private static void setSelection(IEditorPart part, TextSelection textSelection) {
if (part instanceof MultiPageEditorPart) {
final MultiPageEditorPart multiPage = (MultiPageEditorPart) part;
for (final IEditorPart subPart : multiPage.findEditors(multiPage.getEditorInput())) {
setSelection(subPart, textSelection);
}
} else {
part.getEditorSite().getSelectionProvider().setSelection(textSelection);
}
}
我不确定将选择发送到所有子部分或仅发送到一个特定部分是否更好,但到目前为止发送给所有部分似乎都有效。