将我的操作附加到F5 / Refresh

时间:2011-03-03 12:47:33

标签: eclipse-plugin refresh

我正在为Eclipse编写一个插件,我想将我的一个操作附加到Eclipse F5 / Refresh事件。

任何人都可以帮助我吗? 谢谢!

3 个答案:

答案 0 :(得分:4)

您可以将IExecutionListener附加到ICommandService。您将收到所有已执行命令的通知。您可以查找所需的命令ID(在本例中为org.eclipse.ui.file.refresh)并执行操作

答案 1 :(得分:1)

我假设你正在为Eclipse Helios(3.6)写这篇文章。

在Eclipse帮助中,在Platform Plug-in Developer Guide中 - >程序员指南 - >高级资源概念 - >刷新提供商,有一个扩展点。

org.eclipse.core.resources.refreshProviders

您的类必须扩展RefreshProvider才能使用此扩展。

答案 2 :(得分:0)

根据Prakash G. R.,我展示了示例代码。 因为如果我们需要使用Workbench,Activator中的初始化代码不起作用,因此我使用了启动扩展点。 plugin.xml是

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

因此,在MyStartUp类中,我们将ExecutionListener添加到ICommandService。 重要的是preExecute方法中的ExecutionEvent无法执行 提取选择。这与Command中的常见ExecutionEvent不同。 因此,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方法中使用。