その他のJDT要素について説明します。
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;
...
}
}
繰り返しになりますが、サブパッケージのクラスは取得されません。