JDT UI API は、標準の JFace ビューアーで Java モデルまたはその一部を表示できるようにするためのクラスを提供します。 この機能は、主に以下によって提供されます。
JFace ビューアーのコンテンツおよびラベル・プロバイダーについては、『JFace ビューアー』で詳しく説明されています。
基本的なプラットフォーム・メカニズムを理解していれば、Java コンテンツ・プロバイダーとラベル・プロバイダーを統合することは極めて簡単です。... TreeViewer viewer= new TreeViewer(parent); // Provide members of a compilation unit or class file, but no working copy elements ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false); viewer.setContentProvider(contentProvider); // There are more flags defined in class JavaElementLabelProvider ILabelProvider labelProvider= new JavaElementLabelProvider( JavaElementLabelProvider.SHOW_DEFAULT | JavaElementLabelProvider.SHOW_QUALIFIED | JavaElementLabelProvider.SHOW_ROOT); viewer.setLabelProvider(labelProvider); // Using the Java model as the viewers input present Java projects on the first level. viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot())); ...
上記のサンプルでは、Java モデル (IJavaModel) をビューアーの入力エレメントとして使用します。 また、StandardJavaElementContentProvider は IJavaProject、IPackageFragmentRoot、IPackageFragment、および IFolder を入力エレメントとしてサポートします。
JavaElementImageDescriptor を使用して、任意の基本イメージ・ディスクリプターに基づくイメージと、どの Java 特定装飾 (static、final、synchronized など) がイメージの上に重ね合わされるかを指定するフラグのセットを作成できます。
... DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator()); viewer.setLabelProvider(decorator); ...
同様に、 OverrideIndicatorLabelDecorator を 使用して、メソッドのインプリメントの表示およびメソッドの標識のオーバーライドを行う標準のラベル・プロバイダーをデコレートできます。
OverrideIndicatorLabelDecorator と ProblemsLabelDecorator は、どちらもモデル変更を listen しません。 このため、Java またはリソース・マーカー・モデルが変更された場合、ビューアーは表示を更新しません。 これらのクラスで更新を行う責任をユーザーに課す理由は、 パフォーマンス上の問題をすべて解決する汎用インプリメンテーションがまだないためです。 Java モデル・デルタ・インスペクションと、 それぞれのラベル・デコレーターまたはラベル・プロバイダーでのビューアー最新表示を扱うことは、 複数のデルタ・インスペクションと不要なビューアーの更新をもたらすことにつながります。
ビューアーを更新するために、クライアントが行う必要があることは?
ProblemTreeViewer.handleLabelProviderChanged
を参照してください。
ラベル・デコレーターについて挙げたものと同じ理由で、StandardJavaElementContentProvider はモデル変更を listen しません。 Java モデル変更に応じて、ビューアーの表示を更新する必要がある場合、クライアントは対応するリスナーを JavaCore に追加する必要があります。 デルタによって記述される変更がビューアーに表示されるエレメントの構造を無効にする場合、クライアントは標準の JFace API を使用してビューアーを更新する必要があります (StructuredViewer の refresh メソッド、および TableViewer と AbstractTreeViewer の add および remove メソッドを参照)。
JavaElementSorter を JFace ビューアーに接続して、Java UI ソート・スタイルに従って Java エレメントをソートすることができます。