Uzyskiwanie kodu źródłowego programu

W przypadku niektórych trybów uruchamiania ważne jest uzyskanie kodu źródłowego odpowiadającego aktualnemu punktowi wykonywania w kodzie. Zazwyczaj ma to miejsce przy debugowaniu lub profilowaniu programu. Moduł dodatkowy debugowania udostępnia kilka różnych punktów rozszerzeń umożliwiających modułom dodatkowym rejestrowanie klas, które asystują w znajdowaniu kodu źródłowego.

Wskaźniki źródła

Interfejsy ISourceLocator oraz IPersistableSourceLocator służą do odwzorowania wykonywanego programu na kod źródłowy.

Wskaźniki źródła są implementowane zazwyczaj do pracy z odpowiednimi konfiguracjami startowymi oraz ich delegatami.Identyfikator wskaźnika źródła może zostać określony podczas definiowania typu konfiguracji startowej lub programowo powiązany z konfiguracją startową za pomocą atrybutu ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID. W obu przypadkach identyfikator wskaźnika źródła dla danej konfiguracji musi zostać na pewnym etapie rozstrzygnięty do klasy implementującej interfejs IPersistableSourceLocator. Powiązanie identyfikatora wskaźnika źródła i klasy odbywa się za pomocą punktu rozszerzenia org.eclipse.debug.core.sourceLocators.

Poniższy fragment kodu pochodzi ze środowiska JDT:

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

Ponieważ konfiguracja startowa może zostać utrwalona, identyfikatory wskaźników źródła mogą być przechowywane wraz z nią. Aby utworzyć instancję wskaźnika źródła, moduł dodatkowy debugowania wyszukuje atrybut identyfikatora wskaźnika źródła i tworzy instancję klasy powiązanej z tym identyfikatorem.

Implementacja wyszukiwania źródła zależy od typu uruchamianego programu. Platforma udostępnia przy tym definicję abstrakcyjnej implementacji wskaźnika źródła, która sprawdza pliki źródłowe w danej ścieżce, uwzględniając katalogi, pliki ZIP, pliki JAR itp. Aby w pełni wykorzystać tę implementację, moduł dodatkowy może rozszerzyć obiekt AbstractSourceLookupDirector. Konkretna implementacja musi jedynie zapewnić odpowiedni interfejs ISourceLookupParticipant, który umożliwia odwzorowanie ramki stosu na nazwę pliku. Aby zapoznać się z innymi przykładami, patrz funkcje rozszerzenia obiektu AbstractSourceLookupDirector.

Obiekty obliczające ścieżki źródłowe

Obiekt AbstractSourceLookupDirector wyszukuje pliki źródłowe według określonej ścieżki wyszukiwania kodu źródłowego, która jest wyrażona jako tablica interfejsów ISourceContainer. Przeszukiwane kontenery źródłowe są zazwyczaj obliczane zgodnie z uruchamianą konfiguracją źródłową. Interfejs ISourcePathComputer służy do tworzenia obiektu obliczającego odpowiednią ścieżkę źródłową dla konfiguracji startowej.Obiekt obliczający ścieżki źródłowe, podobnie jak wskaźnik źródła, jest określany za pomocą identyfikatora i może być określony w rozszerzeniu typu konfiguracji startowej lub powiązany programowo przez ustawienie atrybutu ISourceLocator.ATTR_SOURCE_PATH_COMPUTER_ID dla konfiguracji startowej. Identyfikator obiektu obliczającego ścieżki źródłowe jest powiązany z implementującą klasą w punkcie rozszerzenia org.eclipse.debug.core.sourcePathComputers. Poniższy fragment kodu pokazuje definicję używaną dla obiektu obliczającego ścieżki źródłowe Java przez środowisko JDT:

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

Obiekt obliczający ścieżki źródłowe oblicza tablicę interfejsów ISourceContainer, która reprezentuje ścieżkę wyszukiwania źródła. Na przykład obiekt obliczający ścieżki źródłowe Java uwzględnia ścieżkę klasy podczas budowania ścieżki.

Typy kontenerów źródłowych

Kontenery należące do ścieżki wyszukiwania źródła muszą implementować interfejs ISourceContainer umożliwiający wyszukanie nazwanego elementu źródłowego w kontenerze. Do odzwierciedlania różnych typów miejsc przechowywania kodu źródłowego mogą być niezbędne różne typy kontenerów źródłowych. Na przykład środowisko JDT definiuje kontenery źródłowe dla źródła w projekcie Java, źródła w ścieżce klasy oraz źródła we fragmencie pakietu. Kontenery źródłowe używane w konfiguracji startowej mogą być w niej zapisywane według identyfikatorów. Ponieważ konfiguracje startowe mogą być utrwalane, istnieje możliwość powiązania identyfikatora kontenera źródłowego z klasą implementacji. Można to zrobić za pomocą punktu rozszerzenia org.eclipse.debug.core.sourceContainerTypes. Poniższy przykład pochodzi ze środowiska 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> 
	...