Pontos de extensão e o registro

Enquanto os aspectos de "pacote configurável" de um plug-in podem ser interessantes para os plug-in e as ferramentas do tempo de execução, é muito mais comum que um plugin esteja preocupado com quais pontos de extensão foram definidos pelos plug-ins e quais extensões foram constribuídas pelos plug-ins. Essas informações são fornecidas pelo registro de extensão da plataforma, IExtensionRegistry.

Por que um plug-in pode desejar saber quais extensões estão presentes? Um exemplo concreto ajudará a mostrar a necessidade dessas informações e o protocolo para obtê-las.

Chame novamente o diálogo Mostrar Visualização do workbench que mostra todas as visualizações disponíveis que foram instaladas na plataforma.

Diálogo Mostrar Visualização com entrada Hello

Sabemos que os nomes da categoria e os nomes da visualização de todas as visualizações contribuídas são especificados no arquivo plugin.xml para qualquer plug-in que contribui uma extensão para org.eclipse.ui.views. Mas como o workbench localiza essas informações? A partir do registro de extensão da plataforma. O seguinte código é um fragmento simplificado com base na implementação do workbench do diálogo Mostrar Visualização:

	...
	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]);  //get the information about each extension
	...

Vemos acima que o registro pode ser obtido a partir da classe Plataforma. O protocolo em IExtensionRegistry é utilizado para localizar o ponto de extensão denominado org.eclipse.ui.views. As informações no registro sobre os pontos de extensão específicos ou as extensões podem ser localizadas utilizando o protocolo definido em IExtensionRegistry, IExtensionPoint, e IExtension. O javadoc para essas classes fornece informações detalhadas sobre o protocolo de registro.

Assim que a definição de extensão de interesse for localizada, o protocolo em IConfigurationElement pode ser utilizado para examinar os atributos individuais de uma extensão.