Obtenir le code source d'un programme

Pour certains types de modes de lancement, il est parfois important de connaître le code source correspondant au point d'exécution actuel dans le code. C'est particulièrement important lors du débogage ou du profilage d'un programme. Plusieurs points d'extension différents sont fournis par le plug-in de débogage permettant aux plug-in d'enregistrer les classes susceptibles de vous aider à déterminer l'emplacement du code source.

Releveurs de code source

ISourceLocator et IPersistableSourceLocator définissent des interfaces pour le mappage à partir d'un programme d'exécution jusqu'au code source.

Les releveurs de code source sont généralement implémentés pour fonctionner avec une configuration de lancement correspondante et un délégué de configuration de lancement. Il est possible de définir un ID de releveur de code source lorsqu'un type de configuration de lancement est défini ou il peut être associé par programmation à une configuration de lancement utilisant l'attribut ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID. Dans chaque cas, à un certain stade l'ID d'un releveur de code source pour une configuration doit être converti en une classe implémentant IPersistableSourceLocator. L'association entre un ID de releveur de code source et sa classe est établie à l'aide du point d'extension org.eclipse.debug.core.sourceLocators.

Les marquages suivants sont extraits des outils 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>

Dans la mesure où les configurations de lancement peuvent être conservées, les ID de releveur de code source seront stockés avec la configuration de lancement. Lorsque c'est le moment d'instancier un releveur de code source, le plug-in de débogage considère l'attribut de l'ID du releveur de code source et instancie la classe associée à cet ID.

L'implémentation de la recherche du source dépend nécessairement du type de programme lancé. Cependant, la plateforme définit une implémentation abstraite pour un releveur de code source qui recherche les fichiers source sur un chemin donné incluant les répertoires, fichiers zip, fichiers jar, etc. Pour tirer profit de cette implémentation, votre plug-in peut étendre AbstractSourceLookupDirector. Ce qui est requis par l'implémentation spécifique est la capacité à fournir un ISourceLookupParticipantapproprié pour mapper un cadre de pile vers un nom de fichier. Voir les extenders de AbstractSourceLookupDirector. pour des exemples.

Systèmes de chemin source

AbstractSourceLookupDirector recherche les fichiers source en fonction du chemin de recherche du code source particulier. Ce chemin est exprimé sous la forme d'un tableau de ISourceContainer. Les conteneurs source pour lesquels le source est recherché sont générés selon les particularités de la configuration source actuellement lancée. ISourcePathComputer définit l'interface d'un objet générant le chemin source approprié pour une configuration de lancement. Un système de chemin source, comme un releveur de code source, est spécifié par un ID et peut être spécifié dans la définition d'extension pour un type de configuration de lancement ou associé par programmation en définissant l'attribut ISourceLocator.ATTR_SOURCE_PATH_COMPUTER_ID pour la configuration de lancement. L'ID d'un système de chemin source est associé à sa classe d'implémentation dans le point d'extension org.eclipse.debug.core.sourcePathComputers. Le marquage suivant montre la définition utilisé par JDT pour son système de chemin source 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>
 	...

Le système de chemin source génère un tableau de ISourceContainer qui représente le chemin de recherche source. Par exemple, le système de chemin source Java considère le chemin d'accès aux classes lors de la génération du chemin.

Types de conteneur source

Les conteneurs spécifiés en tant que partie du chemin de recherche source doivent implémenter ISourceContainer, qui peut rechercher le conteneur représenté pour un élément source nommé. Différents types de conteneurs source peuvent s'avérer nécessaires pour représenter les différents types d'emplacement où le code source est stocké. Par exemple, JDT définit les conteneurs source qui représentent le source dans un projet Java, le source sur un chemin d'accès aux classes et le source dans un fragment de package. Les conteneurs source utilisés pour une configuration de lancement peuvent être stockés par ID dans la configuration de lancement. Puisque les configurations de lancement peuvent être conservées, il doit exister un moyen d'associer l'ID d'un conteneur source à sa classe d'implémentation. Cela est possible à l'aide du point d'extension org.eclipse.debug.core.sourceContainerTypes. L'exemple suivant provient de 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> 
	...