Pontos de extensão e registo

Enquanto os aspectos de "agrupamento" de um plug-in possam ser interessantes para o plug-in de tempo de execução e as ferramentas de tempo de execução, é muito mais comum que um plug-in se ocupe dos pontos de extensão que foram definidos por plug-ins e das extensões que foram contributos de plug-ins. Estas informações são prestadas pelo registo de extensões da plataforma, IExtensionRegistry.

Por que razão interessa a um plug-in saber as extensões presentes? Um exemplo concreto ajudará a mostrar a necessidade destas informações e o protocolo para as obter.

Lembremo-nos do diálogo Mostrar Vista da área de trabalho que mostra todas vistas disponíveis que foram instaladas na plataforma.

diálogo Mostrar Vista com entrada Olá

Sabemos que os nomes de categorias e os nomes de vistas de todas as vistas contributos estão especificados no ficheiro plugin.xml de qualquer plug-in que contribua com uma extensão para org.eclipse.ui.views. Mas como sabe a área de trabalho estas informações? Pelo registo de extensões da plataforma. O código seguinte é uma porção simplificada baseada na implementação da área de trabalho do diálogo Mostrar Vista:

	...
	IExtensionRegistry registry = Platform.getExtensionRegistry();
	IExtensionPoint point = registry.getExtensionPoint("org.eclipse.ui.views");
	if (point == null) return;
	IExtension[] extensions = point.getExtensions();
	for (int i = 0; i < extensions.length; i++)
		readExtension(extensions[i]);  //obter as informações sobre cada extensão
	...

Vemos em cima que o registo pode ser obtido com a classe Platform. O protocolo em IExtensionRegistry é utilizado para localizar o ponto de extensão denominado org.eclipse.ui.views. As informações no registo acerca de determinados ponto de extensão ou extensões podem ser encontradas com o protocolo definido em IExtensionRegistry, IExtensionPoint e IExtension. O javadoc para estas classes presta informações detalhadas sobre o protocolo de registo.

Uma vez detectada a definição de extensão que interessa, pode ser utilizado o protocolo em IConfigurationElement para examinar os atributos individuais de uma extensão.