Java モデルは、Java プログラムの作成、編集、およびビルドに関連付けられているオブジェクトをモデル化するクラスのセットです。 Java モデル・クラスは、org.eclipse.jdt.core パッケージで定義されています。これらのクラスは、リソースに対して Java 固有の振る舞いをインプリメントし、 さらに Java リソースをモデル・エレメントに分解します。
パッケージ org.eclipse.jdt.core は、 Java プログラムを構成するエレメントをモデルとするクラスを定義しています。 JDT は、メモリー内オブジェクト・モデルを使用して、Java プログラムの構造を表します。この構造は、プロジェクトのクラスパスから派生します。 モデルは、階層構造になっています。 プログラムのエレメントは、子エレメントに分解することができます。
Java エレメントの操作は、リソース・オブジェクトの操作と似ています。 Java エレメントを操作するとき、実際には、 ある基本のモデル・オブジェクトへのハンドルを操作しています。 エレメントが実際にワークスペースに存在しているかどうかを判別するには、exists() プロトコルを使用する必要があります。
下の表は、Java エレメントの種類を要約したものです。
エレメント | 説明 |
---|---|
IJavaModel | ワークスペースに対応したルートの Java エレメントを表します。Java ネーチャーを持つすべてのプロジェクトの親です。 また、これは、Java ネーチャーがないプロジェクトへのアクセスを可能にします。 |
IJavaProject | ワークスペース内の Java プロジェクトを表します。 (IJavaModel の子) |
IPackageFragmentRoot | パッケージ・フラグメントのセットを表し、そのフラグメントを、 フォルダー、JAR または Zip ファイルのいずれかである基本リソースにマップします。 (IJavaProject の子です) |
IPackageFragment | パッケージ全体に対応するワークスペースの一部、またはパッケージの一部を表します。 (IPackageFragmentRoot の子です) |
ICompilationUnit | Java ソース (.java) ファイルを表します。 (IPackageFragment の子) |
IPackageDeclaration | コンパイル単位内のパッケージ宣言を表します。 (ICompilationUnit の子です) |
IImportContainer | コンパイル単位内のパッケージのインポート宣言のコレクションを表します。 (ICompilationUnit の子です) |
IImportDeclaration | 1 つのパッケージのインポート宣言を表します。 (IImportContainer の子) |
IType | コンパイル単位内のソース・タイプ、またはクラス・ファイル内のバイナリー形式のいずれかを表します。 |
IField | 型内部のフィールドを表します。 (IType の子です) |
IMethod | 型内部のメソッドまたはコンストラクターを表します。 (IType の子です) |
IInitializer | 型内部の静的イニシャライザーまたはインスタンスのイニシャライザーを表します。 (IType の子です) |
IClassFile | コンパイル済みの (バイナリーの) 型を表します。 (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 rootIJavaElement myPackageFragment = JavaCore.create(myFolder); // get a .java (compilation unit), .class (class file), or// .jar (package fragment root)IJavaElement myJavaFile = JavaCore.create(myFile); }
Java エレメントがあると、JDT API を使用してモデルの横断および照会を行うことができます。 また、Java エレメントに含まれている非 Java リソースを照会することもできます。
private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) { ... // get the non Java resources contained in my project. Object[] nonJavaChildren = myJavaProject.getNonJavaResources(); ...
単純なプロジェクトから Java プロジェクトを作成するときに、JavaCore は、プロジェクトが Java ネーチャーを使用して構成されているかどうかを検査します。 JDT プラグインはプロジェクト・ネーチャーを使用して、プロジェクトが Java 動作を持っていることを指定します。 このネーチャー (org.eclipse.jdt.core.JavaCore#NATURE_ID) は、「新規 Java プロジェクト」ウィンドウがプロジェクトを作成するときにプロジェクトに割り当てられます。 プロジェクトで Java ネーチャーが構成されていない場合、プロジェクトの作成が要求されると、 JavaCore はヌルを戻します。
JavaCore は、Java クラスパス (ソース・コードとライブラリーを見つけ出すためのロケーション、および出力バイナリー (.class) ファイルを生成するためのロケーションを含む) を保守するためにも使用されます。
Java プロジェクトの固有の特性とは何でしょうか? Java プロジェクトは、クラスパスを「.classpath」ファイルに記録し、 Java インクリメンタル・プロジェクト・ビルダーをそのプロジェクトのビルド・スペックに追加します。 それ以外の点では、これらは通常のプロジェクトに過ぎず、プラグインにより他のネーチャー (および他のインクリメンタル・ビルダー) を使用して構成することができます。 独自の動作に加えて Java の動作も持つプロジェクトを構成するプラグインは通常、 NewJavaProjectWizardPage を使用して、 Java ネーチャーを独自のカスタム・ネーチャーや動作のほか、プロジェクトにも割り当てます。
IJavaModel は、Java プロジェクト・ネーチャーを持つ (したがって IJavaProject として扱うことができる)、ワークスペース内のすべてのプロジェクトの親と考えることができます。