Java モデルは、Java プログラムの作成、編集、およびビルドに関連付けられているオブジェクトをモデル化するクラスのセットです。 Java モデル・クラスは、org.eclipse.jdt.core.* パッケージで 定義されています。これらのクラスは、リソースに対して Java 固有の振る舞いをインプリメントし、 さらに Java リソースをモデル・エレメントに分解します。
パッケージ org.eclipse.jdt.core は、 Java プログラムを構成するエレメントをモデルとするクラスを定義しています。 JDT は、メモリー内オブジェクト・モデルを使用して、Java プログラムの構造を表します。このモデルは、階層構造になっています。 プログラムのエレメントは、子エレメントに分解することができます。
Java エレメントは、リソース・オブジェクトに類似しています。 Java エレメントを操作する場合、実際には、ある基本のモデル・オブジェクトへのハンドルを操作しています。 エレメントが実際にワークスペースに存在しているかどうかを判別するには、exists() プロトコルを使用する必要があります。
下の表は、Java エレメントの種類を要約したものです。
エレメント |
説明 |
---|---|
ワークスペースに対応したルートの Java エレメントを表します。すべての Java プロジェクトの親です。 |
|
ワークスペース内の Java プロジェクトを表します。 (IJavaModel の子です) |
|
パッケージ・フラグメントのセットを表し、そのフラグメントを、 フォルダー、JAR または Zip ファイルのいずれかである基本リソースにマップします。 (IJavaProject の子です) |
|
パッケージ全体に対応するワークスペースの一部、またはパッケージの一部を表します。 (IPackageFragmentRoot の子です) |
|
Java ソース (.java) ファイルを表します。 (IPackageFragment の子です) |
|
コンパイル単位内のパッケージ宣言を表します。 (ICompilationUnit の子です) |
|
コンパイル単位内のパッケージのインポート宣言のコレクションを表します。 (ICompilationUnit の子です) |
|
1 つのパッケージのインポート宣言を表します。 (IImportContainer の子です) |
|
コンパイル単位内のソース・タイプ、またはクラス・ファイル内のバイナリー形式のいずれかを表します。 |
|
型内部のフィールドを表します。 (IType の子です) |
|
型内部のメソッドまたはコンストラクターを表します。 (IType の子です) |
|
型内部の静的イニシャライザーまたはインスタンスのイニシャライザーを表します。 (IType の子です) |
|
コンパイル済みの (バイナリーの) 型を表します。 (IPackageFragment の子です) |
Java エレメントはすべて、 IJavaElement インターフェースをサポートしています。
エレメントの一部は、パッケージ・ビューに表示されます。 これらのエレメントは、ナビゲートする前に開く必要があるため、 IOpenable インターフェースをインプリメントします。 下の図に、これらのエレメントがパッケージ・ビューでどのように表示されるかを示します。
IOpenable をインプリメントする Java エレメントは、大部分が基本のリソース・ファイル内の情報から作成されます。 同一のエレメントはリソースのナビゲーター・ビューで総称的に表されます。
他のエレメントは、Java コンパイル単位を構成する項目に対応しています。 下の図は、Java コンパイル単位と、そのコンパイル単位内のソース・エレメントを表示するコンテンツ・アウトライナーを示しています。
これらのエレメントは対応するソース・コードを含んでいるため、 ISourceReference インターフェースをインプリメントします。 (これらのエレメントはコンテンツ・アウトライナーで選択されているため、対応するソース・コードが Java エディターに表示されます)。
Java エレメントの多くは、ワークスペース内の汎用リソースに対応しています。 汎用リソースから Java エレメントを作成するときは、クラス JavaCore が最良の開始ポイントになります。 以下のコードの断片は、Java エレメントを対応するリソースから取得する方法を示したものです。
private void createJavaElementsFrom(IProject myProject,
IFolder myFolder, IFile myFile) {
IJavaProject myJavaProject = JavaCore.create(myProject);
if (myJavaProject == null)
// the project is not configured for Java (has no Java nature)
return;
// get a package fragment or package fragment root
IJavaElement myPackageFragment = JavaCore.create(myFolder);
// get a .java (compilation unit), .class (class file), or
// .jar (package fragment root)
IJavaElement myJavaFile = JavaCore.create(myFile);
}
JavaCore は、Java クラスパス (ソース・コードとライブラリーを見つけ出すためのロケーション、および出力バイナリー (.class) ファイルを生成するためのロケーションを含む) を保守するためにも使用されます。
単純なプロジェクトから Java プロジェクトを作成するときに、JavaCore は、プロジェクトが Java ネーチャーを使用して構成されているかどうかを検査します。 JDT プラグインはプロジェクト・ネーチャーを使用して、プロジェクトが Java 動作を持っていることを指定します。 このネーチャー (org.eclipse.jdt.core.JavaCore#NATURE_ID) は、「新規 Java プロジェクト」ウィンドウがプロジェクトを作成するときにプロジェクトに割り当てられます。 プロジェクトで Java ネーチャーが構成されていない場合、プロジェクトの作成が要求されると、 JavaCore はヌルを戻します。
Java プロジェクトの固有の特性とは何でしょうか? Java プロジェクトは、クラスパスを ".classpath" ファイルに記録し、Java インクリメンタル・プロジェクト・ビルダーをそのプロジェクトのビルド・スペックに追加します。 それ以外の点では、Java プロジェクトは通常のプロジェクトに過ぎず、プラグインにより他のネーチャー (および他のインクリメンタル・ビルダー) を使用して構成することができます。 独自の動作に加えて Java の動作も持つプロジェクトを構成するプラグインは通常、 NewJavaProjectWizardPage を使用して、Java ネーチャーを独自のカスタム・ネーチャーや動作のほか、プロジェクトにも割り当てます。
IJavaModel は、Java プロジェクト・ネーチャーを持つ (したがって IJavaProject として扱うことができる)、ワークスペース内のすべてのプロジェクトの親と考えることができます。