Como Apresentar Elementos Java em um Visualizador JFace Padrão

A API da UI do JDT fornece várias classes para apresentar o gabarito Java ou partes dele em um visualizador JFace padrão. Esta funcionalidade é fornecida principalmente por:

Juntar as partes é muito simples:
	...
IJavaProject jProject= ...;

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á mas sinalizadores definidos na classe JavaElementLabelProvider
ILabelProvider labelProvider= new JavaElementLabelProvider(
JavaElementLabelProvider.SHOW_DEFAULT |
JavaElementLabelProvider.SHOW_QUALIFIED |
JavaElementLabelProvider.SHOW_ROOT);
viewer.setLabelProvider(labelProvider);

// Utilizando o gabarito Java conforme a entrada dos visualizadores apresentam projetos Java no primeiro nível.
viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
...

Além do gabarito Java, a classe StandardJavaElementContentProvider suporta os seguintes tipos de elementos de entrada: IJavaProject, IPackageFragmentRoot, IPackageFragment e IFolder.

Incluindo  Decoradores de Problemas e de Substituição

Quando for suposto que um visualizador inclua anotações de problemas, será utilizado um DecoratingLabelProvider juntamente com o ProblemsLabelDecorator. A seguir, um trecho de código que descreve o uso de um  decorador de rótulo de problema:
	...
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 alterações de gabaritos. 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.

Então, 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 gabaritos. 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).

Copyright IBM Corporation e outros 2000, 2002. Todos os Direitos Reservados.