blob: 5eb45964a6e07adda3eb5e68481f9c1107e4225e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.core.sourcelookup;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
/**
* A source lookup director directs the source lookup process
* among a set of participants and source containers.
* <p>
* Clients may implement this interface. An abstract implementation
* is provided by <code>AbstractSourceLookupDirector</code>, which
* clients should subclass.
* </p>
* @since 3.0
*/
public interface ISourceLookupDirector extends IPersistableSourceLocator2 {
/**
* Returns the launch configuration associated with this source
* lookup director, or <code>null</code> if none.
*
* @return the launch configuration associated with this source
* lookup director, or <code>null</code> if none
*/
public ILaunchConfiguration getLaunchConfiguration();
/**
* Returns the source lookup participants currently registered with
* this director, possibly an empty collection.
*
* @return the source lookup participants currently registered with
* this director, possibly an empty collection
*/
public ISourceLookupParticipant[] getParticipants();
/**
* Returns the source containers currently registered with this
* director, possibly an empty collection.
*
* @return the source containers currently registered with this
* director, possibly an empty collection
*/
public ISourceContainer[] getSourceContainers();
/**
* Sets the source containers this source lookup director
* should search when looking for source, possibly an empty collection.
*
* @param containers the source containers this source lookup director
* should search when looking for source, possibly an empty collection
*/
public void setSourceContainers(ISourceContainer[] containers);
/**
* Returns whether to search exhaustively for all source elements
* with the same name in all registered source containers, or
* whether to stop searching when the first source element matching
* the required name is found.
*
* @return whether to search exhaustively for all source elements
* with the same name
*/
public boolean isFindDuplicates();
/**
* Sets whether to search exhaustively for all source elements
* with the same name in all registered source containers, or
* whether to stop searching when the first source element matching
* the required name is found.
*
* @param findDuplicates whether to search exhaustively for all source elements
* with the same name
*/
public void setFindDuplicates(boolean findDuplicates);
/**
* Notifies this source lookup director that it should initialize
* its set of source lookup participants.
*/
public void initializeParticipants();
/**
* Returns whether this source director supports the given type
* of source location.
*
* @param type source container type
* @return whether this source director supports the given type
* of source location
*/
public boolean supportsSourceContainerType(ISourceContainerType type);
/**
* Clears any source lookup results associated with the given
* debug artifact, such that a subsequent lookup will force a new search
* to be performed.
*
* @param element debug artifact to clear source lookup results for
*/
public void clearSourceElements(Object element);
/**
* Adds the given source lookup participants to this director.
*
* @param participants participants to add
*/
public void addParticipants(ISourceLookupParticipant[] participants);
/**
* Removes the given source lookup participants from this director.
*
* @param participants participants to remove
*/
public void removeParticipants(ISourceLookupParticipant[] participants);
/**
* Returns the identifier of this type of source locator.
*
* @return the identifier of this type of source locator
*/
public String getId();
/**
* Returns the source path computer to use with this source lookup
* director, possibly <code>null</code>. By default, the source path
* computer returned is the one associated with this director's launch
* configuration's type. However, the source path computer can be specified
* programmatically by calling <code>setSourcePathComputer(...)</code>.
*
* @return the source path computer to use with this source lookup
* director, possibly <code>null</code>
*/
public ISourcePathComputer getSourcePathComputer();
/**
* Sets the source path computer for this source lookup director.
* This method can be used to override the default source path computer
* for a launch configuration type. When <code>null</code> is specified
* the default source path computer will be used (i.e. the one associated
* with this director's launch configuration's type).
*
* @param computer source path computer or <code>null</code>
*/
public void setSourcePathComputer(ISourcePathComputer computer);
/**
* Returns a collection of source elements corresponding to the given debug
* artifact (for example, a stack frame or breakpoint). Returns an empty
* collection if no source elements are found.
* This participant's source lookup director specifies if duplicate
* source elements should be searched for, via <code>isFindDuplicates()</code>.
* When <code>false</code> the returned collection should contain at most one
* source element.
*
* @param object the debug artifact for which source needs to be found (e.g., stack frame)
* @return a collection of source elements corresponding to the given
* debug artifact, possibly empty
* @exception CoreException if an exception occurs while searching for source
*/
public Object[] findSourceElements(Object object) throws CoreException;
/**
* Returns a source element that corresponds to the given debug artifact, or
* <code>null</code> if a source element could not be located. This is a
* generalization of <code>getSourceElement(IStackFrame)</code> to allow
* source to be found for other types of elements.
*
* @param element the debug artifact for which to locate source
* @return an object representing a source element.
*/
public Object getSourceElement(Object element);
}