From 2e36002edce86e99cb562eadca31ab1f0e03db02 Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Fri, 17 Jan 2003 00:15:12 +0000 Subject: [PATCH] Implementing the Shared Libraries view. --- debug/org.eclipse.cdt.debug.core/ChangeLog | 9 + .../debug/core/ICSharedLibraryManager.java | 28 ++ .../cdt/debug/core/model/ICSharedLibrary.java | 54 ++++ .../internal/core/CSharedLibraryManager.java | 136 ++++++++++ .../internal/core/model/CDebugElement.java | 2 +- .../internal/core/model/CDebugTarget.java | 39 +++ .../internal/core/model/CSharedLibrary.java | 112 ++++++++ debug/org.eclipse.cdt.debug.ui/ChangeLog | 14 + .../full/cview16/sharedlibraries_view.gif | Bin 0 -> 160 bytes .../full/eview16/sharedlibraries_view.gif | Bin 0 -> 160 bytes .../icons/full/obj16/sharedlibraryl_obj.gif | Bin 0 -> 160 bytes .../icons/full/obj16/sharedlibraryu_obj.gif | Bin 0 -> 168 bytes .../plugin.properties | 1 + debug/org.eclipse.cdt.debug.ui/plugin.xml | 15 +- .../cdt/debug/internal/ui/CDebugImages.java | 4 + .../internal/ui/ICDebugHelpContextIds.java | 1 + .../views/sharedlibs/SharedLibrariesView.java | 242 ++++++++++++++++++ .../SharedLibrariesViewContentProvider.java | 44 ++++ .../SharedLibrariesViewEventHandler.java | 52 ++++ 19 files changed, 749 insertions(+), 4 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICSharedLibrary.java create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CSharedLibraryManager.java create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSharedLibrary.java create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/cview16/sharedlibraries_view.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/eview16/sharedlibraries_view.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/obj16/sharedlibraryl_obj.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/obj16/sharedlibraryu_obj.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesView.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesViewContentProvider.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesViewEventHandler.java diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index 0216550f45f..72badb1d8bf 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,12 @@ +2003-01-16 Mikhail Khodjaiants + Implementing the Shared Libraries view. + * ICSharedLibrary.java + * ICSharedLibraryManager.java + * CDebugElement.java + * CDebugTarget.java + * CSharedLibrary.java + * CSharedLibraryManager.java + 2003-01-16 Mikhail Khodjaiants * ICDILoadedEvent.java: Removed. diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java new file mode 100644 index 00000000000..d7b27200383 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java @@ -0,0 +1,28 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.core; + +import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; +import org.eclipse.cdt.debug.core.model.ICSharedLibrary; +import org.eclipse.core.runtime.IAdaptable; + +/** + * Enter type comment. + * + * @since: Jan 15, 2003 + */ +public interface ICSharedLibraryManager extends IAdaptable +{ + void sharedLibraryLoaded( ICDISharedLibrary library ); + + void sharedLibraryUnloaded( ICDISharedLibrary library ); + + void symbolsLoaded( ICDISharedLibrary library ); + + ICSharedLibrary[] getSharedLibraries(); + + void dispose(); +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICSharedLibrary.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICSharedLibrary.java new file mode 100644 index 00000000000..c4676ad7c7a --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICSharedLibrary.java @@ -0,0 +1,54 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.core.model; + +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.model.IDebugElement; + +/** + * Enter type comment. + * + * @since: Jan 15, 2003 + */ +public interface ICSharedLibrary extends IDebugElement +{ + /** + * Returns the name of shared library file. + * + * @return the name of shared library file + */ + String getFileName(); + + /** + * Returns the start address of this library. + * + * @return the start address of this library + */ + long getStartAddress(); + + /** + * Returns the end address of this library. + * + * @return the end address of this library + */ + long getEndAddress(); + + /** + * Returns whether the symbols of this library are read. + * + * @return whether the symbols of this library are read + */ + boolean areSymbolsLoaded(); + + /** + * Loads the library symbols. + * + * @throws DebugException if this method fails. Reasons include: + */ + void loadSymbols() throws DebugException; + + void dispose(); +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CSharedLibraryManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CSharedLibraryManager.java new file mode 100644 index 00000000000..51c5ff9f57f --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CSharedLibraryManager.java @@ -0,0 +1,136 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.core; + +import java.util.ArrayList; +import java.util.Iterator; + +import org.eclipse.cdt.debug.core.ICSharedLibraryManager; +import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; +import org.eclipse.cdt.debug.core.model.ICSharedLibrary; +import org.eclipse.cdt.debug.internal.core.model.CDebugTarget; +import org.eclipse.cdt.debug.internal.core.model.CSharedLibrary; +import org.eclipse.debug.core.DebugEvent; +import org.eclipse.debug.core.model.IDebugTarget; + +/** + * Enter type comment. + * + * @since: Jan 16, 2003 + */ +public class CSharedLibraryManager implements ICSharedLibraryManager +{ + private CDebugTarget fDebugTarget = null; + private ArrayList fSharedLibraries; + + /** + * Constructor for CSharedLibraryManager. + */ + public CSharedLibraryManager( CDebugTarget target ) + { + setDebugTarget( target ); + fSharedLibraries = new ArrayList( 5 ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.ICSharedLibraryManager#sharedLibararyLoaded(ICDISharedLibrary) + */ + public synchronized void sharedLibraryLoaded( ICDISharedLibrary cdiLibrary ) + { + CSharedLibrary library = new CSharedLibrary( fDebugTarget, cdiLibrary ); + fSharedLibraries.add( library ); + library.fireCreationEvent(); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.ICSharedLibraryManager#sharedLibraryUnloaded(ICDISharedLibrary) + */ + public synchronized void sharedLibraryUnloaded( ICDISharedLibrary cdiLibrary ) + { + CSharedLibrary library = find( cdiLibrary ); + if ( library != null ) + { + fSharedLibraries.remove( library ); + library.dispose(); + library.fireTerminateEvent(); + } + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.ICSharedLibraryManager#symbolsLoaded(ICDISharedLibrary) + */ + public void symbolsLoaded( ICDISharedLibrary cdiLibrary ) + { + CSharedLibrary library = find( cdiLibrary ); + if ( library != null ) + { + library.fireChangeEvent( DebugEvent.STATE ); + } + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.ICSharedLibraryManager#getSharedLibraries() + */ + public ICSharedLibrary[] getSharedLibraries() + { + return (ICSharedLibrary[])fSharedLibraries.toArray( new ICSharedLibrary[fSharedLibraries.size()] ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.ICSharedLibraryManager#dispose() + */ + public void dispose() + { + Iterator it = fSharedLibraries.iterator(); + while( it.hasNext() ) + { + ((ICSharedLibrary)it.next()).dispose(); + } + fSharedLibraries.clear(); + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class) + */ + public Object getAdapter( Class adapter ) + { + if ( adapter.equals( ICSharedLibraryManager.class ) ) + { + return this; + } + if ( adapter.equals( CSharedLibraryManager.class ) ) + { + return this; + } + if ( adapter.equals( IDebugTarget.class ) ) + { + return fDebugTarget; + } + return null; + } + + public IDebugTarget getDebugTarget() + { + return fDebugTarget; + } + + protected void setDebugTarget( CDebugTarget target ) + { + fDebugTarget = target; + } + + protected CSharedLibrary find( ICDISharedLibrary cdiLibrary ) + { + Iterator it = fSharedLibraries.iterator(); + while( it.hasNext() ) + { + CSharedLibrary library = (CSharedLibrary)it.next(); + if ( library.getCDISharedLibrary().equals( cdiLibrary ) ) + return library; + } + return null; + } +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugElement.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugElement.java index f9b96dba2ef..977e108acff 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugElement.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugElement.java @@ -123,7 +123,7 @@ public class CDebugElement extends PlatformObject /** * Fires a debug event marking the creation of this element. */ - protected void fireCreationEvent() + public void fireCreationEvent() { fireEvent( new DebugEvent( this, DebugEvent.CREATE ) ); } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java index ccb87035cdb..db763cc4b6f 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java @@ -20,6 +20,7 @@ import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.CDebugModel; import org.eclipse.cdt.debug.core.ICBreakpointManager; import org.eclipse.cdt.debug.core.ICMemoryManager; +import org.eclipse.cdt.debug.core.ICSharedLibraryManager; import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointHit; import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager; @@ -48,6 +49,7 @@ import org.eclipse.cdt.debug.core.cdi.event.ICDISuspendedEvent; import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint; import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint; import org.eclipse.cdt.debug.core.cdi.model.ICDIObject; +import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; 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; @@ -69,6 +71,7 @@ import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator; import org.eclipse.cdt.debug.core.sourcelookup.ISourceMode; import org.eclipse.cdt.debug.internal.core.CDebugUtils; import org.eclipse.cdt.debug.internal.core.CMemoryManager; +import org.eclipse.cdt.debug.internal.core.CSharedLibraryManager; import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants; import org.eclipse.cdt.debug.internal.core.breakpoints.CBreakpoint; import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceManager; @@ -218,6 +221,11 @@ public class CDebugTarget extends CDebugElement */ private DisassemblyManager fDisassemblyManager; + /** + * A shared library manager for this target. + */ + private CSharedLibraryManager fSharedLibraryManager; + /** * Whether the debugger process is default. */ @@ -256,6 +264,7 @@ public class CDebugTarget extends CDebugElement fSupportsDisconnect = allowsDisconnect & getConfiguration().supportsDisconnect(); setThreadList( new ArrayList( 5 ) ); setDisassemblyManager( new DisassemblyManager( this ) ); + setSharedLibraryManager( new CSharedLibraryManager( this ) ); initialize(); DebugPlugin.getDefault().getLaunchManager().addLaunchListener( this ); DebugPlugin.getDefault().getExpressionManager().addExpressionListener( this ); @@ -867,6 +876,8 @@ public class CDebugTarget extends CDebugElement return this; if ( adapter.equals( DisassemblyManager.class ) ) return fDisassemblyManager; + if ( adapter.equals( ICSharedLibraryManager.class ) ) + return fSharedLibraryManager; return super.getAdapter( adapter ); } @@ -888,6 +899,10 @@ public class CDebugTarget extends CDebugElement { handleThreadCreatedEvent( (ICDICreatedEvent)event ); } + if ( source instanceof ICDISharedLibrary ) + { + getSharedLibraryManager().sharedLibraryLoaded( (ICDISharedLibrary)source ); + } } else if ( event instanceof ICDISuspendedEvent ) { @@ -916,6 +931,10 @@ public class CDebugTarget extends CDebugElement { handleThreadTerminatedEvent( (ICDIDestroyedEvent)event ); } + if ( source instanceof ICDISharedLibrary ) + { + getSharedLibraryManager().sharedLibraryUnloaded( (ICDISharedLibrary)source ); + } } else if ( event instanceof ICDIDisconnectedEvent ) { @@ -930,6 +949,10 @@ public class CDebugTarget extends CDebugElement { handleChangedEvent( (ICDIChangedEvent)event ); } + if ( source instanceof ICDISharedLibrary ) + { + getSharedLibraryManager().symbolsLoaded( (ICDISharedLibrary)source ); + } } else if ( event instanceof ICDIRestartedEvent ) { @@ -1083,6 +1106,7 @@ public class CDebugTarget extends CDebugElement DebugPlugin.getDefault().getExpressionManager().removeExpressionListener( this ); DebugPlugin.getDefault().getLaunchManager().removeLaunchListener( this ); disposeMemoryManager(); + disposeSharedLibraryManager(); removeAllExpressions(); try { @@ -2076,6 +2100,21 @@ public class CDebugTarget extends CDebugElement return fDisassemblyManager; } + protected void setSharedLibraryManager( CSharedLibraryManager libman ) + { + fSharedLibraryManager = libman; + } + + protected CSharedLibraryManager getSharedLibraryManager() + { + return fSharedLibraryManager; + } + + protected void disposeSharedLibraryManager() + { + fSharedLibraryManager.dispose(); + } + /* (non-Javadoc) * @see org.eclipse.cdt.debug.core.ICBreakpointManager#getBreakpointAddress(IBreakpoint) */ diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSharedLibrary.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSharedLibrary.java new file mode 100644 index 00000000000..e90a9822d6c --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSharedLibrary.java @@ -0,0 +1,112 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.core.model; + +import org.eclipse.cdt.debug.core.cdi.CDIException; +import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent; +import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener; +import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; +import org.eclipse.cdt.debug.core.model.ICSharedLibrary; +import org.eclipse.debug.core.DebugException; + +/** + * Enter type comment. + * + * @since: Jan 16, 2003 + */ +public class CSharedLibrary extends CDebugElement + implements ICSharedLibrary, + ICDIEventListener +{ + private ICDISharedLibrary fCDILib = null; + + /** + * Constructor for CSharedLibrary. + * @param target + */ + public CSharedLibrary( CDebugTarget target, ICDISharedLibrary cdiLib ) + { + super( target ); + fCDILib = cdiLib; + getCDISession().getEventManager().addEventListener( this ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSharedLibrary#getFileName() + */ + public String getFileName() + { + if ( getCDISharedLibrary() != null ) + return getCDISharedLibrary().getFileName(); + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSharedLibrary#getStartAddress() + */ + public long getStartAddress() + { + if ( getCDISharedLibrary() != null ) + return getCDISharedLibrary().getStartAddress(); + return 0; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSharedLibrary#getEndAddress() + */ + public long getEndAddress() + { + if ( getCDISharedLibrary() != null ) + return getCDISharedLibrary().getEndAddress(); + return 0; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSharedLibrary#areSymbolsLoaded() + */ + public boolean areSymbolsLoaded() + { + if ( getCDISharedLibrary() != null ) + return getCDISharedLibrary().areSymbolsLoaded(); + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSharedLibrary#loadSymbols() + */ + public void loadSymbols() throws DebugException + { + try + { + if ( getCDISharedLibrary() != null ) + getCDISharedLibrary().loadSymbols(); + } + catch( CDIException e ) + { + targetRequestFailed( e.getMessage(), null ); + } + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSharedLibrary#dispose() + */ + public void dispose() + { + getCDISession().getEventManager().removeEventListener( this ); + } + + public ICDISharedLibrary getCDISharedLibrary() + { + return fCDILib; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener#handleDebugEvent(ICDIEvent) + */ + public void handleDebugEvent( ICDIEvent event ) + { + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index 23b740f206e..42f1efcf973 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,17 @@ +2003-01-16 Mikhail Khodjaiants + Implementing the Shared Libraries view. + * SharedLibrariesView.java + * SharedLibrariesViewContentProvider.java + * SharedLibrariesViewEventHandler.java + * CDebugImages.java + * ICDebugHelpContextIds.java + * plugin.properties + * plugin.xml + * icons/full/cview16/sharedlibraries_view.gif + * icons/full/eview16/sharedlibraries_view.gif + * icons/full/obj16/sharedlibraryl_obj.gif + * icons/full/obj16/sharedlibraryu_obj.gif + 2003-01-15 Mikhail Khodjaiants The 'getDefaultEditor' method returns 'null' for file names that don't have an extension and are not registered with some editor. Use the default text editor in this case. diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/cview16/sharedlibraries_view.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/cview16/sharedlibraries_view.gif new file mode 100644 index 0000000000000000000000000000000000000000..d84096acfc9383166313a046840f0efe29c688f9 GIT binary patch literal 160 zcmZ?wbhEHb6krfw*v!C?xHQ}}Qh(B+?&(J+?6|)9*!@EvKfn3#>6MA4a_QheRx$Q#HSoJ zOXvF^RoYi$>iWs-;zxmij9`^5PkLNL5_X@}4Zp?IC~(5{d}8B*oVg5K&5XOxGO)aB I6MA4a_QheRx$Q#HSoJ zOXvF^RoYi$>iWs-;zxmij9`^5PkLNL5_X@}4Zp?IC~(5{d}8B*oVg5K&5XOxGO)aB I6MA4a_QheRx$Q#HSoJ zOXvF^RoYi$>iWs-;zxmij9`^5PkLNL5_X@}4Zp?IC~(5{d}8B*oVg5K&5XOxGO)aB Ii_#s& z(Z|nDdn@TTYw3Ldqe}Z~Ox-@2UHm8%kP)o1 + + @@ -58,14 +65,16 @@ relationship="stack" id="org.eclipse.cdt.debug.ui.RegistersView"> - - + +