2010-12-06 3 views
0

私はIJavaProjectでもあるIProjectを持っています。このIProjectを参照する他のすべてのプロジェクトをワークスペースで見つける必要があります。特定のIProjectのすべての依存するIProject参照を取得します

これを計算する単純で非効率的な方法の1つは、ワークスペース内のすべてのプロジェクトをトラップして、現在のプロジェクトへの参照を追跡することです。このような何か:

IProject currentProject = ...; 

IProject[] allProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); 
List<IProject> interestingProjects = ...; 
for (IProject project : allProjects) { 
    if (refersToCurrentProject(project)) { 
    interestingProjects.add(project); 
    } 
} 
doSomething(interestingProjects); 

私はこのコードをコンパイルしていないと私はメモリからそれを書いたので、それが正確に動作しない場合があり、私は私が何をしたいのアイデアを与えるためにしようとしていますノート・。

もう1つの可能性は、依存関係を1回だけ計算してから、IResourceChangedListenerを使用して依存関係を更新することです。しかし、これはあまりにも面倒です、私はそれのために自分自身の(エラーが起こりやすい)ロジックを書く必要があります。

何か提案がありがとうございます。

答えて

1

特定のプロジェクトを右クリックすると、無関係なプロジェクトを閉じるためのコンテキストメニューオプションがあることは知っています。あなたはそれを見ましたか?

+0

ポインタありがとうございます。 CloseUnrelatedProjectsActionがIProject.getReferencedProjects()を使用しているようです。これは、ワークスペース内のすべてのプロジェクトが訪問されなければならないので、私が望むものではありません。 –

+0

これを見ているうちに、IProject.getReferencingProjects()メソッドがあることに気付きました。 JavaDocは、私が探している振る舞いを正確に表しています。しかし、実装はちょっと古臭く、ワークスペース内のすべてのプロジェクトを検索します。私はこれに対する簡単な答えはないと考え始めています。 –

+0

最後に、これは私が実装している方法です。元の提案をありがとう。結果には特に満足しているわけではありませんが、国家を自分で管理しなくてももっとうまくいくとは思いません。 –