У меня есть обработчик плагина Eclipse (разработанный на Indigo), который я хочу запускать каждый раз, когда файл Java в текстовом редакторе сохраняется (или открывается, в идеале). Насколько я могу судить, существует два способа достижения этого:Реализация обработчиков в плагине Eclipse
- Программно с помощью API
CommandService
. - Использование конфигурации в
plugin.xml
Я попробовал оба из них. Метод 1, как это:
public class Activator extends AbstractUIPlugin {
@Override
public void start(final BundleContext context) throws Exception {
super.start(context);
ICommandService commandService = (ICommandService) PlatformUI
.getWorkbench().getService(ICommandService.class);
commandService.addExecutionListener(new MyListener());
plugin = this;
}
...
}
public class MyListener implements IExecutionListener {
@Override
public void postExecuteSuccess(final String commandId, final Object returnValue) {
System.out.println("PostEventSuccess:" + commandId);
}
@Override
public void preExecute(final String commandId, final ExecutionEvent event) {}
@Override
public void notHandled(String commandId, NotHandledException exception) {}
@Override
public void postExecuteFailure(String commandId, ExecutionException exception) {}
}
и 2. Метод, как это:
<extension point="org.eclipse.ui.handlers">
<handler
commandId="org.eclipse.ui.file.save"
class="mypackage.MyHandler">
<activeWhen>
<with variable="activeWorkbenchWindow">
<instanceof value="org.eclipse.ui.IWorkbenchWindow"/>
</with>
</activeWhen>
</handler>
</extension>
Метод 1. не работает мой слушатель вообще. Способ 2. работает, поскольку обработчик выполняется, но мой обработчик, похоже, заменяет обработчик по умолчанию. Когда пользователь пытается сохранить файл, мой обработчик работает, но файл не сохраняется. Сам обработчик кажется прекрасным (я протестировал его, создав элемент меню, который его запускает).
Является ли метод 1. устаревшим сейчас или я неправильно выполнил эту услугу? Как получить метод 2. для сохранения файла? Можно ли запустить обработчик по умолчанию из моего обработчика?
Эти два не отличаются только тем, что один программный и другой декларативный. Я думаю, что определение обработчика команд неверно, поскольку это * обрабатывает * выполнение команды, а не только уведомление о том, что команда была выполнена. Может быть, я выкопаю что-то по первому методу, который, кажется, выглядит из-за его внешнего вида. –
Вы уверены, что ваш плагин был активирован, другими словами, действительно ли этот код запускался? –
Хороший вопрос. Когда я помещаю некоторые инструкции 'println' в Activator и Listener, кажется, что этот код не запускается. Однако конфигурация указывает на правый класс «Activator». Очень странно. – snim2