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(); + } +}