Вывод исходного кода программы

Для некоторых типов конфигураций запуска важно получить исходный код, соответствующий текущей точке выполнения. Это особенно важно при отладке или профилировке программы. Модуль отладки включает несколько точек расширения, позволяющих модулям регистрировать классы, которые могут осуществлять в исходном коде поиск текущего фрагмента.

Указатели исходного кода

ISourceLocator и IPersistableSourceLocator задают интерфейсы преобразования от выполняемой программы к исходному коду.

Как правило, средства поиска исходного кода применяются для работы с соответствующими конфигурациями запуска и делегатами конфигураций запуска. Идентификатор указателя исходного кода можно задать как при описании конфигурации запуска, так и программно, с помощью конфигурации запуска, установив значение атрибута ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID. В любом случае идентификатору исходного кода должен быть поставлен в соответствие класс, реализующий IPersistableSourceLocator. Связь между идентификатором и классом устанавливается с помощью точки расширения org.eclipse.debug.core.sourceLocators.

Ниже приведен пример фрагмента исходного кода инструментов 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>

Идентификаторы средств поиска исходного кода сохраняются вместе с конфигурациями запуска (конфигурации запуска можно сохранять). Модуль отладки обнаруживает требуемое средство поиска исходного кода через его идентификатор.

Реализация поиска исходного кода зависит от типа запускаемой программы. Платформой определена абстрактная реализация, осуществляющая поиск в подкаталогах, файлах zip, jar и т. п. в указанном каталоге. Модуль, улучшающий реализацию, должен обработать AbstractSourceLookupDirector. От реализации требуется только предоставить ISourceLookupParticipant, который способен ставить в соответствие кадру стека имя файла. См. примеры модулей для AbstractSourceLookupDirector.

Средства поиска пути

AbstractSourceLookupDirector ищет исходные файлы в соответствии с путем поиска исходного кода. Этот путь представлен в виде массива объектов типа ISourceContainer. Область поиска формируется в соответствии с текущей конфигурацией исходного кода. ISourcePathComputer определяет интерфейс объекта, формирующего область поиска в соответствии с конфигурацией запуска. Средство поиска исходного пути, подобно средству поиска исходного кода, имеет идентификатор, может быть поставлено в соответствие типу конфигурации запуска или ассоциировано программными средствами, путем указания атрибута ISourceLocator.ATTR_SOURCE_PATH_COMPUTER_ID для конфигурации запуска. Идентификатор средства поиска пути связан с реализующим средство классом через точку расширения org.eclipse.debug.core.sourcePathComputers Ниже приведен пример определения средства поиска пути к исходному тексту Java, используемому в 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>
 	...

Средством поиска пути формируется массив объектов типа ISourceContainer, который описывает путь поиска. Например, средством поиска пути к исходным текстам Java при создании массива учитывается переменная classpath.

Типы контейнеров исходного текста

Контейнерами, указанными в качестве пути поиска исходных текстов, должен быть реализован ISourceContainer, способный осуществлять поиск в контейнерах, соответствующих именованным элементам исходного текста. Иногда требуется представлять различные типы областей исходного кода различными типами контейнеров исходного кода. Например, в JDT определены контейнеры исходного кода, представляющие исходный текст проекта Java, исходный код в пути класса (описывается переменной classpath) и исходный код фрагмента группы. Конфигурация запуска может сохранять идентификаторы используемых контейнеров. Конфигурации запуска можно сохранять, поэтому должен существовать способ поставить в соответствие идентификатору контейнера исходного кода Since launch configurations can be persisted, there must be a way to associate the the id of a source container класс реализации. Для этого применяется точка расширения org.eclipse.debug.core.sourceContainerTypes. Вот пример из 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>
	...