Прикрепить мое действие к F5 / Обновить - PullRequest
3 голосов
/ 03 марта 2011

Я пишу плагин для Eclipse, и я хотел бы присоединить одно из моих действий к событию Eclipse F5 / Refresh.

Может кто-нибудь мне помочь?Спасибо!

Ответы [ 3 ]

4 голосов
/ 03 марта 2011

Вы можете прикрепить IExecutionListener к ICommandService. Вы получите уведомление обо всех выполненных командах. Вы можете найти нужный идентификатор команды (в данном случае org.eclipse.ui.file.refresh) и выполнить свою операцию

1 голос
/ 03 марта 2011

Я предполагаю, что вы пишете это для Eclipse Helios (3.6).

В справке Eclipse, в Руководстве разработчика плагина платформы -> Руководство программиста -> Расширенные концепции ресурсов -> Обновление поставщиков, есть точка расширения.

org.eclipse.core.resources.refreshProviders

Ваш класс должен расширить RefreshProvider, чтобы использовать это расширение.

0 голосов
/ 06 января 2015

По словам Пракаша Г.Р., я показываю пример кода. Поскольку код инициализации в Activator не работает, если нам нужно использовать Workbench, поэтому я использую точку расширения при запуске. Plugin.xml - это

<extension
     point="org.eclipse.ui.startup">
  <startup
        class="sampleplugin.MyStartUp">
  </startup>
</extension>

Поэтому в классе MyStartUp мы добавляем ExecutionListener в ICommandService. Важно то, что ExecutionEvent в методе preExecute не может извлечь выбор. Это отличается от обычного ExecutionEvent в Command. Таким образом, MyStartUp.java

public class MyStartUp implements IStartup {

    @Override
    public void earlyStartup() {
        ICommandService service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService    .class);
        service.addExecutionListener(
                new IExecutionListener() {

                    ...

                    @Override
                    public void postExecuteSuccess(String commandId,
                            Object returnValue) {

                      // do something post

                    }

                    @Override
                    public void preExecute(String commandId,
                            final ExecutionEvent event) {
                            if (org.eclipse.ui.IWorkbenchCommandConstants.FILE_REFRESH.equals(commandId)    ) {

                                IWorkbench wb = PlatformUI.getWorkbench();
                                IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
                                IWorkbenchPage page = win.getActivePage();

                                ISelection selection = page.getSelection();

                                // do something using selection

                            }
                    }

        });

    }

}

Я использую

    IWorkbench wb = PlatformUI.getWorkbench();
    IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
    IWorkbenchPage page = win.getActivePage();

    ISelection selection = page.getSelection();

вместо

    IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelectionChecked(event);

потому что причина выше. Однако это связано с внутренним механизмом Eclipse. Событие refresh использует старый механизм действия и вызов ExternalActionManager. Метод preExecute, в котором у события нет данных для выбора.

Я хочу вторую формулу

    IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelectionChecked(event);

может быть доступно в методе preExecute в будущем.

...