Para determinados tipos de modos de ativação, pode ser importante obter o código fonte que corresponda ao ponto de execução atual no código. Isto é tipicamente importante ao depurar ou traçar o perfil de um programa. Vários pontos de extensão diferentes são fornecidos pelo plug-in de depuração que permite que plug-ins registrem classes que podem dar assistência com código fonte localizado.
ISourceLocator e IPersistableSourceLocator definem interfaces para o mapeamento de um programa de execução de volta para o código fonte.
Os localizadores de origem são normalmente implementados para trabalhar com uma configuração de ativação correspondente e uma delegação de configuração de ativação. Um ID do localizador de origem pode ser especificado quando um tipo de configuração de ativação é definido ou pode ser associado de maneira programática à configuração de ativação, utilizando o atributo ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID. Nos dois casos, em algum ponto o ID de um localizador de origem para uma configuração deve ser resolvido para a classe que, na verdade, implementa o IPersistableSourceLocator. A associação entre um ID do localizador de origem e sua classe é estabelecida utilizando o ponto de extensão org.eclipse.debug.core.sourceLocators.
A seguinte marcação origina-se das ferramentas Java:
<extension point = "org.eclipse.debug.core.sourceLocators"> <sourceLocator id = "org.eclipse.jdt.debug.ui.javaSourceLocator" class="org.eclipse.jdt.debug.ui.JavaUISourceLocator" name="%javaSourceLocator"/> </extension>
Como as configurações de ativação podem ser persistidas, os IDs dos localizadores de origem poderão ser armazenados com a configuração de ativação. No momento adequado de instanciar um localizador de origem, o plug-in de depuração consulta o atributo do ID do localizador de origem e instancia a classe associada àquele ID.
A implementação da consulta da origem depende necessariamente do tipo de programa que está sendo ativado. No entanto, a plataforma define uma implementação abstrata para um localizador de origem que consulta arquivos de origem em um caminho determinado que inclui diretórios, arquivos zip, arquivos jar e afins. Para obter vantagem dessa implementação, o plug-in pode estender o AbstractSourceLookupDirector. Tudo o que é necessário na implementação específica é a habilidade de fornecer um ISourceLookupParticipant apropriado que pode mapear um quadro temporário para um nome de arquivo. Consulte os extensores AbstractSourceLookupDirector para obter exemplos.
O AbstractSourceLookupDirector procura por arquivos de origem de acordo com um caminho de consulta do código fonte específico. Esse caminho é expresso como uma matriz do ISourceContainer. Os contêineres de origem que devem ser procurados para a origem são tipicamente computados de acordo com as particularidades da configuração de origem que está sendo ativada. O ISourcePathComputer define a interface para um objeto que computa o caminho de origem apropriado para uma configuração de ativação. Um computador de caminho de origem, muito semelhante a um localizador de origem, é especificado pelo ID e pode ser especificado na definição de extensão para um tipo de configuração de ativação ou associado de maneira programática, configurando o atributo ISourceLocator.ATTR_SOURCE_PATH_COMPUTER_ID para a configuração de ativação. O ID para um computador de caminho de origem é associado à sua classe de implementação no ponto de extensão org.eclipse.debug.core.sourcePathComputers. A marcação a seguir mostra a definição utilizada pelo JDT para seu computador de caminho de origem Java:
<extension point="org.eclipse.debug.core.sourcePathComputers"> <sourcePathComputer id="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer" class="org.eclipse.jdt.launching.sourcelookup.containers.JavaSourcePathComputer"> </sourcePathComputer> ...
O computador de caminho de origem é responsável por computar uma matriz de ISourceContainer que representa o caminho de consulta de origem. Por exemplo, o computador de caminho de origem Java considera o caminho de classe ao construir o caminho.
Os contêineres especificados como parte de um caminho de consulta de origem devem implementar o ISourceContainer, que pode procurar o contêiner representado por um elemento de origem nomeado. Tipos diferentes de contêineres de origem podem ser necessários para representar os diferentes tipos de locais em que os códigos fonte são armazenados. Por exemplo, o JDT define os contêineres de origem que representam a origem em um projeto Java, origem no caminho de classe e origem em um fragmento de pacote. Os contêineres de origem utilizados para uma configuração de ativação podem ser armazenados pelo ID na configuração de ativação. Como as configurações de ativação podem ser persistidas, haverá uma maneira de associar o ID de um contêiner de origem à sua classe de implementação. Isto é feito, utilizando o ponto de extensão org.eclipse.debug.core.sourceContainerTypes. O exemplo a seguir é fornecido no JDT:
<extension point="org.eclipse.debug.core.sourceContainerTypes"> <sourceContainerType id="org.eclipse.jdt.launching.sourceContainer.javaProject" name="%javaProjectSourceContainerType.name" description="%javaProjectSourceContainerType.description" class="org.eclipse.jdt.internal.launching.JavaProjectSourceContainerTypeDelegate"> </sourceContainerType> ...