プログラムのソース・コードの取得

特定の種類の起動モードでは、コード内の現在の実行ポイントに対応するソース・コードを取得することが重要になる場合があります。 これは通常、プログラムのデバッグ時およびプロファイル作成時に重要です。 複数のさまざまな拡張ポイントが、ソース・コードの位置決めに役立つクラスを登録できるデバッグ・プラグインにより提供されます。

ソース・ロケーター

ISourceLocator および IPersistableSourceLocator により、実行中のプログラムからソース・コードへのマッピングのためのインターフェースが定義されます。

ソース・ロケーターは通常、対応する起動構成および起動構成代行を操作するよう実装されています。 ソース・ロケーター ID は、起動構成タイプの定義時に指定されるか、または ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID 属性を使用して、起動構成にプログラマチックに関連付けされます。 いずれの場合も、ある時点で、構成のソース・ロケーターの ID が、実際に IPersistableSourceLocator を実装するクラスに解決される必要があります。 ソース・ロケーター ID およびそのクラスの間の関連付けは、 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>

起動構成は永続できるため、ソース・ロケーター ID は、その起動構成に保管できます。 ソース・ロケーターをインスタンス化する場合には、デバッグ・プラグインはソース・ロケーター ID 属性を検索し、その ID に関連付けられたクラスをインスタンス化します。

ソース・ルックアップに必要な実装は、起動されているプログラムのタイプによって決まります。 ただし、プラットフォームにより、ディレクトリー、ZIP ファイル、および JAR ファイルなどを含む任意のパス上のソース・ファイルを検索するソース・ロケーターの要約実装が定義されます。 この実装の利点を活用するため、ご使用のプラグインは、 AbstractSourceLookupDirector を拡張することができます。 特定の実装で必要なものは、適切な ISourceLookupParticipant を提供する能力のみであり、これによりスタック・フレームをファイル名にマップできます。 例えば、AbstractSourceLookupDirector の拡張を参照してください。

ソース・パス・コンピューター

AbstractSourceLookupDirector は、特定のソース・コード・ルックアップ・パスに従って、ソース・ファイルを検索します。 このパスは、 ISourceContainer の配列として表現されます。 ソースが検索されるソース・コンテナーは、通常、起動されているソース構成の詳細に従って計算されます。ISourcePathComputer が、起動構成の適切なソース・パスを計算するオブジェクトのインターフェースを定義します。 ソース・パス・コンピューターは、ソース・ロケーターと同じように ID により指定され、起動構成タイプの拡張定義で指定可能であるか、または、起動構成に関して ISourceLocator.ATTR_SOURCE_PATH_COMPUTER_ID 属性を設定することによりプログラマチックに関連付けできます。 ソース・パス・コンピューターの ID は、org.eclipse.debug.core.sourcePathComputers 拡張ポイント内のその実装クラスに関連付けされます。 以下のマークアップには、JDT によりその 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>
 	...

ソース・パス・コンピューターは、ソース・ルックアップ・パスを表す ISourceContainer の配列の計算を担当します。 例えば、Java ソース・パス・コンピューターは、パスの構築時にクラスパスを考慮します。

ソース・コンテナー・タイプ

ソース・ルックアップ・パスの一部として指定されたコンテナーは、ISourceContainer を実装する必要があり、それにより名前付きソース・エレメントを表すコンテナーを検索できます。 ソース・コードが保管されているさまざまな種類のロケーションを表すためには、別々の種類のソース・コンテナーが必要になる場合があります。 例えば、JDT では、Java プロジェクト内のソース、クラスパスのソース、およびパッケージ・フラグメント内のソースを表すソース・コンテナーが定義されます。 起動構成に使用されるソース・コンテナーは、起動構成内の ID により保管されます。 起動構成は永続可能であるため、ソース・コンテナーの ID をその実装クラスに関連付ける方法が必要です。 これは、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> 
	...