Как включить «Пометить вхождения» в редакторе Java, который загружен в многостраничный редактор? - PullRequest
3 голосов
/ 22 июля 2010

Я работаю над многостраничным редактором, который загружает, открывает несколько файлов (например, 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");
}

Редактор с несколькими вкладками создается без проблем, и на вкладках загружаются правильные редакторы.

Но функция «Отметить вхождения» не работает в редакторе Java при загрузке на вкладке.

Я подтвердил, что отметка вхождений включена. Когда я выбираю переменную в редакторе Java на моей вкладке многостраничного редактора, она не выделяет другие вхождения переменной. Но если я одновременно открою файл в своем редакторе с несколькими вкладками и в отдельном редакторе java и выберу переменную в отдельном редакторе java, он выделит другие вхождения в отдельном редакторе java, а также встроенный редактор java в моем многостраничном редакторе. Таким образом, кажется, что функциональность включена и загружена, она просто не выполняет функцию появления меток, когда выбор происходит во встроенном редакторе.

Что необходимо изменить, чтобы я мог использовать функцию появления меток из редактора Java, встроенного в мой редактор с несколькими вкладками?

Насколько я понимаю, Mark Occurences является центральной службой, поэтому я предполагаю, что мне не хватает той части, которая обновляет эту службу, когда что-то выбирается в моем редакторе. Есть идеи, что нужно сделать, чтобы сервис обновлялся?

Примечание. Эта проблема возникает, только если редактор java встроен в многостраничный редактор.

1 Ответ

0 голосов
/ 23 июля 2010

Эта функциональность встроена в org.eclipse.jdt.internal.ui.javaeditor.JavaEditor org.eclipse.jdt.ui Как видите, это внутренний класс. Однако вы можете проигнорировать это и сделать его подклассом.

Org.eclipse.jdt.internal.ui.javaeditor.ToggleMarkOccurferencesAction будет работать для всех открытых JavaEditorов (попробуйте дважды открыть один и тот же класс с помощью стандартного CompilationUnitEditor, и вы увидите две отметки «mark происходят»). потому что центральное свойство PreferenceConstants.EDITOR_MARK_OCCURRENCES установлено в PreferenceStore JavaPlugin.

Чтобы отобразить кнопку ToggleMarkOccurferencesAction, вам необходимо предоставить IEditorActionBarContributor (взгляните на org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditorActionContributor)

...