Bij bepaalde soorten startwerkstanden kan het belangrijk zijn om de broncode op te vragen voor het huidige uitvoeringspunt in de code, met name bij het opsporen van fouten in programma's of het profileren van programma's. De foutopsporingsplugin biedt verschillende extensiepunten voor plugins om klassen te registreren waarmee u de broncode kunt lokaliseren.
ISourceLocator en IPersistableSourceLocator definiëren interfaces om een programma dat wordt uitgevoerd terug te koppelen aan de broncode.
Bronzoekers worden gewoonlijk geïmplementeerd om samen te werken met de desbetreffende startconfiguratie en de bijbehorende gedelegeerde voor die startconfiguratie. U kunt een bronzoeker-ID opgeven bij het definiëren van het type startconfiguratie, maar u kunt het ID ook programmatisch aan een startconfiguratie koppelen met het kenmerk ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID. In beide gevallen moet op een gegeven moment het ID van een bronzoeker voor een configuratie worden omgezet naar de klasse die IPersistableSourceLocator daadwerkelijk implementeert. De koppeling tussen een bronzoeker-ID en de bijbehorende klasse wordt tot stand gebracht met het extensiepunt org.eclipse.debug.core.sourceLocators.
De volgende markup komt uit de Java-toolkit:
<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>
Omdat startconfiguraties niet persistent kunnen worden gemaakt, worden bronzoeker-ID's opgeslagen met de startconfiguratie. Wanneer het tijd is om een bronzoeker te instantiëren, wordt door de foutopsporingsplugin het bronzoeker-ID opgezocht en de bijbehorende klasse geïnstantieerd.
De implementatie voor het opzoeken van broncode is afhankelijk van het type programma dat wordt gestart. Het platform omvat echter een abstracte implementatie voor een bronzoeker voor het ophalen van bronbestanden op een gegeven pad, zoals directory's, ZIP-bestanden, JAR-bestanden, enzovoort. Als u gebruik wilt maken van deze implementatie, moet u uw plugin uitbreiden met AbstractSourceLookupDirector. Het enige waaraan de specifieke implementatie moet voldoen, is de functionaliteit om een geschikte ISourceLookupParticipant aan te leveren, waarmee een stackframe aan een bestandsnaam kan worden gekoppeld. Zie de extenders van AbstractSourceLookupDirector voor een aantal voorbeelden.
Met AbstractSourceLookupDirector kunt u zoeken naar bronbestanden met behulp van een bepaald broncodezoekpad. Dit pad wordt uitgedrukt als een array van ISourceContainer. De broncontainers waarin naar broncode moet worden gezocht, worden gewoonlijk berekend op basis van de eigenschappen van de bronconfiguratie die wordt gestart. ISourcePathComputer is de interface voor een object waarmee het juiste bronpad voor een startconfiguratie wordt berekend. Een bronpadberekeningsmethode wordt, net als een bronzoeker, gedefinieerd met een ID, en kan worden opgegeven in de extensiedefinitie voor een startconfiguratietype of programmatisch worden gekoppeld door het kenmerk ISourceLocator.ATTR_SOURCE_PATH_COMPUTER_ID voor de startconfiguratie in te stellen. Het ID voor een bronzoekberekeningsmethode is gekoppeld aan de bijbehorende implementerende klasse in het extensiepunt org.eclipse.debug.core.sourcePathComputers. In de volgende markup ziet u de definitie die in JDT is gebruikt voor de Java-bronpadberekeningsmethode:
<extension point="org.eclipse.debug.core.sourcePathComputers"> <sourcePathComputer id="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer" class="org.eclipse.jdt.launching.sourcelookup.containers.JavaSourcePathComputer"> </sourcePathComputer> ...
De bronpadberekeningsmethode is verantwoordelijk voor de berekening van een array van ISourceContainer, die het bronzoekpad vertegenwoordigt. Bij de bouw van het pad wordt door de Java-bronpadberekeningsmethode bijvoorbeeld rekening gehouden met het klassenpad.
De containers die worden opgegeven als onderdeel van een bronzoekpad moeten ISourceContainer implementeren, waarmee de desbetreffende container kan worden doorzocht op een benoemd bronelement. Mogelijk hebt u verschillende soorten broncontainers nodig om alle verschillende soorten broncodeopslaglocaties aan te geven. Zo zijn er in JDT broncontainers voor broncode in een Java-project, broncode in het klassenpad en broncode in een pakketfragment. De broncontainers die worden gebruikt voor een startconfiguratie kunnen op ID worden opgeslagen in de startconfiguratie. Omdat startconfiguraties persistent kunnen worden gemaakt, moet het ID van een broncontainer worden gekoppeld aan de bijbehorende implementatieklasse. Hiertoe gebruikt u het extensiepunt org.eclipse.debug.core.sourceContainerTypes. Het volgende voorbeeld komt uit 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> ...