Hent kildekoden til et program

For bestemte typer starttilstande kan det være vigtigt at hente den kildekode, der svarer til det aktuelle udførelsespunkt i koden. Det er typisk vigtigt under udførelse af fejlfindings- eller profilfunktioner i et program. Der stilles forskellige udvidelsespunkter til rådighed af plugin-funktionen til fejlfinding, som gør det muligt for plugins at registrere klasser, som kan hjælpe med at finde frem til kildekoden.

Kildeindikatorer

ISourceLocator ogIPersistableSourceLocator definerer grænseflader, som kan bruges til at knytte et udførende program til kildekoden.

Kildeindikatorer implementeres typisk, så de fungerer sammen med en tilsvarende startkonfiguration og startkonfigurationsdelegeret. Der kan angives en kildeindikator-id, når en startkonfigurationstype defineres, eller også kan den knyttes programmatisk sammen med en startkonfiguration vha. attributten ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID. I begge tilfælde skal id'en for en kildeindikator til en konfiguration fortolkes til den klasse, som rent faktisk implementerer IPersistableSourceLocator. Tilknytningen mellem en kildeindikator-id og dens klasse etableres vha. udvidelsespunktet org.eclipse.debug.core.sourceLocators.

Følgende kodning stammer fra Java-værktøjer:

<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>

Da startkonfigurationer kan være persistente, bliver kildeindikator-id'er gemt sammen med startkonfigurationen. Når det er tid til at starte en kildeindikator, slår plugin-funktionen til fejlfinding kildeindikatorens id-attribut op og starter den klasse, der er knyttet til den pågældende id.

Implementeringen til kildeopslag afhænger nødvendigvis af den type program, der startes.Platformen definerer imidlertid en abstract-implementering af en kildeindikator, som slår kildefiler op i en bestemt sti, som indeholder biblioteker, ZIP-filer, JAR-filer og lignende. For at du kan udnytte denne implementering, kan din plugin udvide AbstractSourceLookupDirector. Det eneste, der kræves af den specifikke implementering, er evnen til at stille en relevant ISourceLookupParticipant til rådighed, som kan tilknytte en stakramme til et filnavn vha. mapping. Udvidelsesmulighederne tilAbstractSourceLookupDirector indeholder eksempler.

Beregningsfunktioner til kildestier

AbstractSourceLookupDirector søger efter kildefiler i henhold til en bestemt opslagssti til kildekoder. Stien udtrykkes som et array af ISourceContainer. Kildeopbevaringsstederne beregnes typisk i henhold til detaljerne i den kildekonfiguration, som startes. ISourcePathComputer definerer grænsefladen til et objekt, som beregner den relevante kildesti til en startkonfiguration. En beregningsfunktion til kildestier er, i lighed med en kildeindikator, defineret ved en id og kan angives i udvidelsesdefinitionen på en startkonfigurationstype, eller den kan tilknyttes programmatisk, ved at du angiver attributten ISourceLocator.ATTR_SOURCE_PATH_COMPUTER_ID i forbindelse med startkonfigurationen. Id'en på en beregningsfunktion til kildestier, knyttes til den implementerende klasse i udvidelsespunktet org.eclipse.debug.core.sourcePathComputers. Følgende kodning viser den definition, der bruges af JDT til beregningsfunktionen til Java-kildestier:

<extension point="org.eclipse.debug.core.sourcePathComputers">
	<sourcePathComputer
		id="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer"
		class="org.eclipse.jdt.launching.sourcelookup.containers.JavaSourcePathComputer">
 	</sourcePathComputer>
 	...

Beregningsfunktionen til kildestier er ansvarlig for at beregne et array afISourceContainer, som repræsenterer kildeopslagsstien. Beregningsfunktionen til Java-kildestier tager f.eks. CLASSPATH med i betragtning, når stien bygges.

Typer af kildeopbevaringssteder

De opbevaringssteder, som angives som en del af en kildeopslagssti, skal implementere ISourceContainer, som kan søge i det opbevaringssted, der repræsenterer et navngivet kildeelement. Det kan være nødvendigt med forskellige slags kildeopbevaringssteder til at repræsentere de forskellige steder, kildekoden opbevares. JDT definerer f.eks. kildeopbevaringssteder, som repræsenterer kilde i et Java-projekt, kilde i CLASSPATH og kilde i et pakkefragment. De kildeopbevaringssteder, der bruges til en startkonfiguration, kan gemmes under deres id i startkonfigurationen. Da startkonfigurationer kan være persistente, kræves en metode til at knytte id'en for et kildeopbevaringssted med dets implementeringsklasse. Det gøres vha. udvidelsespunktet org.eclipse.debug.core.sourceContainerTypes. Følgende eksempel stammer fra 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> 
	...