Para ciertas clases de modalidades de lanzamiento, puede ser importante obtener el código fuente que corresponda al punto de ejecución actual en el código. Habitualmente es importante al depurar o crear perfiles de un programa. El conector de depuración proporciona varios puntos de extensión diferentes que permiten que los conectores registren clases que pueden ayudar en la ubicación del código fuente.
ISourceLocator e IPersistableSourceLocator definen interfaces para establecer una correlación que va desde un programa en ejecución al código fuente.
Los localizadores de código fuente se implementan generalmente para trabajar con una configuración de lanzamiento y un delegado de configuración de lanzamiento correspondientes. Puede especificarse un ID de localizador de fuente cuando se defina un tipo de configuración de lanzamiento, o puede asociarse programáticamente con una configuración de lanzamiento utilizando el atributo ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID. En cualquier caso, el ID de un localizador de fuente para una configuración debe resolverse en algún momento en la clase que realmente implementa IPersistableSourceLocator. La asociación entre un ID de localizador de origen y su clase se establece mediante el punto de extensión org.eclipse.debug.core.sourceLocators.
A continuación figuran códigos XML procedentes de las herramientas 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 las configuraciones de lanzamiento pueden ser persistentes, los ID de localizadores de fuente pueden almacenarse con la configuración de lanzamiento. Cuando llegue el momento de crear una instancia un localizador de fuente, el conector de depuración busca el atributo de ID de localizador de fuente y crea la instancia de la clase asociada con ese ID.
La implementación de la búsqueda de fuente depende necesariamente del tipo del programa que se lanza. Sin embargo, la plataforma define una implementación abstracta para un localizador de fuente que busca archivos de código fuente en una vía de acceso determinada que incluya directorios, archivos zip, archivos jar y otros similares. Para aprovechar esta implementación, el conector puede ampliar AbstractSourceLookupDirector. Todo lo necesario de la implementación específica es la capacidad de proporcionar un ISourceLookupParticipant adecuado, que puede correlacionar un marco de pila con un nombre de archivo. Consulte los ampliadores de AbstractSourceLookupDirector para ver los ejemplos.
AbstractSourceLookupDirector busca archivos fuente de acuerdo a una vía de acceso de búsqueda de código fuente determinada. Esta vía de acceso se expresa como una matriz de ISourceContainer. Los contenedores de fuente en los que debe buscarse código fuente suelen calcularse según los detalles específicos de la configuración de origen que se lanza. ISourcePathComputer define la interfaz para un objeto que calcula la vía de acceso de origen adecuada para una configuración de lanzamiento. Un sistema de vía de acceso de código fuente, en buena medida como un localizador de fuente, se especifica por el ID y puede especificarse en la definición de extensión para un tipo de configuración de lanzamiento, o asociarse programáticamente estableciendo el atributo ISourceLocator.ATTR_SOURCE_PATH_COMPUTER_ID para la configuración de lanzamiento. El ID de un sistema de vía de acceso de código fuente está asociado con su clase de implementación en el punto de extensión org.eclipse.debug.core.sourcePathComputers. Los códigos siguientes muestran la definición utilizada por JDT para su sistema de vía de acceso de código fuente 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> ...
El sistema de vía de acceso de código fuente es responsable de calcular una matriz de ISourceContainer que represente la vía de acceso de búsqueda de fuente. Por ejemplo, el sistema de vía de acceso de código fuente Java tiene en cuenta el valor de classpath al crear la vía de acceso.
Los contenedores especificados como parte de una vía de acceso de búsqueda de fuente deben implementar ISourceContainer, que puede buscar en el contenedor representado para un elemento de código fuente con nombre. Pueden necesitarse distintas clases de contenedores de código fuente para representar diferentes tipos de lugares donde se almacena el código fuente. Por ejemplo, JDT define los contenedores de código fuente que representan código fuente en un proyecto Java, en classpath y en un fragmento de paquete. Los contenedores de fuente utilizados para una configuración de lanzamiento pueden almacenarse por su ID en la configuración de lanzamiento. Dado que las configuraciones de lanzamiento pueden ser persistentes, tiene que haber una manera de asociar el ID de un contenedor de código fuente con su clase de implementación. Esto se realiza utilizando el punto de extensión org.eclipse.debug.core.sourceContainerTypes. El ejemplo siguiente procede 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> ...