Eclipse Plugin для детального мониторинга изменений в редакторе

Итак, я ищу разработку плагина для Eclipse 4.2, который отслеживает изменения, которые пользователь вносит в свои файлы.

Это мой первый плагин Eclipse, и чтобы подготовиться, я прошелся по шпаргалке по разработке плагинов Eclipse (HelloWorld) и провел много часов на help.eclipse.org, просматривая документацию и API. Я думаю, что у меня есть представление о том, какие инструменты мне нужны, но я не уверен, как собрать эти инструменты вместе, чтобы делать то, что я хочу.

Desired Results: Иметь плагин, который будет информироваться о каждом новом письме, добавленном в (Java) -редактор, и обо всех удаляемых. Это включает в себя то, что делает Eclipse (автозаполнение переменных, фигурные скобки), а также то, что вводит пользователь.

Tools that might helpЯ думаю, чтоIResourceChangeListener поможет, так как это дает мнеIResourceChangeEventс доступнымIResourceDelta который представляет изменения рабочего пространства. Кроме того, поскольку редакторы расширяют EditorPart, я думаю, что добавлениеIPropertyChangeListener для соответствующего редактора также может быть полезным.

Я думаю, что у меня есть нужные инструменты, но я понятия не имею, как собрать их так, как я хочу.

Questions:
Являются ли перечисленные выше инструменты подходящими для работы?
Как я могу получить список всех открытых редакторов или которые будут открыты и добавить слушателей к ним?
Какие-нибудь дополнительные советы по изучению того, как программировать плагины Eclipse?

Ответы на вопрос(2)

И да и нет.IResourceChangedListener сработает после изменения ресурса (файла). В большинстве редакторов это соответствует сохранению файла пользователем.

Для мониторинга ввода в режиме реального времени одним из подходов является использованиеMonoReconciler чтобы отследить изменения в буфере после того, как пользователь простаивает, скажем, 0,5 секунды. Вот как работает JDT.

Теперь это все легко, если вы являетесь создателемEditorPart, В зависимости от того, какой редактор вы хотите контролировать, вам нужно получить егоIDocument и добавьте слушателей по мере необходимости. Увидетьдокументация, Для чего стоит, IIRC используют редакторы JavaProjectionDocuments.

 15 июл. 2012 г., 09:03
Если ваша цель - добавить функциональность в редактор Java, я рекомендую вам изучить расширение самого JDT. Тем не менее, добавление слушателя просто требует, чтобы вы получили ссылку наIDocument.
 KevinL15 июл. 2012 г., 01:50
Что бы вы посоветовали мне продлить? Какое расширение (я) я должен использовать?
Решение Вопроса

Совет Krumelur дал мне хорошую отправную точку.DocumentEventс возвращеноIDocumentListener достаточно гранулированы, чтобы дать мне посимвольный анализ произошедшего.

IEditorPart editor = ...;  
IEditorInput input = editor.getEditorInput();  
IDocument document=(((ITextEditor)editor).getDocumentProvider()).getDocument();

document.addDocumentListener(new IDocumentListener() {

        @Override
        public void documentChanged(DocumentEvent event) 
        {
            System.out.println("Change happened: " + event.toString());
        }

        @Override
        public void documentAboutToBeChanged(DocumentEvent event) {
            System.out.println("I predict that the following change will occur: "+event.toString());


        }
    };
});

Насколько я должен продлить, я продлилorg.eclipse.ui.startup и добавил серию слушателей, пока я не дошел до кода, который выглядит так, как я получил выше.

Надеюсь, это поможет любому, кто ищет то, кем я был.

 KevinL13 окт. 2012 г., 15:35
Если вы хотите получить настройку, в которой каждый новый редактор подключает к нему ваш слушатель, получите IWorkBench сIWorkbench wb = PlatformUI.getWorkbench(); тогда вы можете позвонитьwb.addWindowListener(...)который получает ActivePage сworkbenchWindow.getActivePage() а затем вы можете добавить слушателя в activePage сactivePage.addPartListener(...) и эта модель продолжается, пока все не слушает все.
 01 окт. 2012 г., 15:04
Не берите в голову, немного подумав, что я решил это - в Activator.start () я использую workbenchWindow.getActivePage (), которая возвращает IWorkbenchPage, затем workbenchPage.getActiveEditor () для возврата IEditorPart. Это то, что мне было нужно.
 10 нояб. 2014 г., 15:39
@KevinL: я новичок в разработке плагинов. Я написал пример плагина, который будет запускаться (выполнять метод внутри обработчика), когда я нажимаю на пункт меню. Я хочу, чтобы этот код выполнялся, когда некоторые даже появляются в редакторе. скажем, когда я нажимаю какую-то клавишу. Как мне этого добиться?
 KevinL10 нояб. 2014 г., 22:24
@ User42, только с 4 предложениями, которые вы дали, я не могу вам помочь. Пожалуйста, задайте отдельный, более подробный вопрос на этом сайте, и я (и остальная часть сообщества) постараюсь помочь вам. Не стесняйтесь связать этот вопрос в комментарии.
 01 окт. 2012 г., 11:21
Я использую аналогичный подход с моим плагином, однако, когда я запускаю eclipse, IDocumentListener в моем плагине не привязывается к первому открывшемуся редактору. Я реализую IPartListener2, чтобы изменить свой IDocumentListener из документа в документ при изменении окна редактора. У вас есть решение для этого?

Ваш ответ на вопрос