« アクションの登録先と使用インタフェース | トップページ | リソースへのマーキング »

2004.02.19

リソースが持つマーカーの取得

ワークスペース内にあるすべてのマーク(コンパイルエラーのマークとか,TODOマークとか)を取得するのは,以下の方法で比較的簡単にできる。

  IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
  IMarker[] markers = root.findMarkers(null, false, IResource.DEPTH_INFINITE);

ワークスペース内のリソースの頂点(ルート)は,IWorkspaceRootインタフェースのインスタンスである。つまり,ワークスペース内に存在する全リソースに対して,IWorkspaceRootインタフェースから辿ることができる。たとえば,Hogeプロジェクト(プロジェクトはIProjectで表され,これはIResourceを継承している)を得たければ,

  IWorksaceRoot root = ...;
  IProject hogeProject = root.getProject("Hoge");

とすることで実現できる。

あるリソースが持つマーカーは,IResourceインタフェースのfindMarkersメソッドで取得できる。これにより,IMarkerインタフェースのインスタンスの配列が得られる。findMarkerメソッドでは,対象となるリソース内のマーカーの検索のほかに,そのリソースが持つ子のリソース内のマーカーも検索対象とすることができる。それを指定するのがfindMarkersメソッドの第3引数。

  ・ IResource.DEPTH_ZERO - 起点リソース内のマーカーのみ検索
  ・ IResource.DEPTH_ONE - 起点リソース内および直接の子リソース内のマーカーを検索
  ・ IResource.DEPTH_INFINITE - 起点リソース内およびリカーシブに追った全てのリソース内のマーカーを検索

マーカーはそれぞれ型を持っている。TODOマーカーであれば「org.eclipse.jdt.core.task」とか,コンパイルエラーであれば「org.eclipse.jdt.core.problem」とかが型である。findMarkersメソッドの第一引数に型の文字列を指定することによって,その型のみを検索対象とすることができる。またマーカーは継承関係があるので,findMarkersメソッドの第2引数をtrueにすることによって,第1引数で指定した型およびそれを継承した型も検索対象とすることができるようになる。

一番最初の例では,第1引数をnullにしている。nullの場合は,全ての型が対象となるので,存在する全マーカーが結果として得られる。nullの場合は第2引数は意味が無いので,trueでもfalseでも一緒の結果になる(はず)。

ワークスペースのルートはIWorkspaceRootオブジェクトであるので,それに対してIResource.DEPTH_INFINITEを用いたfindMarkersメソッドを実行すれば,ワークスペース内(全プロジェクトと表現したほうがいいかも)の全マーカーを検索対象にでき,さらにfindMarkersメソッドの第1引数にnullを指定すれば,ワークスペース内の全マーカーを得ることができるのである。

|

« アクションの登録先と使用インタフェース | トップページ | リソースへのマーキング »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12631/212088

この記事へのトラックバック一覧です: リソースが持つマーカーの取得:

« アクションの登録先と使用インタフェース | トップページ | リソースへのマーキング »