diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml
index e1d5bb22ba2..6b8531adcf8 100644
--- a/debug/org.eclipse.cdt.debug.ui/plugin.xml
+++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml
@@ -1205,19 +1205,6 @@
class="org.eclipse.cdt.debug.internal.ui.sourcelookup.SourceContainerAdapterFactory">
-
-
-
-
-
-
-
-
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleContentProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleContentProvider.java
index bfe8659e962..38c030bf6ba 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleContentProvider.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleContentProvider.java
@@ -14,9 +14,12 @@ import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.IBinary;
import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.debug.core.model.ICModule;
+import org.eclipse.cdt.debug.core.model.ICStackFrame;
+import org.eclipse.cdt.debug.core.model.ICThread;
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.debug.internal.ui.model.elements.ElementContentProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
@@ -44,10 +47,16 @@ public class ModuleContentProvider extends ElementContentProvider {
return ICDebugUIConstants.ID_MODULES_VIEW.equals( id );
}
- protected Object[] getAllChildren( Object parent, IPresentationContext context ) throws CoreException {
+ protected Object[] getAllChildren( Object parent, IPresentationContext context ) throws CoreException {
if ( parent instanceof IModuleRetrieval ) {
return ((IModuleRetrieval)parent).getModules();
}
+ else if ( parent instanceof ICThread || parent instanceof ICStackFrame ) {
+ IModuleRetrieval mr = (IModuleRetrieval)((IAdaptable)parent).getAdapter( IModuleRetrieval.class );
+ if ( mr != null ) {
+ return mr.getModules();
+ }
+ }
else if ( parent instanceof ICModule ) {
IBinary binary = (IBinary)((ICModule)parent).getAdapter( IBinary.class );
if ( binary != null ) {
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleMementoProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleMementoProvider.java
index dd473c10749..efb348221ff 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleMementoProvider.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleMementoProvider.java
@@ -12,9 +12,13 @@ package org.eclipse.cdt.debug.internal.ui.views.modules;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.debug.core.CDIDebugModel;
+import org.eclipse.cdt.debug.core.model.ICDebugTarget;
import org.eclipse.cdt.debug.core.model.ICModule;
+import org.eclipse.cdt.debug.core.model.ICStackFrame;
+import org.eclipse.cdt.debug.core.model.ICThread;
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.debug.internal.ui.model.elements.ElementMementoProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
import org.eclipse.ui.IMemento;
@@ -34,9 +38,15 @@ public class ModuleMementoProvider extends ElementMementoProvider {
* @see org.eclipse.debug.internal.ui.model.elements.ElementMementoProvider#encodeElement(java.lang.Object, org.eclipse.ui.IMemento, org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext)
*/
protected boolean encodeElement( Object element, IMemento memento, IPresentationContext context ) throws CoreException {
- if ( element instanceof IModuleRetrieval ) {
- // attempt to maintain expansion for target ????
- memento.putString( ELEMENT_NAME, CDIDebugModel.getPluginIdentifier() );
+ if ( element instanceof ICDebugTarget || element instanceof ICThread || element instanceof ICStackFrame ) {
+ IModuleRetrieval mr = (IModuleRetrieval)((IAdaptable)element).getAdapter( IModuleRetrieval.class );
+ if ( mr != null ) {
+ memento.putString( ELEMENT_NAME, mr.toString() );
+ }
+ else {
+ // shouldn't happen
+ memento.putString( ELEMENT_NAME, CDIDebugModel.getPluginIdentifier() );
+ }
}
else if ( element instanceof ICModule ) {
memento.putString( ELEMENT_NAME, ((ICModule)element).getName() );
@@ -57,8 +67,9 @@ public class ModuleMementoProvider extends ElementMementoProvider {
String mementoName = memento.getString( ELEMENT_NAME );
if ( mementoName != null ) {
String elementName = null;
- if ( element instanceof IModuleRetrieval ) {
- elementName = CDIDebugModel.getPluginIdentifier();
+ if ( element instanceof ICDebugTarget || element instanceof ICThread || element instanceof ICStackFrame ) {
+ IModuleRetrieval mr = (IModuleRetrieval)((IAdaptable)element).getAdapter( IModuleRetrieval.class );
+ elementName = ( mr != null ) ? mr.toString() : CDIDebugModel.getPluginIdentifier();
}
else if ( element instanceof ICModule ) {
elementName = ((ICModule)element).getName();
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleProxyFactory.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleProxyFactory.java
index 61fa6946898..d73ff0e914f 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleProxyFactory.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModuleProxyFactory.java
@@ -11,8 +11,10 @@
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.views.modules;
+import org.eclipse.cdt.debug.core.model.ICDebugTarget;
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
@@ -24,8 +26,14 @@ public class ModuleProxyFactory implements IModelProxyFactory {
*/
public IModelProxy createModelProxy( Object element, IPresentationContext context ) {
if ( ICDebugUIConstants.ID_MODULES_VIEW.equals( context.getId() ) ) {
- if ( element instanceof IModuleRetrieval ) {
- return new ModulesViewModelProxy( (IModuleRetrieval)element );
+ IModuleRetrieval mr = null;
+ if ( element instanceof IAdaptable ) {
+ ICDebugTarget target = (ICDebugTarget)((IAdaptable)element).getAdapter( ICDebugTarget.class );
+ if ( target != null )
+ mr = (IModuleRetrieval)target.getAdapter( IModuleRetrieval.class );
+ }
+ if ( mr != null ) {
+ return new ModulesViewModelProxy( mr );
}
}
return null;
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java
index bf409272f66..baa1acd21c6 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java
@@ -20,9 +20,7 @@ import java.util.Iterator;
import org.eclipse.cdt.core.IAddress;
import org.eclipse.cdt.core.model.ICElement;
-import org.eclipse.cdt.debug.core.model.ICDebugTarget;
import org.eclipse.cdt.debug.core.model.ICModule;
-import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds;
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
import org.eclipse.cdt.debug.internal.ui.actions.ToggleDetailPaneAction;
@@ -30,7 +28,6 @@ import org.eclipse.cdt.debug.internal.ui.preferences.ICDebugPreferenceConstants;
import org.eclipse.cdt.debug.internal.ui.views.IDebugExceptionHandler;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
-import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
@@ -285,31 +282,25 @@ public class ModulesView extends AbstractDebugView implements IDebugContextListe
}
protected void setViewerInput( Object context ) {
- IModuleRetrieval mr = null;
- if ( context instanceof IAdaptable ) {
- ICDebugTarget target = (ICDebugTarget)((IAdaptable)context).getAdapter( ICDebugTarget.class );
- if ( target != null )
- mr = (IModuleRetrieval)target.getAdapter( IModuleRetrieval.class );
- }
if ( context == null ) {
clearDetails();
}
Object current = getViewer().getInput();
- if ( current == null && mr == null ) {
+ if ( current == null && context == null ) {
return;
}
- if ( current != null && current.equals( mr ) ) {
+ if ( current != null && current.equals( context ) ) {
return;
}
showViewer();
- getViewer().setInput( mr );
+ getViewer().setInput( context );
}
protected TreeModelViewer createTreeViewer( Composite parent ) {
// add tree viewer
- final TreeModelViewer modulesViewer = new TreeModelViewer( parent, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.VIRTUAL | SWT.FULL_SELECTION, getPresentationContext() );
+ final TreeModelViewer modulesViewer = new ModulesViewTreeViewer( parent, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.VIRTUAL | SWT.FULL_SELECTION, getPresentationContext() );
modulesViewer.getControl().addFocusListener( new FocusAdapter() {
/* (non-Javadoc)
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesViewTreeContentProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesViewTreeContentProvider.java
new file mode 100644
index 00000000000..6b48a4e9487
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesViewTreeContentProvider.java
@@ -0,0 +1,88 @@
+/**
+ * Copyright 2007 ARM Limited. All rights reserved.
+ *
+ * $ Rev: $
+ * $ Author: $
+ * $ Date: $
+ * $ URL: $
+ */
+package org.eclipse.cdt.debug.internal.ui.views.modules;
+
+import org.eclipse.cdt.debug.core.model.ICDebugElement;
+import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
+import org.eclipse.cdt.debug.internal.ui.elements.adapters.CDebugElementAdapterFactory;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.debug.internal.ui.viewers.model.TreeModelContentProvider;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory;
+
+/**
+ * org.eclipse.cdt.debug.internal.ui.views.modules.ModulesViewTreeContentProvider:
+ * //TODO Add description.
+ */
+public class ModulesViewTreeContentProvider extends TreeModelContentProvider {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.viewers.model.ModelContentProvider#getContentAdapter(java.lang.Object)
+ */
+ protected IElementContentProvider getContentAdapter( Object element ) {
+ IElementContentProvider adapter = null;
+ if ( !(element instanceof ICDebugElement) ) {
+ if ( element instanceof IElementContentProvider ) {
+ adapter = (IElementContentProvider)element;
+ }
+ else if ( element instanceof IAdaptable ) {
+ IAdaptable adaptable = (IAdaptable)element;
+ adapter = (IElementContentProvider)adaptable.getAdapter( IElementContentProvider.class );
+ }
+ }
+ else {
+ IModuleRetrieval moduleRetrieval = (IModuleRetrieval)((ICDebugElement)element).getAdapter( IModuleRetrieval.class );
+ if ( moduleRetrieval != null ) {
+ adapter = (IElementContentProvider)new CDebugElementAdapterFactory().getAdapter( moduleRetrieval, IElementContentProvider.class );
+ }
+ }
+ return adapter;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.viewers.model.ModelContentProvider#getModelProxyFactoryAdapter(java.lang.Object)
+ */
+ protected IModelProxyFactory getModelProxyFactoryAdapter( Object element ) {
+ IModelProxyFactory adapter = null;
+ if ( !(element instanceof ICDebugElement) ) {
+ if ( element instanceof IModelProxyFactory ) {
+ adapter = (IModelProxyFactory)element;
+ }
+ else if ( element instanceof IAdaptable ) {
+ IAdaptable adaptable = (IAdaptable)element;
+ adapter = (IModelProxyFactory)adaptable.getAdapter( IModelProxyFactory.class );
+ }
+ }
+ else {
+ IModuleRetrieval moduleRetrieval = (IModuleRetrieval)((ICDebugElement)element).getAdapter( IModuleRetrieval.class );
+ if ( moduleRetrieval != null ) {
+ adapter = (IModelProxyFactory)new CDebugElementAdapterFactory().getAdapter( moduleRetrieval, IModelProxyFactory.class );
+ }
+ }
+ return adapter;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.viewers.model.ModelContentProvider#getViewerStateAdapter(java.lang.Object)
+ */
+ protected IElementMementoProvider getViewerStateAdapter( Object element ) {
+ IElementMementoProvider adapter = null;
+ if ( !(element instanceof ICDebugElement) ) {
+ adapter = super.getViewerStateAdapter( element );
+ }
+ else {
+ IModuleRetrieval moduleRetrieval = (IModuleRetrieval)((ICDebugElement)element).getAdapter( IModuleRetrieval.class );
+ if ( moduleRetrieval != null ) {
+ adapter = (IElementMementoProvider)new CDebugElementAdapterFactory().getAdapter( moduleRetrieval, IElementMementoProvider.class );
+ }
+ }
+ return adapter;
+ }
+}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesViewTreeViewer.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesViewTreeViewer.java
new file mode 100644
index 00000000000..4d4a0951436
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesViewTreeViewer.java
@@ -0,0 +1,32 @@
+/**
+ * Copyright 2007 ARM Limited. All rights reserved.
+ *
+ * $ Rev: $
+ * $ Author: $
+ * $ Date: $
+ * $ URL: $
+ */
+package org.eclipse.cdt.debug.internal.ui.views.modules;
+
+import org.eclipse.debug.internal.ui.viewers.model.TreeModelContentProvider;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * org.eclipse.cdt.debug.internal.ui.views.modules.ModulesViewTreeViewer:
+ * //TODO Add description.
+ */
+public class ModulesViewTreeViewer extends TreeModelViewer {
+
+ public ModulesViewTreeViewer( Composite parent, int style, IPresentationContext context ) {
+ super( parent, style, context );
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.viewers.model.InternalTreeModelViewer#createContentProvider()
+ */
+ protected TreeModelContentProvider createContentProvider() {
+ return new ModulesViewTreeContentProvider();
+ }
+}