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) ファイルを表します。 |
|
コンパイル単位内のパッケージ宣言を表します。 (ICompilationUnit の子です) |
|
コンパイル単位内のパッケージのインポート宣言のコレクションを表します。 (ICompilationUnit の子です) |
|
1 つのパッケージのインポート宣言を表します。 (IImportContainer の子です) |
|
コンパイル単位内のソース・タイプ、またはクラス・ファイル内のバイナリー形式のいずれかを表します。 |
|
型内部のフィールドを表します。 (IType の子です) |
|
型内部のメソッドまたはコンストラクターを表します。 (IType の子です) |
|
型内部の静的イニシャライザーまたはインスタンスの初期化指定子を表します。 (IType の子です) |
|
コンパイル済みの (バイナリーの) 型を表します。 (IPackageFragment の子です) |
すべての Java エレメントは、 IJavaElement インターフェースを サポートしています。
エレメントの一部は、パッケージ・ビューに表示されます。 これらのエレメントは、 ナビゲートする前に、開く必要があるため、 これらのエレメントは、IOpenable インターフェースを インプリメントします。 以下の図に、これらのエレメントがパッケージ・ビューでどのように表示されるかを示します。
IOpenable を インプリメントする Java エレメントは、大部分が、基本のリソース・ファイル内の情報から作成されます。 同一のエレメントは、リソースのナビゲーター・ビューで包括的に表されます。
他のエレメントは、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.javanature) は、 「Java プロジェクトの新規作成 (New Java project)」ウィザードがプロジェクトを作成するときにプロジェクトに割り当てられます。 プロジェクトに Java ネーチャーが構成されていない場合、 プロジェクトの作成を要求されると、 JavaCore は NULL を戻します。
Java プロジェクトのどこが他のプロジェクトと違うのでしょうか。 Java プロジェクトは、 それらのクラスパスを ".classpath" ファイルに記録し、 Java インクリメンタル・プロジェクト・ビルダーをそのプロジェクトのビルド・スペックに追加します。 それ以外の点では、Java プロジェクトは標準のプロジェクトに過ぎず、 プラグインによって他のネーチャー (および他のインクリメンタル・ビルダー) を使用して構成することができます。 独自の振る舞いに加えて Java の振る舞いも持つプロジェクトを構成するプラグインは、 通常、「Java プロジェクトの新規作成 (New java project)」ウィザード・ページを使用して、 プロジェクトと独自のカスタム・ネーチャーまたは振る舞いの他に Java ネーチャーも割り当てます。
IJavaModel は、 Java プロジェクト・ネーチャーを持つ (したがって、当然 IJavaProject として扱われる)、 ワークスペース内のすべてのプロジェクトの親と考えることができます。