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.startupEclipse の起動時にプラグインを開始できます。

于 2013-11-11T11:40:33.360 に答える