Per alcune modalità di avvio, è importante ottenere il codice di origine che corrisponde al punto di esecuzione corrente nel codice. Generalmente è importante per il debug o la creazione del profilo di un programma. Il plugin di debug fornisce diversi punti di estensione che consentono ai plugin di registrare le classi con il codice di origine.
ISourceLocator e IPersistableSourceLocator definiscono le interfacce per l'associazione da un programma di esecuzione al codice di origine.
Gli indicatori di origine vengono generalmente implementati per operare con una configurazione di avvio e un delegato di configurazione di avvio corrispondenti. È possibile specificare un l'id di un indicatore di origine durante la definizione del tipo di configurazione di avvio, o può essere associato programmaticamente alla configurazione di avvio mediante l'attributo ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID. In ogni caso, l'id di un indicatore di origine di una configurazione viene risolto nella classe che implementa IPersistableSourceLocator. L'associazione tra l'id di un indicatore di origine e la rispettiva classe viene stabilita mediante il punto di estensione org.eclipse.debug.core.sourceLocators.
Il seguente tag è ricavato dagli strumenti 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>
Poiché le configurazioni di avvio possono essere persistenti, l'id dell'indicatore di origine può essere memorizzato con la configurazione di avvio. Nel momento in cui bisogna istanziare un indicatore di origine, il plugin di debug ricerca l'attributo id dell'indicatore e istanza la classe associata a tale id.
L'implementazione per la ricerca dell'origine dipende necessariamente dal tipo di programma avviato. Tuttavia, la piattaforma definisce un'implementazione astratta per un indicatore di origine che ricerca i file di origine in un percorso dato che include directory, file zip, file jar. Per sfruttare le potenzialità di questa implementazione, il plugin può estendere AbstractSourceLookupDirector. L'implementazione fornirà un ISourceLookupParticipant, appropriato che può associare un frame dello stack ad un nome file. Per alcuni esempi, fare riferimento agli extender di AbstractSourceLookupDirector .
AbstractSourceLookupDirector ricerca i file di origine in base ad un particolare percorso. Questo percorso viene espresso come matrice di ISourceContainer. I contenitori di origine in cui ricercare l'origine in genere vengono elaborati in base ai particolari della configurazione dell'origine avviata. ISourcePathComputer definisce l'interfaccia di un oggetto che elabora il percorso di origine appropriato per una configurazione di avvio. I computer del percorso di origine, così come un indicatore di origine, vengono indicati da un id e possono essere specificati nella definizione dell'estensione per un tipo di configurazione di avvio o associato programmaticamente impostando l'attributo ISourceLocator.ATTR_SOURCE_PATH_COMPUTER_ID per la configurazione di avvio. L'ID per il computer del percorso di origine è associato alla rispettiva classe di implementazione nel punto di estensione org.eclipse.debug.core.sourcePathComputers. La seguente markup mostra la definizione utilizzata da JDT per il computer del percorso di origine 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> ...
Il computer del percorso di origine è responsabile per l'elaborazione di una matrice di ISourceContainer che rappresenta il percorso di ricerca di origine. Ad esempio, il computer del percorso di origine Java considera il percorso classi durante la generazione del percorso.
I contenitori specificati come parte del percorso di ricerca di origine devono implementare ISourceContainer, che può ricercare il contenitore rappresentato per un elemento di origine con nome. Per rappresentare i diversi tipi di ubicazioni in cui è memorizzato il codice di origine, potrebbero essere necessari diversi contenitori di origine. Ad esempio, JDT definisce contenitori di origine che rappresentano l'origine in un progetto Java, l'origine nel percorso classi e l'origine in un frammento di pacchetto. I contenitori di origine utilizzati per una configurazione di avvio possono essere memorizzati mediante l'id nella configurazione di avvio. Poiché le configurazioni di avvio possono essere persistenti, è necessario poter associare l'id di un contenitore di origine con la rispettiva classe di implementazione. Questa impostazione viene effettuata utilizzando il punto di estensione org.eclipse.debug.core.sourceContainerTypes. Il seguente esempio proviene dal 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> ...