1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-09 09:15:38 +02:00

Implementation of source locator.

This commit is contained in:
Mikhail Khodjaiants 2002-09-23 22:44:54 +00:00
parent 941618eaca
commit 2e5306c7b2
6 changed files with 106 additions and 53 deletions

View file

@ -6,19 +6,14 @@
package org.eclipse.cdt.debug.core; package org.eclipse.cdt.debug.core;
import java.text.MessageFormat;
import java.util.HashMap; import java.util.HashMap;
import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDILocation; import org.eclipse.cdt.debug.core.cdi.ICDILocation;
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.ICDIExpression;
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; 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.CLineBreakpoint;
import org.eclipse.cdt.debug.internal.core.breakpoints.CWatchpoint; import org.eclipse.cdt.debug.internal.core.breakpoints.CWatchpoint;
import org.eclipse.cdt.debug.internal.core.model.CDebugElement;
import org.eclipse.cdt.debug.internal.core.model.CDebugTarget; import org.eclipse.cdt.debug.internal.core.model.CDebugTarget;
import org.eclipse.cdt.debug.internal.core.model.CExpression; import org.eclipse.cdt.debug.internal.core.model.CExpression;
import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IMarker;
@ -98,17 +93,6 @@ public class CDebugModel
{ {
final IDebugTarget[] target = new IDebugTarget[1]; final IDebugTarget[] target = new IDebugTarget[1];
// Temporary
try
{
ICDISourceManager mgr = cdiTarget.getSession().getSourceManager();
mgr.addSourcePaths( new String[] { project.getLocation().toOSString() });
}
catch( CDIException e )
{
CDebugCorePlugin.log( e );
}
IWorkspaceRunnable r = new IWorkspaceRunnable() IWorkspaceRunnable r = new IWorkspaceRunnable()
{ {
public void run( IProgressMonitor m ) public void run( IProgressMonitor m )

View file

@ -116,7 +116,9 @@ public class CDirectorySourceLocation implements ICSourceLocation
private Object findFileByRelativePath( String fileName ) private Object findFileByRelativePath( String fileName )
{ {
IPath path = getDirectory(); IPath path = getDirectory();
path.append( fileName ); if ( path != null )
{
path = path.append( fileName );
// Try for a file in another workspace project // Try for a file in another workspace project
IFile f = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation( path ); IFile f = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation( path );
@ -130,6 +132,7 @@ public class CDirectorySourceLocation implements ICSourceLocation
{ {
return createExternalFileStorage( path ); return createExternalFileStorage( path );
} }
}
return null; return null;
} }
@ -137,4 +140,12 @@ public class CDirectorySourceLocation implements ICSourceLocation
{ {
return new FileStorage( path ); return new FileStorage( path );
} }
/**
* @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation#getPaths()
*/
public IPath[] getPaths()
{
return new IPath[] { fDirectory };
}
} }

View file

@ -5,6 +5,8 @@
*/ */
package org.eclipse.cdt.debug.core.sourcelookup; package org.eclipse.cdt.debug.core.sourcelookup;
import java.io.File;
import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
@ -41,17 +43,11 @@ public class CProjectSourceLocation implements ICSourceLocation
{ {
if ( getProject() != null ) if ( getProject() != null )
{ {
IPath path = new Path( name ); File file = new File( name );
String fileName = path.toOSString(); if ( file.isAbsolute() )
return findFileByAbsolutePath( name );
String pPath = new String( getProject().getLocation().toOSString() ); else
int i = 0; return findFileByRelativePath( name );
if ( (i = fileName.indexOf( pPath )) >= 0 )
{
i += pPath.length() + 1;
if ( fileName.length() > i )
return getProject().getFile( fileName.substring( i ) );
}
} }
return null; return null;
} }
@ -112,4 +108,38 @@ public class CProjectSourceLocation implements ICSourceLocation
} }
return null; return null;
} }
private Object findFileByAbsolutePath( String name )
{
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;
}
private Object findFileByRelativePath( String fileName )
{
return getProject().getFile( fileName );
}
/**
* @see org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation#getPaths()
*/
public IPath[] getPaths()
{
IPath[] result = new IPath[0];
if ( getProject() != null )
{
result = new IPath[] { getProject().getLocation() };
}
return result;
}
} }

View file

@ -4,15 +4,12 @@
* *
*/ */
package org.eclipse.cdt.debug.internal.core; package org.eclipse.cdt.debug.core.sourcelookup;
import java.util.ArrayList; import java.util.ArrayList;
import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.CDebugCorePlugin;
import org.eclipse.cdt.debug.core.IStackFrameInfo; 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.cdt.debug.internal.core.model.*;
import org.eclipse.core.internal.resources.File; import org.eclipse.core.internal.resources.File;
import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IContainer;

View file

@ -7,6 +7,7 @@ package org.eclipse.cdt.debug.core.sourcelookup;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
/** /**
* *
@ -35,4 +36,11 @@ public interface ICSourceLocation extends IAdaptable
* @exception CoreException if an exception occurs while searching for the specified source element * @exception CoreException if an exception occurs while searching for the specified source element
*/ */
Object findSourceElement( String name ) throws CoreException; Object findSourceElement( String name ) throws CoreException;
/**
* Returns the paths associated with this location.
*
* @return the paths associated with this location
*/
IPath[] getPaths();
} }

View file

@ -7,7 +7,6 @@ package org.eclipse.cdt.debug.internal.core.model;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -35,6 +34,7 @@ import org.eclipse.cdt.debug.core.cdi.ICDILocation;
import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject; import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject;
import org.eclipse.cdt.debug.core.cdi.ICDISessionObject; import org.eclipse.cdt.debug.core.cdi.ICDISessionObject;
import org.eclipse.cdt.debug.core.cdi.ICDISignal; import org.eclipse.cdt.debug.core.cdi.ICDISignal;
import org.eclipse.cdt.debug.core.cdi.ICDISourceManager;
import org.eclipse.cdt.debug.core.cdi.ICDIWatchpointScope; import org.eclipse.cdt.debug.core.cdi.ICDIWatchpointScope;
import org.eclipse.cdt.debug.core.cdi.ICDIWatchpointTrigger; import org.eclipse.cdt.debug.core.cdi.ICDIWatchpointTrigger;
import org.eclipse.cdt.debug.core.cdi.event.ICDIChangedEvent; import org.eclipse.cdt.debug.core.cdi.event.ICDIChangedEvent;
@ -53,16 +53,15 @@ 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.ICDITarget;
import org.eclipse.cdt.debug.core.cdi.model.ICDIThread; import org.eclipse.cdt.debug.core.cdi.model.ICDIThread;
import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint; import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint;
import org.eclipse.cdt.debug.core.sourcelookup.CDirectorySourceLocation; import org.eclipse.cdt.debug.core.sourcelookup.CSourceLocator;
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation; import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation;
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator; 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.cdt.debug.internal.core.breakpoints.CBreakpoint;
import org.eclipse.core.resources.IMarkerDelta; import org.eclipse.core.resources.IMarkerDelta;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.IPath;
import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.DebugPlugin;
@ -235,6 +234,7 @@ public class CDebugTarget extends CDebugElement
protected void initialize() protected void initialize()
{ {
initializeState(); initializeState();
setSourceSearchPath();
initializeBreakpoints(); initializeBreakpoints();
initializeRegisters(); initializeRegisters();
getLaunch().addDebugTarget( this ); getLaunch().addDebugTarget( this );
@ -1844,10 +1844,33 @@ public class CDebugTarget extends CDebugElement
protected ISourceLocator createSourceLocator( IProject project ) protected ISourceLocator createSourceLocator( IProject project )
{ {
CSourceLocator locator = new CSourceLocator( project ); return 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()] ) ); protected void setSourceSearchPath()
return locator; {
ICDISourceManager mgr = getCDISession().getSourceManager();
ISourceLocator locator = getLaunch().getSourceLocator();
ArrayList list = new ArrayList();
if ( locator != null && locator instanceof ICSourceLocator )
{
ICSourceLocation[] locations = ((ICSourceLocator)locator).getSourceLocations();
for ( int i = 0; i < locations.length; ++i )
{
IPath[] paths = locations[i].getPaths();
for ( int j = 0; j < paths.length; ++j )
{
list.add( paths[j].toOSString() );
}
}
}
try
{
mgr.addSourcePaths( (String[])list.toArray( new String[list.size()] ) );
}
catch( CDIException e )
{
CDebugCorePlugin.log( e );
}
} }
} }