Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Implementing the Shared Libraries view (core)

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/ChangeLog,v
retrieving revision 1.100
diff -u -r1.100 ChangeLog
--- ChangeLog 16 Jan 2003 20:15:18 -0000 1.100
+++ ChangeLog 17 Jan 2003 00:08:29 -0000
@@ -1,4 +1,13 @@
 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.
 
 2003-01-16 Alain Magloire
Index: src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java
diff -N src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java 17 Jan 2003 00:08:29 -0000
@@ -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();
+}
Index: src/org/eclipse/cdt/debug/core/model/ICSharedLibrary.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/core/model/ICSharedLibrary.java
diff -N src/org/eclipse/cdt/debug/core/model/ICSharedLibrary.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/core/model/ICSharedLibrary.java 17 Jan 2003 00:08:29 -0000
@@ -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();
+}
Index: src/org/eclipse/cdt/debug/internal/core/CSharedLibraryManager.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/internal/core/CSharedLibraryManager.java
diff -N src/org/eclipse/cdt/debug/internal/core/CSharedLibraryManager.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/internal/core/CSharedLibraryManager.java 17 Jan 2003 00:08:29 -0000
@@ -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;
+ } 
+}
Index: src/org/eclipse/cdt/debug/internal/core/model/CDebugElement.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugElement.java,v
retrieving revision 1.5
diff -u -r1.5 CDebugElement.java
--- src/org/eclipse/cdt/debug/internal/core/model/CDebugElement.java 2 Dec 2002 23:22:22 -0000 1.5
+++ src/org/eclipse/cdt/debug/internal/core/model/CDebugElement.java 17 Jan 2003 00:08:29 -0000
@@ -123,7 +123,7 @@
  /**
   * Fires a debug event marking the creation of this element.
   */
- protected void fireCreationEvent()
+ public void fireCreationEvent()
  {
   fireEvent( new DebugEvent( this, DebugEvent.CREATE ) );
  }
Index: src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java,v
retrieving revision 1.69
diff -u -r1.69 CDebugTarget.java
--- src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java 16 Jan 2003 20:15:18 -0000 1.69
+++ src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java 17 Jan 2003 00:08:30 -0000
@@ -20,6 +20,7 @@
 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.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.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;
@@ -219,6 +222,11 @@
  private DisassemblyManager fDisassemblyManager;
 
  /**
+  * A shared library manager for this target.
+  */
+ private CSharedLibraryManager fSharedLibraryManager;
+
+ /**
   * Whether the debugger process is default.
   */
  private boolean fIsDebuggerProcessDefault = false;
@@ -256,6 +264,7 @@
   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 @@
    return this;
   if ( adapter.equals( DisassemblyManager.class ) )
    return fDisassemblyManager;
+  if ( adapter.equals( ICSharedLibraryManager.class ) )
+   return fSharedLibraryManager;
   return super.getAdapter( adapter );
  }
  
@@ -888,6 +899,10 @@
     {
      handleThreadCreatedEvent( (ICDICreatedEvent)event );
     }
+    if ( source instanceof ICDISharedLibrary )
+    {
+     getSharedLibraryManager().sharedLibraryLoaded( (ICDISharedLibrary)source );
+    }
    }
    else if ( event instanceof ICDISuspendedEvent )
    {
@@ -916,6 +931,10 @@
     {
      handleThreadTerminatedEvent( (ICDIDestroyedEvent)event );
     }
+    if ( source instanceof ICDISharedLibrary )
+    {
+     getSharedLibraryManager().sharedLibraryUnloaded( (ICDISharedLibrary)source );
+    }
    }
    else if ( event instanceof ICDIDisconnectedEvent )
    {
@@ -930,6 +949,10 @@
     {
      handleChangedEvent( (ICDIChangedEvent)event );
     }
+    if ( source instanceof ICDISharedLibrary )
+    {
+     getSharedLibraryManager().symbolsLoaded( (ICDISharedLibrary)source );
+    }
    }
    else if ( event instanceof ICDIRestartedEvent )
    {
@@ -1083,6 +1106,7 @@
   DebugPlugin.getDefault().getExpressionManager().removeExpressionListener( this );
   DebugPlugin.getDefault().getLaunchManager().removeLaunchListener( this );
   disposeMemoryManager();
+  disposeSharedLibraryManager();
   removeAllExpressions();
   try
   {
@@ -2074,6 +2098,21 @@
  protected DisassemblyManager getDisassemblyManager()
  {
   return fDisassemblyManager;
+ }
+
+ protected void setSharedLibraryManager( CSharedLibraryManager libman )
+ {
+  fSharedLibraryManager = libman;
+ }

+ protected CSharedLibraryManager getSharedLibraryManager()
+ {
+  return fSharedLibraryManager;
+ }
+
+ protected void disposeSharedLibraryManager()
+ {
+  fSharedLibraryManager.dispose();
  }
 
  /* (non-Javadoc)
Index: src/org/eclipse/cdt/debug/internal/core/model/CSharedLibrary.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/internal/core/model/CSharedLibrary.java
diff -N src/org/eclipse/cdt/debug/internal/core/model/CSharedLibrary.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/internal/core/model/CSharedLibrary.java 17 Jan 2003 00:08:29 -0000
@@ -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 )
+ {
+ }
+}

Back to the top