Apresentando Elementos Java em um Visualizador JFace

A API da UI do JDT fornece classes que permitem apresentar o modelo Java ou partes dele em um visualizador JFace padrão. Esta funcionalidade é fornecida principalmente por:

Fornecedores de conteúdo e rótulo para visualizadores JFace estão descritos detalhadamente em Visualizadores JFace.

Quando se conhece o mecanismo básico de plataformas, reunir os fornecedores de conteúdo e rótulos Java é muito simples:
    ...
	TreeViewer viewer= new TreeViewer(parent);     // Fornecer membros de uma unidade de compilação ou arquivo de classe, mas nenhum elemento de cópia de trabalho
    ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false);
    viewer.setContentProvider(contentProvider);
    // Há mais sinalizadores definidos na classe JavaElementLabelProvider
    ILabelProvider labelProvider= new JavaElementLabelProvider(
        JavaElementLabelProvider.SHOW_DEFAULT |
        JavaElementLabelProvider.SHOW_QUALIFIED |
        JavaElementLabelProvider.SHOW_ROOT);
    viewer.setLabelProvider(labelProvider);
    // Utilizando o modelo Java conforme a entrada do visualizadores apresentam projetos Java no primeiro nível.
    viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
    ...

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

Sobrepondo imagens com informações Java

JavaElementImageDescriptor pode ser utilizado para criar uma imagem com base em um descritor arbitrário de imagem de base e em um conjunto de sinalizadores que especificam quais adornos específicos de Java (ex. estático, final, sincronizado, ....) devem ser sobrepostos na imagem.

Adicionando decoradores de problemas e de substituição

Quando for esperado que um visualizador inclua anotações de problemas, o DecoratingLabelProvider do JFace juntamente com o ProblemsLabelDecorator é utilizado. O trecho a seguir ilustra o uso de um decorador de rótulos de problemas.
    ...
	DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());	    viewer.setLabelProvider(decorator);
    ...

Da mesma maneira, OverrideIndicatorLabelDecorator pode ser utilizado para decorar um provedor de rótulo normal para mostrar os indicadores de implementação e de substituição dos métodos.

Atualizando a Apresentação em Alterações de Gabaritos

Nem o OverrideIndicatorLabelDecorator nem o ProblemsLabelDecorator atende a alterações do modelo. Assim, o visualizador não atualizará sua apresentação se o gabarito de marcador Java ou de recurso for alterado. O motivo de enviar a atualização para o cliente dessas classes é que ainda não há uma implementação genérica que preencha todos os problemas de desempenho. Tratar a inspeção delta do gabarito Java e a atualização do visualizador em cada decorador ou provedor de rótulo levaria a várias inspeções delta e a atualizações desnecessárias do visualizador.

Portanto, o que o cliente precisa fazer para atualizar seus visualizadores?

Pelos mesmos motivos descritos para os decoradores de rótulos, o StandardJavaElementContentProvider não atende alterações de modelos. Se o visualizador precisar atualizar sua apresentação de acordo com alterações de gabaritos Java, o cliente deverá incluir um ouvinte correspondente em JavaCore. Se a alteração descrita por delta invalidar a estrutura dos elementos apresentados no visualizador, o cliente deverá atualizar o visualizador utilizando a API do JFace padrão (consulte Atualizar Métodos no StructuredViewer, e Incluir e Remover Métodos do TableViewer e AbstractTreeViewer).

Classificando o visualizador

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