2

我有一个带有增量构建器的项目。鉴于项目具有某种性质,构建器将所有资源及其更改的模型表示写入。这运行得很好。但是如果从工作区中删除整个项目,则不会调用增量构建器。为此创建事件处理程序的最佳方法是什么?

我知道我可以IResourceChangeListener根据我的天性创建一个并将其附加到所有项目中。但是,我必须在 IDE 启动时启动我的插件,这相当混乱。

那么,捕捉“项目已删除”事件的最佳方法是什么?

4

2 回答 2

6

您可以使用 IResourceChangeListener 接收有关工作区更改的通知。IResourceChangelistener API 非常通用,可以为您提供有关许多不同类型更改的更改信息。这是一个如何专门使用它来检测项目删除的示例。

public class ProjectDeletionListenerManager implements IResourceChangeListener {

    public interface ProjectDeletionListener {
        void projectAboutToBeDeleted(IProject project);
    }

    private IWorkspace workspace;
    private ProjectDeletionListener listener;

    public ProjectDeletionListenerManager(ProjectDeletionListener listener) {
        this.workspace = ResourcesPlugin.getWorkspace();
        this.listener = listener;
        this.workspace.addResourceChangeListener(this, 
                IResourceChangeEvent.PRE_DELETE);
    }

    @Override
    public void resourceChanged(IResourceChangeEvent event) {
        IResource rsrc = event.getResource();
        if (rsrc instanceof IProject) {
            listener.projectAboutToBeDeleted((IProject) rsrc);
        }
    }

    public void dispose() {
        if (listener!=null) {
            workspace.removeResourceChangeListener(this);
            listener = null;
        }
    }

}

注意:基于此代码的代码片段。

于 2015-09-25T15:42:56.363 回答
2

IResourceChangeListener是这样做的方法。您不会将它附加到项目中,它总是会为所有更改而调用。

您可以使用org.eclipse.ui.startup扩展点在 Eclipse 启动期间启动您的插件。

于 2013-11-11T11:40:33.360 回答