mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-13 03:05:39 +02:00
Update the source search path of the underlyuing debugger when the source containers are changed.
This commit is contained in:
parent
9e7f365eba
commit
cd8ccc6b17
4 changed files with 143 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2005-04-25 Mikhail Khodjaiants
|
||||||
|
Update the source search path of the underlyuing debugger when the source
|
||||||
|
containers are changed.
|
||||||
|
+ ISourceLookupChangeListener.java
|
||||||
|
* CDebugTarget.java
|
||||||
|
* CSourceLookupParticipant.java
|
||||||
|
|
||||||
2005-04-27 Alain Magloire
|
2005-04-27 Alain Magloire
|
||||||
Change in the CDI interface
|
Change in the CDI interface
|
||||||
* cdi/org/eclipse/cdt/debug/core/cdi/model/ICDISourceManagent.java
|
* cdi/org/eclipse/cdt/debug/core/cdi/model/ICDISourceManagent.java
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* Copyright (c) 2004 QNX Software Systems and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Common Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/cpl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* QNX Software Systems - Initial API and implementation
|
||||||
|
***********************************************************************/
|
||||||
|
package org.eclipse.cdt.debug.core.sourcelookup;
|
||||||
|
|
||||||
|
import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A source lookup change listener is notified of changes in the source lookup path.
|
||||||
|
*/
|
||||||
|
public interface ISourceLookupChangeListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notification that the source lookup containers have changed.
|
||||||
|
*/
|
||||||
|
public void sourceContainersChanged( ISourceLookupDirector director );
|
||||||
|
}
|
|
@ -78,13 +78,16 @@ import org.eclipse.cdt.debug.core.model.IJumpToAddress;
|
||||||
import org.eclipse.cdt.debug.core.model.IJumpToLine;
|
import org.eclipse.cdt.debug.core.model.IJumpToLine;
|
||||||
import org.eclipse.cdt.debug.core.model.IRunToAddress;
|
import org.eclipse.cdt.debug.core.model.IRunToAddress;
|
||||||
import org.eclipse.cdt.debug.core.model.IRunToLine;
|
import org.eclipse.cdt.debug.core.model.IRunToLine;
|
||||||
|
import org.eclipse.cdt.debug.core.sourcelookup.CDirectorySourceContainer;
|
||||||
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator;
|
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator;
|
||||||
|
import org.eclipse.cdt.debug.core.sourcelookup.ISourceLookupChangeListener;
|
||||||
import org.eclipse.cdt.debug.internal.core.CBreakpointManager;
|
import org.eclipse.cdt.debug.internal.core.CBreakpointManager;
|
||||||
import org.eclipse.cdt.debug.internal.core.CGlobalVariableManager;
|
import org.eclipse.cdt.debug.internal.core.CGlobalVariableManager;
|
||||||
import org.eclipse.cdt.debug.internal.core.CMemoryBlockRetrievalExtension;
|
import org.eclipse.cdt.debug.internal.core.CMemoryBlockRetrievalExtension;
|
||||||
import org.eclipse.cdt.debug.internal.core.CRegisterManager;
|
import org.eclipse.cdt.debug.internal.core.CRegisterManager;
|
||||||
import org.eclipse.cdt.debug.internal.core.CSignalManager;
|
import org.eclipse.cdt.debug.internal.core.CSignalManager;
|
||||||
import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants;
|
import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants;
|
||||||
|
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupParticipant;
|
||||||
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceManager;
|
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceManager;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IMarkerDelta;
|
import org.eclipse.core.resources.IMarkerDelta;
|
||||||
|
@ -115,11 +118,16 @@ import org.eclipse.debug.core.model.IProcess;
|
||||||
import org.eclipse.debug.core.model.IRegisterGroup;
|
import org.eclipse.debug.core.model.IRegisterGroup;
|
||||||
import org.eclipse.debug.core.model.ISourceLocator;
|
import org.eclipse.debug.core.model.ISourceLocator;
|
||||||
import org.eclipse.debug.core.model.IThread;
|
import org.eclipse.debug.core.model.IThread;
|
||||||
|
import org.eclipse.debug.core.sourcelookup.ISourceContainer;
|
||||||
|
import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector;
|
||||||
|
import org.eclipse.debug.core.sourcelookup.ISourceLookupParticipant;
|
||||||
|
import org.eclipse.debug.core.sourcelookup.containers.FolderSourceContainer;
|
||||||
|
import org.eclipse.debug.core.sourcelookup.containers.ProjectSourceContainer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Debug target for C/C++ debug model.
|
* Debug target for C/C++ debug model.
|
||||||
*/
|
*/
|
||||||
public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEventListener, ILaunchListener, IExpressionListener {
|
public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEventListener, ILaunchListener, IExpressionListener, ISourceLookupChangeListener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Threads contained in this debug target.
|
* Threads contained in this debug target.
|
||||||
|
@ -243,6 +251,7 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void initialize() {
|
protected void initialize() {
|
||||||
|
initializeSourceLookupPath();
|
||||||
ArrayList debugEvents = new ArrayList( 1 );
|
ArrayList debugEvents = new ArrayList( 1 );
|
||||||
debugEvents.add( createCreateEvent() );
|
debugEvents.add( createCreateEvent() );
|
||||||
initializeThreads( debugEvents );
|
initializeThreads( debugEvents );
|
||||||
|
@ -329,6 +338,19 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void initializeSourceLookupPath() {
|
||||||
|
ISourceLocator locator = getLaunch().getSourceLocator();
|
||||||
|
if ( locator instanceof ISourceLookupDirector ) {
|
||||||
|
ISourceLookupParticipant[] participants = ((ISourceLookupDirector)locator).getParticipants();
|
||||||
|
for ( int i = 0; i < participants.length; ++i ) {
|
||||||
|
if ( participants[i] instanceof CSourceLookupParticipant ) {
|
||||||
|
((CSourceLookupParticipant)participants[i]).addSourceLookupChangeListener( this );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setSourceLookupPath( ((ISourceLookupDirector)locator).getSourceContainers() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void initializeModuleManager() {
|
protected void initializeModuleManager() {
|
||||||
getModuleManager().addModules( new ICModule[] { CModule.createExecutable( this, getExecFile().getPath() ) } );
|
getModuleManager().addModules( new ICModule[] { CModule.createExecutable( this, getExecFile().getPath() ) } );
|
||||||
}
|
}
|
||||||
|
@ -979,6 +1001,7 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
|
||||||
disposeRegisterManager();
|
disposeRegisterManager();
|
||||||
disposeDisassembly();
|
disposeDisassembly();
|
||||||
disposeSourceManager();
|
disposeSourceManager();
|
||||||
|
disposeSourceLookupPath();
|
||||||
disposeBreakpointManager();
|
disposeBreakpointManager();
|
||||||
removeAllExpressions();
|
removeAllExpressions();
|
||||||
disposePreferences();
|
disposePreferences();
|
||||||
|
@ -1574,6 +1597,18 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void disposeSourceLookupPath() {
|
||||||
|
ISourceLocator locator = getLaunch().getSourceLocator();
|
||||||
|
if ( locator instanceof ISourceLookupDirector ) {
|
||||||
|
ISourceLookupParticipant[] participants = ((ISourceLookupDirector)locator).getParticipants();
|
||||||
|
for ( int i = 0; i < participants.length; ++i ) {
|
||||||
|
if ( participants[i] instanceof CSourceLookupParticipant ) {
|
||||||
|
((CSourceLookupParticipant)participants[i]).removeSourceLookupChangeListener( this );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public IFile getCurrentBreakpointFile() {
|
public IFile getCurrentBreakpointFile() {
|
||||||
Object info = getCurrentStateInfo();
|
Object info = getCurrentStateInfo();
|
||||||
if ( info instanceof ICDIBreakpointHit ) {
|
if ( info instanceof ICDIBreakpointHit ) {
|
||||||
|
@ -1799,4 +1834,41 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv
|
||||||
CModuleManager mm = getModuleManager();
|
CModuleManager mm = getModuleManager();
|
||||||
mm.loadSymbolsForAll();
|
mm.loadSymbolsForAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sourceContainersChanged( ISourceLookupDirector director ) {
|
||||||
|
setSourceLookupPath( director.getSourceContainers() );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setSourceLookupPath( ISourceContainer[] containers ) {
|
||||||
|
ArrayList list = new ArrayList( containers.length );
|
||||||
|
getSourceLookupPath( list, containers );
|
||||||
|
try {
|
||||||
|
getCDITarget().setSourcePaths( (String[])list.toArray( new String[list.size()] ) );
|
||||||
|
}
|
||||||
|
catch( CDIException e ) {
|
||||||
|
CDebugCorePlugin.log( e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getSourceLookupPath( List list, ISourceContainer[] containers ) {
|
||||||
|
for ( int i = 0; i < containers.length; ++i ) {
|
||||||
|
if ( containers[i] instanceof ProjectSourceContainer ) {
|
||||||
|
list.add( ((ProjectSourceContainer)containers[i]).getProject().getLocation().toOSString() );
|
||||||
|
}
|
||||||
|
if ( containers[i] instanceof FolderSourceContainer ) {
|
||||||
|
list.add( ((FolderSourceContainer)containers[i]).getContainer().getLocation().toOSString() );
|
||||||
|
}
|
||||||
|
if ( containers[i] instanceof CDirectorySourceContainer ) {
|
||||||
|
list.add( ((CDirectorySourceContainer)containers[i]).getDirectory().getAbsolutePath() );
|
||||||
|
}
|
||||||
|
if ( containers[i].isComposite() ) {
|
||||||
|
try {
|
||||||
|
getSourceLookupPath( list, containers[i].getSourceContainers() );
|
||||||
|
}
|
||||||
|
catch( CoreException e ) {
|
||||||
|
CDebugCorePlugin.log( e.getStatus() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,12 +12,15 @@ package org.eclipse.cdt.debug.internal.core.sourcelookup;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import org.eclipse.cdt.debug.core.model.ICStackFrame;
|
import org.eclipse.cdt.debug.core.model.ICStackFrame;
|
||||||
|
import org.eclipse.cdt.debug.core.sourcelookup.ISourceLookupChangeListener;
|
||||||
|
import org.eclipse.cdt.debug.internal.core.ListenerList;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
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.Path;
|
import org.eclipse.core.runtime.Path;
|
||||||
import org.eclipse.debug.core.sourcelookup.AbstractSourceLookupParticipant;
|
import org.eclipse.debug.core.sourcelookup.AbstractSourceLookupParticipant;
|
||||||
|
import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector;
|
||||||
import org.eclipse.debug.core.sourcelookup.containers.LocalFileStorage;
|
import org.eclipse.debug.core.sourcelookup.containers.LocalFileStorage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -30,6 +33,16 @@ public class CSourceLookupParticipant extends AbstractSourceLookupParticipant {
|
||||||
|
|
||||||
private static final NoSourceElement gfNoSource = new NoSourceElement();
|
private static final NoSourceElement gfNoSource = new NoSourceElement();
|
||||||
|
|
||||||
|
private ListenerList fListeners;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for CSourceLookupParticipant.
|
||||||
|
*/
|
||||||
|
public CSourceLookupParticipant() {
|
||||||
|
super();
|
||||||
|
fListeners = new ListenerList( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.debug.core.sourcelookup.ISourceLookupParticipant#getSourceName(java.lang.Object)
|
* @see org.eclipse.debug.core.sourcelookup.ISourceLookupParticipant#getSourceName(java.lang.Object)
|
||||||
*/
|
*/
|
||||||
|
@ -80,4 +93,30 @@ public class CSourceLookupParticipant extends AbstractSourceLookupParticipant {
|
||||||
return wfiles;
|
return wfiles;
|
||||||
return new LocalFileStorage[] { new LocalFileStorage( file ) };
|
return new LocalFileStorage[] { new LocalFileStorage( file ) };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.debug.core.sourcelookup.AbstractSourceLookupParticipant#dispose()
|
||||||
|
*/
|
||||||
|
public void dispose() {
|
||||||
|
fListeners.removeAll();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addSourceLookupChangeListener( ISourceLookupChangeListener listener ) {
|
||||||
|
fListeners.add( listener );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeSourceLookupChangeListener( ISourceLookupChangeListener listener ) {
|
||||||
|
fListeners.remove( listener );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.debug.core.sourcelookup.AbstractSourceLookupParticipant#sourceContainersChanged(org.eclipse.debug.core.sourcelookup.ISourceLookupDirector)
|
||||||
|
*/
|
||||||
|
public void sourceContainersChanged( ISourceLookupDirector director ) {
|
||||||
|
Object[] listeners = fListeners.getListeners();
|
||||||
|
for ( int i = 0; i < listeners.length; ++i )
|
||||||
|
((ISourceLookupChangeListener)listeners[i]).sourceContainersChanged( director );
|
||||||
|
super.sourceContainersChanged( director );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue