JDT-UI API は、標準の JFace ビューアーで Java モデルまたはその一部を表示するためのいくつかのクラスを提供します。 この機能は、主に以下によって提供されます。
...
IJavaProject jProject= ...;
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()));
...
StandardJavaElementContentProvider
クラスは
Java モデルに加え、IJavaProject
、IPackageFragmentRoot
、IPackageFragment
、および
IFolder
の入力エレメント型をサポートします。
...同様に、 OverrideIndicatorLabelDecorator を使用して、 メソッドのインプリメントの表示およびメソッドの標識のオーバーライドを行う標準のラベル・プロバイダーをデコレートできます。
DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
viewer.setLabelProvider(decorator);
...
OverrideIndicatorLabelDecorator
と ProblemsLabelDecorator
は、どちらもモデル変更を listen しません。
このため、Java またはリソース・マーカー・モデルが変更された場合、ビューアーは表示を更新しません。
これらのクラスで更新を行う責任をユーザーに課す理由は、
パフォーマンス上の問題をすべて解決する汎用インプリメンテーションがまだないためです。
Java モデル・デルタ・インスペクションと、
それぞれのラベル・デコレーターまたはラベル・プロバイダーでのビューアー最新表示を扱うことは、
複数のデルタ・インスペクションと不要なビューアーの更新をもたらすことにつながります。OverrideIndicatorLabelDecorator
: クライアントは Java モデル変更を listen し
(JavaCore.addElementChangedListener
を参照)、
ビューアーに表示されるエレメントのオーバーライド標識をデルタによって記述される変更が無効にするかどうかを決定しなければなりません。
無効にする場合、デルタのインスペクションを行うクラスは、対応する Java エレメントの再描画を、標準の
JFace ビューアー API (StructuredViewer の update メソッドを参照) を使用して起動する必要があります。
ProblemsLabelDecorator
: クライアントは、
ProblemsLabelChangedEvent (ProblemsLabelDecorator.addListener
も参照) 経由でデコレーターによって通知される変更を listen する必要があります。
マーカー・モデルはリソース・ベースであるため、
リスナーはリソース通知をその基礎となるデータ・モデルにマップしなければなりません。
Java エレメントを表示するビューアーでこれを行う方法を示す例については、内部クラス
ProblemTreeViewer.handleLabelProviderChanged
を参照してください。