JFace ビューアーで Java エレメントを表示

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) をビューアーの入力要素として使用します。 また、StandardJavaElementContentProviderIJavaProjectIPackageFragmentRootIPackageFragment、および IFolder を入力エレメントとしてサポートします。

Java 情報をイメージの上に重ねる

JavaElementImageDescriptor を使用して、任意の基本イメージ・ディスクリプターに基づくイメージと、どの Java 特定の装飾 (static、final、synchronized など) がイメージの上に重ね合わされるかを指定するフラグのセットを作成できます。

問題およびオーバーライド・デコレーターの追加

ビューアーが問題注釈を組み込むとき、JFace DecoratingLabelProviderProblemsLabelDecorator とともに使用されます。 下の断片は、問題ラベル・デコレーターの使用を示しています。
    ...
    DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
    viewer.setLabelProvider(decorator);
    ...

同様に、 OverrideIndicatorLabelDecorator を使用して、メソッドの実装インジケーターおよび オーバーライド・インジケーターを表示する標準のラベル・プロバイダーをデコレートできます。

モデル変更時の表示の更新

OverrideIndicatorLabelDecoratorProblemsLabelDecorator は、どちらもモデル変更を listen しません。 このため、Java またはリソース・マーカー・モデルが変更された場合、ビューアーは表示を更新しません。 これらのクラスに対してクライアントで更新を行う責任をユーザーに課す理由は、 パフォーマンス上の問題をすべて解決する汎用実装がまだないためです。 Java モデル・デルタ・インスペクションと、 それぞれのラベル・デコレーターまたはラベル・プロバイダーでのビューアー最新表示を扱うことは、 複数のデルタ・インスペクションと不要なビューアーの更新をもたらすことにつながります。

ビューアーを更新するために、クライアントが行う必要があることは?

ラベル・デコレーターについて挙げたものと同じ理由で、StandardJavaElementContentProvider はモデル変更を listen しません。 Java モデル変更に応じて、ビューアーの表示を更新する必要がある場合、クライアントは対応するリスナーを JavaCore に追加する必要があります。 デルタによって記述される変更がビューアーに表示されるエレメントの構造を無効にする場合、クライアントは標準の JFace API を使用してビューアーを更新する必要があります (StructuredViewer の refresh メソッド、および TableViewer と AbstractTreeViewer の add および remove メソッドを参照)。

ビューアーのソート

JavaElementSorter を JFace ビューアーに接続して、Java UI ソート・スタイルに従って Java エレメントをソートすることができます。