Para certos tipos de modos de lançamento, poderá revelar-se importante obter o código fonte que corresponda ao actual ponto de execução no código. Regra geral, isto é importante ao depurar ou perfilar um programa. São facultados vários pontos de extensão diferentes pelo plug-in de depuração que permitem aos plug-ins registar classes que possam ajudar na localização de código fonte.
ISourceLocator e IPersistableSourceLocator definem interfaces para correlacionar um programa executante com o código fonte.
Os localizadores de fonte geralmente são implementados para trabalhar com uma configuração de lançamento e um delegado de configuração de lançamento correspondentes. Pode ser especificado um ID de localizador de fonte quando se define um tipo de configuração de lançamento ou pode ser associado programaticamente a uma configuração de lançamento através do atributo ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID. Em qualquer dos casos, em dada altura o ID de um localizador de fonte relativo a uma configuração deve ser resolvido para a classe que implementa realmente o IPersistableSourceLocator. A associação entre um ID de localizador de fonte e a respectiva classe é estabelecida por meio do ponto de extensão org.eclipse.debug.core.sourceLocators.
A marcação seguinte é oriunda 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>
Dado que é possível que as configurações de lançamento sejam persistentes, os IDs de localizadores de fonte podem ser armazenados com a configuração de lançamento. Quando chegar a altura de instanciar um localizador de fonte, o plug-in de depuração busca o atributo do ID do localizador de fonte e instancia a classe associada a esse ID.
A implementação para busca de fonte depende necessariamente do tipo de programa a ser lançado. Todavia, a plataforma define uma implementação abstracta de um localizador de fonte que busque ficheiros origem num dado caminho que inclua directórios, ficheiros zip, ficheiros jar e afins. Para tirar partido desta implementação, o plug-in pode estender o AbstractSourceLookupDirector. O que é preciso para a implementação específica é a capacidade de facultar um ISourceLookupParticipant, apropriado que possa correlacionar uma frame de pilha com um nome de ficheiro. Consulte os extensores de AbstractSourceLookupDirector. para mais exemplos.
O AbstractSourceLookupDirector pesquisa ficheiros fonte segundo determinado caminho de busca de código fonte. Este caminho está expresso como matriz de ISourceContainer. Os contentores fonte que devem ser pesquisados são geralmente calculados segundo a especificidade da configuração fonte que esteja a ser lançada. ISourcePathComputer define a interface para um objecto que calcule o caminho fonte apropriado para uma configuração de lançamento. Um calculador de caminho fonte, à semelhança de um localizador de fonte, é especificado por ID, e pode ser especificado na definição da extensão para um tipo de configuração de lançamento ou associado programaticamente mediante definição do atributo ISourceLocator.ATTR_SOURCE_PATH_COMPUTER_ID relativo à configuração de lançamento. O ID de um calculador de caminho fonte é associado com a respectiva classe implementadora no ponto de extensão org.eclipse.debug.core.sourcePathComputers. A marcação seguinte mostra a definição utilizada pelas JDT para o respectivo calculador de caminho fonte 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 calculador de caminho fonte é responsável por calcular uma matriz de ISourceContainer que represente o caminho de busca da fonte. Por exemplo, o calculador de caminho fonte Java considera o caminho de classes ao construir o caminho.
Os contentores especificados como parte do caminho de busca de fonte devem implementar ISourceContainer, o qual pode pesquisar um elemento de fonte denominado no contentor representado. Podem ser necessários diferentes tipos de contentores de fonte para representar diferentes espécies de lugares onde esteja armazenado código fonte. Por exemplo, as JDT definem contentores de fonte que representam fonte num projecto Java, fonte no caminho de classes e fonte num fragmento de pacote. Os contentores de fonte utilizados para uma configuração de lançamento podem estar armazenados por ID na configuração de lançamento. Dado que é possível que as configurações de lançamento sejam persistentes, deve haver forma de associar o id do contentor de fonte à respectiva classe de implementação. Tal efectua-se por meio do ponto de extensão org.eclipse.debug.core.sourceContainerTypes. O exemplo seguinte vem das 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> ...