Apresentar elementos Java num visualizador JFace

A API da UI JDT faculta classes que permitem apresentar o modelo Java ou partes dele num visualizador JFace normal. Esta funcionalidade é sobretudo fornecida por:

Os fornecedores de conteúdos e etiquetas para visualizadores JFace encontram-se descritos em pormenor em Visualizadores JFace.

Se compreender o mecanismo básico da plataforma, será relativamente fácil trabalhar com fornecedores de conteúdos e etiquetas Java:
    ...
  TreeViewer viewer= new TreeViewer(parent);
    // Fornecer os membros da unidade de compilação ou ficheiro de classes, mas sem elementos de cópia de trabalho
    ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false);
    viewer.setContentProvider(contentProvider);
    // Existem mais sinalizadores definidos na classe JavaElementLabelProvider
    ILabelProvider labelProvider= new JavaElementLabelProvider(
        JavaElementLabelProvider.SHOW_DEFAULT |
        JavaElementLabelProvider.SHOW_QUALIFIED |
        JavaElementLabelProvider.SHOW_ROOT);
    viewer.setLabelProvider(labelProvider);
    // utilizar o modelo Java como entrada dos visualizadores para apresentar projectos Java no primeiro nível.
    viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
    ...

O exemplo anterior utiliza um modelo Java (IJavaModel) como elemento de entrada para o visualizador  O StandardJavaElementContentProvider também suporta IJavaProject, IPackageFragmentRoot, IPackageFragment e IFolder como elementos de entrada:

Sobrepor imagens com informações Java

O JavaElementImageDescriptor pode ser utilizado para criar um imagem baseada num descritor de imagem de base arbitrária e num conjunto de sinalizadores que indicam quais os adornos específicos Java (por exemplo, estático, final, sincronizado...) a sobrepor na imagem.

Adicionar problema e sobrepor decoradores

Quando é suposto o visualizador incluir anotações de problemas, é utilizado o DecoratingLabelProvider JFace em conjunto com o ProblemsLabelDecorator. O fragmento seguinte ilustra a utilização de um decorador de etiqueta de problema.
    ...
    DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
    viewer.setLabelProvider(decorator);
    ...

Da mesma forma, o OverrideIndicatorLabelDecorator pode ser utilizado para decorar um fornecedor de etiqueta normal para mostrar os indicadores de implementação e sobreposição para os métodos.

Actualizar a apresentação das alterações a modelos

O OverrideIndicatorLabelDecorator e o ProblemsLabelDecorator não ouvem as alterações ao modelo. Por conseguinte, o visualizador não actualiza essa apresentação mesmo que haja alterações ao modelo Java e do marcador de recursos. Esta actualização não é mostrada ao cliente para estas classes porque ainda não existe uma implementação genérica que cumpra todas as vertentes do rendimento. O tratamento da inspecção de deltas em modelo Java e da renovação do visualizador em cada decorador e fornecedor de etiquetas levaria a várias inspecções de deltas e actualizações de visualizador desnecessárias.

Assim, o que tem o cliente de fazer para actualizar os seus visualizadores?

Pelas mesmas razões enumeradas para os decoradores de etiquetas, também o StandardJavaElementContentProvidernão ouve as alterações do modelo. Se o visualizador tiver de actualizar a sua apresentação de acordo com as alterações ao modelo Java, o cliente terá de adicionar o ouvinte correspondente ao JavaCore. Se a alteração descrita pelo delta invalidar a estrutura dos elementos apresentados no visualizador, o cliente deverá actualizar o visualizador com a API JFace normal (consulte os métodos de renovação no StructuredViewer e os métodos de adição e remoção no TableViewer e no AbstractTreeViewer).

Ordenar o visualizador

O JavaElementSorter pode ser conectado ao visualizador JFace para ordenar os elementos Java de acordo com o estilo de ordenação da UI Java.