minimize

その他のJDT要素について説明します。

IJavaProject

Java Projectのルート要素です。
例えば、Package Explorer でプロジェクトルートを選択した場合などが
これに当てはまります。

プロジェクトの全ソースパスを取得

for (IPackageFragmentRoot root : javaProject.getAllPackageFragmentRoots()) {
  if (root.getKind() == IPackageFragmentRoot.K_SOURCE) {
    // hit!!
  }
}

これで自プロジェクトおよび参照プロジェクトに含まれる全ソースパスが取得できます。
getKind() の条件を外すと、jarファイルまで取得できます。

自プロジェクトのみ取得したい場合は、

if (root.getJavaProject().equals(selfProject)) ...

という条件を付ければOKです。ちなみにJDTで扱うほとんどのインスタンスは
equals メソッドが正しく(同値のときtrueを返すように)実装されています。

ソースパスに含まれる全パッケージを取得

for (IJavaElement el : packageFragmentRoot.getChildren()) {
  if (el.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
    IPackageFragment packageFragment = (IPackageFragment)el;
    ...
  }
}

こんな感じです。
ここで注意することは、この方法ではサブパッケージも全てフラットな形で取得されるという点です。
例えば

org.limy.common
org.limy.web
org.limy.web.impl

このようになります。Package Explorer でフラット表示にした状況を思い浮かべてもらうと
わかりやすいかもしれません。

同じ理由で、packageFragment.getChilren() はそのパッケージに含まれる
サブパッケージを「返しません」。

パッケージに含まれる全クラスを取得

for (IJavaElement el : packageFragment.getChildren()) {
  if (el.getElementType() == IJavaElement.COMPILATION_UNIT) {
    ICompilationUnit cunit = (ICompilationUnit)el;
    ...
  }
}

繰り返しになりますが、サブパッケージのクラスは取得されません。

[コメント(0)]