mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 22:52:11 +02:00
Implementation of source locator.
This commit is contained in:
parent
d6563a382b
commit
0c9fd43286
11 changed files with 455 additions and 162 deletions
|
@ -3,8 +3,9 @@
|
|||
<classpathentry kind="src" path="src/"/>
|
||||
<classpathentry kind="src" path="/org.eclipse.core.resources"/>
|
||||
<classpathentry kind="src" path="/org.eclipse.debug.core"/>
|
||||
<classpathentry kind="src" path="/org.eclipse.cdt.core"/>
|
||||
<classpathentry kind="src" path="/org.eclipse.core.runtime"/>
|
||||
<classpathentry kind="src" path="/org.eclipse.core.boot"/>
|
||||
<classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT/" sourcepath="JRE_SRC"/>
|
||||
<classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<name>org.eclipse.cdt.debug.core</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
<project>org.eclipse.cdt.core</project>
|
||||
<project>org.eclipse.core.boot</project>
|
||||
<project>org.eclipse.core.resources</project>
|
||||
<project>org.eclipse.core.runtime</project>
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
<requires>
|
||||
<import plugin="org.eclipse.core.resources"/>
|
||||
<import plugin="org.eclipse.debug.core"/>
|
||||
<import plugin="org.eclipse.cdt.core"/>
|
||||
</requires>
|
||||
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ import org.eclipse.cdt.debug.core.cdi.ICDISourceManager;
|
|||
import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIExpression;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
|
||||
import org.eclipse.cdt.debug.internal.core.CSourceLocator;
|
||||
import org.eclipse.cdt.debug.internal.core.breakpoints.CLineBreakpoint;
|
||||
import org.eclipse.cdt.debug.internal.core.breakpoints.CWatchpoint;
|
||||
import org.eclipse.cdt.debug.internal.core.model.CDebugElement;
|
||||
|
|
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
*(c) Copyright QNX Software Systems Ltd. 2002.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*/
|
||||
package org.eclipse.cdt.debug.core.sourcelookup;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import org.eclipse.cdt.core.resources.FileStorage;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IStorage;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
||||
/**
|
||||
*
|
||||
* Locates source elements in a directory in the local
|
||||
* file system. Returns instances of <code>FileStorage</code>.
|
||||
*
|
||||
* @since Sep 23, 2002
|
||||
*/
|
||||
public class CDirectorySourceLocation implements ICSourceLocation
|
||||
{
|
||||
/**
|
||||
* The directory associated with this source location
|
||||
*/
|
||||
private IPath fDirectory;
|
||||
|
||||
/**
|
||||
* Constructor for CDirectorySourceLocation.
|
||||
*/
|
||||
public CDirectorySourceLocation( IPath directory )
|
||||
{
|
||||
setDirectory( directory );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation#findSourceElement(String)
|
||||
*/
|
||||
public Object findSourceElement( String name ) throws CoreException
|
||||
{
|
||||
if ( getDirectory() != null )
|
||||
{
|
||||
File file = new File( name );
|
||||
if ( file.isAbsolute() )
|
||||
return findFileByAbsolutePath( name );
|
||||
else
|
||||
return findFileByRelativePath( name );
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
|
||||
*/
|
||||
public Object getAdapter( Class adapter )
|
||||
{
|
||||
if ( adapter.equals( ICSourceLocation.class ) )
|
||||
return this;
|
||||
if ( adapter.equals( CDirectorySourceLocation.class ) )
|
||||
return this;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the directory in which source elements will
|
||||
* be searched for.
|
||||
*
|
||||
* @param directory a directory
|
||||
*/
|
||||
private void setDirectory( IPath directory )
|
||||
{
|
||||
fDirectory = directory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the directory associated with this source
|
||||
* location.
|
||||
*
|
||||
* @return directory
|
||||
*/
|
||||
public IPath getDirectory()
|
||||
{
|
||||
return fDirectory;
|
||||
}
|
||||
|
||||
private Object findFileByAbsolutePath( String fileName )
|
||||
{
|
||||
IPath filePath = new Path( fileName );
|
||||
String name = filePath.lastSegment();
|
||||
filePath = filePath.removeLastSegments( 1 );
|
||||
IPath path = getDirectory();
|
||||
if ( path.equals( filePath ) )
|
||||
{
|
||||
path = path.append( name );
|
||||
|
||||
// Try for a file in another workspace project
|
||||
IFile f = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation( path );
|
||||
if ( f != null )
|
||||
{
|
||||
return f;
|
||||
}
|
||||
|
||||
File file = path.toFile();
|
||||
if ( file.exists() )
|
||||
{
|
||||
return createExternalFileStorage( path );
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private Object findFileByRelativePath( String fileName )
|
||||
{
|
||||
IPath path = getDirectory();
|
||||
path.append( fileName );
|
||||
|
||||
// Try for a file in another workspace project
|
||||
IFile f = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation( path );
|
||||
if ( f != null )
|
||||
{
|
||||
return f;
|
||||
}
|
||||
|
||||
File file = path.toFile();
|
||||
if ( file.exists() )
|
||||
{
|
||||
return createExternalFileStorage( path );
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private IStorage createExternalFileStorage( IPath path )
|
||||
{
|
||||
return new FileStorage( path );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,115 @@
|
|||
/*
|
||||
*(c) Copyright QNX Software Systems Ltd. 2002.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*/
|
||||
package org.eclipse.cdt.debug.core.sourcelookup;
|
||||
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
||||
/**
|
||||
*
|
||||
* Locates source elements in a Java project. Returns instances of <code>IFile</code>.
|
||||
*
|
||||
* @since Sep 23, 2002
|
||||
*/
|
||||
public class CProjectSourceLocation implements ICSourceLocation
|
||||
{
|
||||
/**
|
||||
* The project associated with this source location
|
||||
*/
|
||||
private IProject fProject;
|
||||
|
||||
/**
|
||||
* Constructor for CProjectSourceLocation.
|
||||
*/
|
||||
public CProjectSourceLocation( IProject project )
|
||||
{
|
||||
setProject( project );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation#findSourceElement(String)
|
||||
*/
|
||||
public Object findSourceElement( String name ) throws CoreException
|
||||
{
|
||||
if ( getProject() != null )
|
||||
{
|
||||
IPath path = new Path( name );
|
||||
String fileName = path.toOSString();
|
||||
|
||||
String pPath = new String( getProject().getLocation().toOSString() );
|
||||
int i = 0;
|
||||
if ( (i = fileName.indexOf( pPath )) >= 0 )
|
||||
{
|
||||
i += pPath.length() + 1;
|
||||
if ( fileName.length() > i )
|
||||
return getProject().getFile( fileName.substring( i ) );
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
|
||||
*/
|
||||
public Object getAdapter( Class adapter )
|
||||
{
|
||||
if ( adapter.equals( ICSourceLocation.class ) )
|
||||
return this;
|
||||
if ( adapter.equals( CProjectSourceLocation.class ) )
|
||||
return this;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the project in which source elements will be searched for.
|
||||
*
|
||||
* @param project the project
|
||||
*/
|
||||
private void setProject( IProject project )
|
||||
{
|
||||
fProject = project;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the project associated with this source location.
|
||||
*
|
||||
* @return project
|
||||
*/
|
||||
public IProject getProject()
|
||||
{
|
||||
return fProject;
|
||||
}
|
||||
|
||||
private IFile findFile( IContainer parent, IPath name ) throws CoreException
|
||||
{
|
||||
if ( name.isAbsolute() )
|
||||
{
|
||||
if ( name.toOSString().startsWith( parent.getLocation().toOSString() ) )
|
||||
{
|
||||
name = new Path( name.toOSString().substring( parent.getLocation().toOSString().length() + 1 ) );
|
||||
}
|
||||
}
|
||||
IResource found = parent.findMember( name );
|
||||
if ( found != null && found.getType() == IResource.FILE )
|
||||
{
|
||||
return (IFile)found;
|
||||
}
|
||||
IResource[] children= parent.members();
|
||||
for ( int i= 0; i < children.length; i++ )
|
||||
{
|
||||
if ( children[i] instanceof IContainer )
|
||||
{
|
||||
return findFile( (IContainer)children[i], name );
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
*(c) Copyright QNX Software Systems Ltd. 2002.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*/
|
||||
package org.eclipse.cdt.debug.core.sourcelookup;
|
||||
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IAdaptable;
|
||||
|
||||
/**
|
||||
*
|
||||
* A source location defines the location of a repository
|
||||
* of source code. A source location is capable of retrieving
|
||||
* source elements.
|
||||
* <p>
|
||||
* For example, a source location could be a project, zip/archive
|
||||
* file, or a directory in the file system.
|
||||
* </p>
|
||||
*
|
||||
* @since Sep 23, 2002
|
||||
*/
|
||||
public interface ICSourceLocation extends IAdaptable
|
||||
{
|
||||
/**
|
||||
* Returns an object representing the source code
|
||||
* for a type with the specified name, or <code>null</code>
|
||||
* if none could be found. The source element
|
||||
* returned is implementation specific - for example, a
|
||||
* resource, a local file, a zip file entry, etc.
|
||||
*
|
||||
* @param name the name of the object for which source is being searched for
|
||||
*
|
||||
* @return source element
|
||||
* @exception CoreException if an exception occurs while searching for the specified source element
|
||||
*/
|
||||
Object findSourceElement( String name ) throws CoreException;
|
||||
}
|
|
@ -3,11 +3,13 @@
|
|||
* All Rights Reserved.
|
||||
*
|
||||
*/
|
||||
package org.eclipse.cdt.debug.core;
|
||||
package org.eclipse.cdt.debug.core.sourcelookup;
|
||||
|
||||
import org.eclipse.cdt.debug.core.IStackFrameInfo;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.debug.core.DebugException;
|
||||
import org.eclipse.debug.core.model.ISourceLocator;
|
||||
|
||||
|
@ -77,10 +79,16 @@ public interface ICSourceLocator extends ISourceLocator
|
|||
Object getSourceElementForAddress( long address );
|
||||
|
||||
/**
|
||||
* Returns whether the given resource is contained in this source locator.
|
||||
* Returns the source locations of this locator.
|
||||
*
|
||||
* @param resource the resource
|
||||
* @return whether the given resource is contained in this source locator
|
||||
* @return the source locations of this locator
|
||||
*/
|
||||
boolean contains( IResource resource );
|
||||
ICSourceLocation[] getSourceLocations();
|
||||
|
||||
/**
|
||||
* Sets the source locations of this locator.
|
||||
*
|
||||
* @param location - an array of source locations
|
||||
*/
|
||||
void setSourceLocations( ICSourceLocation[] locations );
|
||||
}
|
|
@ -6,9 +6,13 @@
|
|||
|
||||
package org.eclipse.cdt.debug.internal.core;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
|
||||
import org.eclipse.cdt.debug.core.ICSourceLocator;
|
||||
import org.eclipse.cdt.debug.core.IStackFrameInfo;
|
||||
import org.eclipse.cdt.debug.core.sourcelookup.CProjectSourceLocation;
|
||||
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation;
|
||||
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator;
|
||||
import org.eclipse.cdt.debug.internal.core.model.*;
|
||||
import org.eclipse.core.internal.resources.File;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
|
@ -30,14 +34,9 @@ import org.eclipse.debug.core.model.IStackFrame;
|
|||
public class CSourceLocator implements ICSourceLocator
|
||||
{
|
||||
/**
|
||||
* The project in which to look for source.
|
||||
* The array of source locations associated with this locator.
|
||||
*/
|
||||
private IProject fProject;
|
||||
|
||||
/**
|
||||
* The debug target this source locator is associated with.
|
||||
*/
|
||||
private CDebugTarget fTarget;
|
||||
private ICSourceLocation[] fSourceLocations;
|
||||
|
||||
/**
|
||||
* The source presentation mode.
|
||||
|
@ -49,10 +48,17 @@ public class CSourceLocator implements ICSourceLocator
|
|||
/**
|
||||
* Constructor for CSourceLocator.
|
||||
*/
|
||||
public CSourceLocator( CDebugTarget target, IProject project )
|
||||
public CSourceLocator( IProject project )
|
||||
{
|
||||
fProject = project;
|
||||
fTarget = target;
|
||||
fSourceLocations = getDefaultSourceLocations( project );
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for CSourceLocator.
|
||||
*/
|
||||
public CSourceLocator( ICSourceLocation[] locations )
|
||||
{
|
||||
fSourceLocations = locations;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -129,12 +135,27 @@ public class CSourceLocator implements ICSourceLocator
|
|||
private Object getSourceInput( IStackFrameInfo info )
|
||||
{
|
||||
Object result = null;
|
||||
if ( info != null && fProject != null )
|
||||
if ( info != null )
|
||||
{
|
||||
setInternalMode( ICSourceLocator.MODE_SOURCE );
|
||||
String fileName = info.getFile();
|
||||
if ( fileName != null && fileName.length() > 0 )
|
||||
result = findFile( fProject, fileName );
|
||||
{
|
||||
ICSourceLocation[] locations = getSourceLocations();
|
||||
for ( int i = 0; i < locations.length; ++i )
|
||||
{
|
||||
try
|
||||
{
|
||||
result = locations[i].findSourceElement( fileName );
|
||||
}
|
||||
catch( CoreException e )
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
if ( result != null )
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// switch to assembly mode if source file not found
|
||||
/*
|
||||
|
@ -144,84 +165,30 @@ public class CSourceLocator implements ICSourceLocator
|
|||
return result;
|
||||
}
|
||||
|
||||
private Object findFile( IProject project, String fileName )
|
||||
{
|
||||
IPath path = new Path( fileName );
|
||||
fileName = path.toOSString();
|
||||
|
||||
/*
|
||||
* We have a few possible cases: either we get a source file name with no path,
|
||||
* or we get a fully-qualified filename from the debugger.
|
||||
*/
|
||||
String pPath = new String( project.getLocation().toOSString() );
|
||||
int i;
|
||||
|
||||
if ( (i = fileName.indexOf( pPath )) >= 0 )
|
||||
{
|
||||
i += pPath.length() + 1;
|
||||
if ( fileName.length() > i )
|
||||
return project.getFile( fileName.substring( i ) );
|
||||
}
|
||||
// Then just do a search on our project, and if that fails, any dependent projects
|
||||
IFile f = null;
|
||||
try
|
||||
{
|
||||
f = findFile( (IContainer)project, path );
|
||||
if ( f != null )
|
||||
return f;
|
||||
if ( f == null )
|
||||
{
|
||||
IProject[] p = project.getReferencedProjects();
|
||||
for ( int j= 0; j < p.length; j++ )
|
||||
{
|
||||
if ( (f = findFile( (IContainer)p[j], new Path( fileName ) )) != null )
|
||||
{
|
||||
return f;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch( CoreException e )
|
||||
{
|
||||
}
|
||||
if ( f != null )
|
||||
return f;
|
||||
// Search for an external file
|
||||
// return findExternalFile( fileName );
|
||||
return null;
|
||||
}
|
||||
|
||||
private IFile findFile( IContainer parent, IPath name ) throws CoreException
|
||||
{
|
||||
if ( name.isAbsolute() )
|
||||
{
|
||||
if ( name.toOSString().startsWith( parent.getLocation().toOSString() ) )
|
||||
{
|
||||
name = new Path( name.toOSString().substring( parent.getLocation().toOSString().length() + 1 ) );
|
||||
}
|
||||
}
|
||||
IResource found = parent.findMember( name );
|
||||
if ( found != null && found.getType() == IResource.FILE )
|
||||
{
|
||||
return (IFile)found;
|
||||
}
|
||||
IResource[] children= parent.members();
|
||||
for ( int i= 0; i < children.length; i++ )
|
||||
{
|
||||
if ( children[i] instanceof IContainer )
|
||||
{
|
||||
return findFile( (IContainer)children[i], name );
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.ICSourceLocator#getSourceElement(String)
|
||||
*/
|
||||
public Object getSourceElement( String fileName )
|
||||
{
|
||||
return findFile( fProject, fileName );
|
||||
Object result = null;
|
||||
if ( fileName != null && fileName.length() > 0 )
|
||||
{
|
||||
ICSourceLocation[] locations = getSourceLocations();
|
||||
for ( int i = 0; i < locations.length; ++i )
|
||||
{
|
||||
try
|
||||
{
|
||||
result = locations[i].findSourceElement( fileName );
|
||||
}
|
||||
catch( CoreException e )
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
if ( result != null )
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
@ -245,59 +212,77 @@ public class CSourceLocator implements ICSourceLocator
|
|||
*/
|
||||
public boolean contains( IResource resource )
|
||||
{
|
||||
if ( resource instanceof IProject )
|
||||
ICSourceLocation[] locations = getSourceLocations();
|
||||
for ( int i = 0; i < locations.length; ++i )
|
||||
{
|
||||
if ( fProject.equals( resource ) )
|
||||
if ( resource instanceof IProject )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
IProject[] projects = getReferencedProjects();
|
||||
for ( int i = 0; i < projects.length; ++i )
|
||||
{
|
||||
if ( projects[i].equals( resource ) )
|
||||
if ( locations[i] instanceof CProjectSourceLocation &&
|
||||
((CProjectSourceLocation)locations[i]).equals( resource ) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if ( resource instanceof IFile )
|
||||
{
|
||||
return containsFile( resource.getLocation() );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected IProject[] getReferencedProjects()
|
||||
{
|
||||
IProject[] projects = new IProject[0];
|
||||
try
|
||||
{
|
||||
projects = fProject.getReferencedProjects();
|
||||
}
|
||||
catch( CoreException e )
|
||||
{
|
||||
CDebugCorePlugin.log( e );
|
||||
}
|
||||
return projects;
|
||||
}
|
||||
|
||||
protected boolean containsFile( IPath path )
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( findFile( (IContainer)fProject, path ) != null )
|
||||
return true;
|
||||
IProject[] p = fProject.getReferencedProjects();
|
||||
for ( int j= 0; j < p.length; j++ )
|
||||
if ( resource instanceof IFile )
|
||||
{
|
||||
if ( findFile( (IContainer)p[j], path ) != null )
|
||||
return true;
|
||||
try
|
||||
{
|
||||
if ( locations[i].findSourceElement( resource.getLocation().toOSString() ) != null )
|
||||
return true;
|
||||
}
|
||||
catch( CoreException e )
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
catch( CoreException e )
|
||||
{
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator#getSourceLocations()
|
||||
*/
|
||||
public ICSourceLocation[] getSourceLocations()
|
||||
{
|
||||
return fSourceLocations;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator#setSourceLocations(ICSourceLocation[])
|
||||
*/
|
||||
public void setSourceLocations( ICSourceLocation[] locations )
|
||||
{
|
||||
fSourceLocations = locations;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a default collection of source locations for
|
||||
* the given project. Default source locations consist
|
||||
* of the given project and all of its referenced projects .
|
||||
*
|
||||
* @param project a project
|
||||
* @return a collection of source locations for all required
|
||||
* projects
|
||||
* @exception CoreException
|
||||
*/
|
||||
public static ICSourceLocation[] getDefaultSourceLocations( IProject project )
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
if ( project != null )
|
||||
{
|
||||
try
|
||||
{
|
||||
IProject[] projects = project.getReferencedProjects();
|
||||
list.add( new CProjectSourceLocation( project ) );
|
||||
for ( int i = 0; i < projects.length; i++ )
|
||||
{
|
||||
list.add( new CProjectSourceLocation( projects[i] ) );
|
||||
}
|
||||
}
|
||||
catch( CoreException e )
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
return (ICSourceLocation[])list.toArray( new ICSourceLocation[list.size()] );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ package org.eclipse.cdt.debug.internal.core.model;
|
|||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
@ -16,7 +17,6 @@ import org.eclipse.cdt.debug.core.CDebugModel;
|
|||
import org.eclipse.cdt.debug.core.ICBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.ICExpressionEvaluator;
|
||||
import org.eclipse.cdt.debug.core.ICLineBreakpoint;
|
||||
import org.eclipse.cdt.debug.core.ICSourceLocator;
|
||||
import org.eclipse.cdt.debug.core.ICWatchpoint;
|
||||
import org.eclipse.cdt.debug.core.IFormattedMemoryBlock;
|
||||
import org.eclipse.cdt.debug.core.IFormattedMemoryRetrieval;
|
||||
|
@ -53,12 +53,16 @@ import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
|
|||
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIThread;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint;
|
||||
import org.eclipse.cdt.debug.core.sourcelookup.CDirectorySourceLocation;
|
||||
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation;
|
||||
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator;
|
||||
import org.eclipse.cdt.debug.internal.core.CSourceLocator;
|
||||
import org.eclipse.cdt.debug.internal.core.breakpoints.CBreakpoint;
|
||||
import org.eclipse.core.resources.IMarkerDelta;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.debug.core.DebugEvent;
|
||||
import org.eclipse.debug.core.DebugException;
|
||||
import org.eclipse.debug.core.DebugPlugin;
|
||||
|
@ -176,11 +180,6 @@ public class CDebugTarget extends CDebugElement
|
|||
*/
|
||||
private int fSuspendCount = 0;
|
||||
|
||||
/**
|
||||
* The source locator for this target.
|
||||
*/
|
||||
private ICSourceLocator fSourceLocator = null;
|
||||
|
||||
/**
|
||||
* Collection of breakpoints added to this target. Values are of type <code>ICBreakpoint</code>.
|
||||
*/
|
||||
|
@ -216,11 +215,12 @@ public class CDebugTarget extends CDebugElement
|
|||
setCDITarget( cdiTarget );
|
||||
setBreakpoints( new HashMap( 5 ) );
|
||||
setTemporaryBreakpoints( new ArrayList() );
|
||||
// Temporary
|
||||
getLaunch().setSourceLocator( createSourceLocator( project ) );
|
||||
|
||||
setConfiguration( cdiTarget.getSession().getConfiguration() );
|
||||
fSupportsTerminate = allowsTerminate & getConfiguration().supportsTerminate();
|
||||
fSupportsDisconnect = allowsDisconnect & getConfiguration().supportsDisconnect();
|
||||
fSourceLocator = createSourceLocator( project );
|
||||
launch.setSourceLocator( fSourceLocator );
|
||||
setThreadList( new ArrayList( 5 ) );
|
||||
initialize();
|
||||
DebugPlugin.getDefault().getLaunchManager().addLaunchListener( this );
|
||||
|
@ -355,9 +355,9 @@ public class CDebugTarget extends CDebugElement
|
|||
if ( breakpoint instanceof ICBreakpoint )
|
||||
{
|
||||
ISourceLocator sl = getSourceLocator();
|
||||
if ( sl != null && sl instanceof ICSourceLocator )
|
||||
if ( sl != null && sl instanceof CSourceLocator )
|
||||
{
|
||||
return ((ICSourceLocator)sl).contains( breakpoint.getMarker().getResource() );
|
||||
return ((CSourceLocator)sl).contains( breakpoint.getMarker().getResource() );
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -1513,21 +1513,6 @@ public class CDebugTarget extends CDebugElement
|
|||
super.fireSuspendEvent( detail );
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the source locator for this target.
|
||||
*
|
||||
* @return the source locator for this target
|
||||
*/
|
||||
private ICSourceLocator createSourceLocator( IProject project )
|
||||
{
|
||||
return new CSourceLocator( this, project );
|
||||
}
|
||||
|
||||
protected ICSourceLocator getSourceLocator()
|
||||
{
|
||||
return fSourceLocator;
|
||||
}
|
||||
|
||||
protected void setCurrentThread()
|
||||
{
|
||||
ICDIThread currentCDIThread = null;
|
||||
|
@ -1851,4 +1836,18 @@ public class CDebugTarget extends CDebugElement
|
|||
targetRequestFailed( e.getMessage(), null );
|
||||
}
|
||||
}
|
||||
|
||||
protected ISourceLocator getSourceLocator()
|
||||
{
|
||||
return getLaunch().getSourceLocator();
|
||||
}
|
||||
|
||||
protected ISourceLocator createSourceLocator( IProject project )
|
||||
{
|
||||
CSourceLocator locator = new CSourceLocator( project );
|
||||
List list = Arrays.asList( locator.getSourceLocations() );
|
||||
list.add( new CDirectorySourceLocation( new Path( project.getLocation().toOSString() ) ) );
|
||||
locator.setSourceLocations( (ICSourceLocation[])list.toArray( new ICSourceLocation[list.size()] ) );
|
||||
return locator;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,8 +22,10 @@ import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener;
|
|||
import org.eclipse.cdt.debug.core.cdi.model.ICDIArgument;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
|
||||
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator;
|
||||
import org.eclipse.debug.core.DebugException;
|
||||
import org.eclipse.debug.core.model.IRegisterGroup;
|
||||
import org.eclipse.debug.core.model.ISourceLocator;
|
||||
import org.eclipse.debug.core.model.IStackFrame;
|
||||
import org.eclipse.debug.core.model.IThread;
|
||||
import org.eclipse.debug.core.model.IVariable;
|
||||
|
@ -177,7 +179,9 @@ public class CStackFrame extends CDebugElement
|
|||
{
|
||||
if ( isSuspended() )
|
||||
{
|
||||
return ((CDebugTarget)getDebugTarget()).getSourceLocator().getLineNumber( this );
|
||||
ISourceLocator locator = ((CDebugTarget)getDebugTarget()).getSourceLocator();
|
||||
if ( locator != null && locator instanceof ICSourceLocator )
|
||||
return ((ICSourceLocator)locator).getLineNumber( this );
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue