minimize

とりあえずまずはEclipse JDTを使ってみましょう。

IJavaElement

JDTの基本インターフェイスとなるのがこの IJavaElement です。
クラスやメソッド、パッケージ宣言など全ての要素がこのインターフェイスを持っています。

ICompilationUnit

一つのクラスに対応するのが、この ICompilationUnit です。
正確に言うと「一つのJavaファイル」と1対1対応します。

まずは現在開いているJavaクラスについて、これを取得してみましょう。

IWorkbenchWindow window;
IEditorPart editor = window.getActivePage().getActiveEditor();
IJavaElement javaElement = JavaUI.getEditorInputJavaElement(editor.getEditorInput());

以上で、現在アクティブなエディタに対応するJavaクラスの ICompilationUnit が得られます。
window の拾い方については メニューの作り方 あたりを参考にして下さい。

if (javaElement.getElementType() == IJavaElement.COMPILATION_UNIT) {
  ICompilationUnit cunit = (ICompilationUnit)javaElement;
  IType type = cunit.findPrimaryType();
}

IJavaElementの種別判定には instanceof を使ってもいいのですが、
一応 getElementType() というメソッドを使うのが公式らしいのでそうしましょう。

IType

トップレベルのクラスに対応するのが IType です。
cunit.findPrimaryType() で、この ICompilationUnit に対応するメインクラスを取得します。

(普通そんなことしないとは思いますが)
一つのファイルに二つのトップレベルクラスを定義した場合などは
cunit.getTypes() とすることで複数の IType を取得可能です。

IField

クラス内フィールドです。

type.getChildren() で取得できるコレクション内から取ることができます。

for (IJavaElement el : type.getChildren()) {
  if (el.getElementType() == IJavaElement.FIELD) {
    IField field = (IField)el;
  }
}

IMethod

クラス内メソッドです。
IField と同様の方法で取得できます。

[コメント(0)]