如何在多页编辑器中加载的Java编辑器中启用“Mark Occurrences”?

时间:2010-07-22 14:31:45

标签: java eclipse plugins eclipse-plugin

我正在开发一个多页面编辑器,它可以在多页面编辑器的单独选项卡中加载打开多个文件(例如java,html)。使用与文件类型关联的默认编辑器打开文件,这些默认编辑器作为选项卡嵌入多页编辑器中。

以下是我如何确定要加载的编辑器(对于文件类型):

void createPage()  throws PartInitException 
{
    // get editor registry
    IEditorRegistry editorRegistry = Activator.getDefault().getWorkbench().getEditorRegistry();

    // loop through mappings until the extension matches.
    IEditorDescriptor editorDescriptor = editorRegistry.getDefaultEditor(((IFileEditorInput)getEditorInput()).getFile().getName());

    // if no editor was found that is associated to the file extension
    if (editorDescriptor == null) 
    {
    IEditorRegistry registry = Activator.getDefault().getWorkbench().getEditorRegistry();
    editorDescriptor = registry.findEditor(EditorsUI.DEFAULT_TEXT_EDITOR_ID); 
    }

    IConfigurationElement configuration = ((EditorDescriptor) editorDescriptor).getConfigurationElement();

    String className = configuration.getAttribute("class");


    IEditorPart editor;
    try 
    {
    editor = (IEditorPart) WorkbenchPlugin.createExtension(configuration, "class");

    } catch (CoreException e) {
        throw new RuntimeException(e);
    }

final int index = addPage(editor, getEditorInput());
setPageText(index, "TAB_NAME");
}

创建多标签编辑器没有任何问题,并且标签中加载了正确的编辑器。

但是,当加载到选项卡中时,“Mark Occurrences”功能在Java编辑器中不起作用。

我验证了标记出现是否已打开。当我在多页面编辑器选项卡中的java编辑器中选择一个变量时,它不会突出显示该变量的其他实例。 但是如果我同时在多选项卡编辑器和单独的java编辑器中打开文件并在单独的java编辑器中选择一个变量,它将突出显示单独的java编辑器中的其他实例以及嵌入的java编辑器在我的多页面编辑器中。 因此,功能似乎已启用并加载,在嵌入式编辑器中进行选择时,它不会执行标记出现功能。

需要更改什么才能在我的多标签编辑器中嵌入的java编辑器中使用标记出现功能?

我的理解是Mark Occurences是一个中心服务,因此我假设在我的编辑器中选择了某些内容时,我缺少更新此服务的部分。对于需要做什么以便服务更新的任何想法?

注意:仅当java编辑器嵌入多页编辑器时才会出现此问题。

1 个答案:

答案 0 :(得分:0)

此功能构建到org.eclipse.jdt.ui的org.eclipse.jdt.internal.ui.javaeditor.JavaEditor中 如你所见,这是一个内部课程。但是你可以忽略它并将其子类化。

org.eclipse.jdt.internal.ui.javaeditor.ToggleMarkOccurrencesAction适用于所有打开的JavaEditor(尝试使用标准的CompilationUnitEditor打开同一个类两次,你会看到两个“mark occurences”标记)。

这是因为在JavaPlugin的PreferenceStore中设置了一个中心属性PreferenceConstants.EDITOR_MARK_OCCURRENCES。

为了显示ToggleMarkOccurrencesAction按钮,您需要提供一个IEditorActionBarContributor(请查看org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditorActionContributor)