diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java index 3ed5be35441..cc1d4f166f0 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java @@ -57,7 +57,8 @@ public class CDebugElementAdapterFactory implements IAdapterFactory { private static IElementToggleBreakpointAdapter fgDisassemblyToggleBreakpointAdapter = new DisassemblyToggleBreakpointAdapter(); private static ISourceDisplay fgSourceDisplayAdapter = new SourceDisplayAdapter(); - private static IViewerInputProvider fgViewerInputProvider = new CViewerInputProvider(); + private static IViewerInputProvider fgDefaultViewerInputProvider = new CDefaultViewerInputProvider(); + private static IViewerInputProvider fgStackFrameViewerInputProvider = new CStackFrameViewerInputProvider(); private static IColumnPresentationFactory fgRegistersViewColumnPresentationFactory = new RegistersViewColumnPresentationFactory(); private static IElementMementoProvider fgRegisterManagerProxyMementoProvider = new CRegisterManagerProxyMementoProvider(); @@ -148,9 +149,10 @@ public class CDebugElementAdapterFactory implements IAdapterFactory { } if ( adapterType.equals( IViewerInputProvider.class ) ) { if ( adaptableObject instanceof ICDebugTarget - || adaptableObject instanceof ICThread - || adaptableObject instanceof ICStackFrame ) { - return fgViewerInputProvider; + || adaptableObject instanceof ICThread ) + return fgDefaultViewerInputProvider; + if ( adaptableObject instanceof ICStackFrame ) { + return fgStackFrameViewerInputProvider; } } if ( adapterType.equals( IColumnPresentationFactory.class ) ) { diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CViewerInputProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDefaultViewerInputProvider.java similarity index 78% rename from debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CViewerInputProvider.java rename to debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDefaultViewerInputProvider.java index 3abd97e7ac6..ea919caca48 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CViewerInputProvider.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDefaultViewerInputProvider.java @@ -15,13 +15,13 @@ import org.eclipse.cdt.debug.core.model.ICDebugElement; import org.eclipse.cdt.debug.core.model.ICDebugTarget; import org.eclipse.cdt.debug.internal.ui.CRegisterManagerProxies; import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.internal.ui.model.elements.ViewerInputProvider; +import org.eclipse.debug.internal.ui.elements.adapters.DefaultViewerInputProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerInputProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; import org.eclipse.debug.ui.IDebugUIConstants; -public class CViewerInputProvider extends ViewerInputProvider implements IViewerInputProvider { +public class CDefaultViewerInputProvider extends DefaultViewerInputProvider implements IViewerInputProvider { /* (non-Javadoc) * @see org.eclipse.debug.internal.ui.model.elements.ViewerInputProvider#getViewerInput(java.lang.Object, org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext, org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate) @@ -32,14 +32,16 @@ public class CViewerInputProvider extends ViewerInputProvider implements IViewer ICDebugTarget target = (ICDebugTarget)((ICDebugElement)source).getDebugTarget(); return CRegisterManagerProxies.getInstance().getRegisterManagerProxy( target ); } - return null; + return super.getViewerInput( source, context, update ); } /* (non-Javadoc) - * @see org.eclipse.debug.internal.ui.model.elements.ViewerInputProvider#supportsContextId(java.lang.String) + * @see org.eclipse.debug.internal.ui.elements.adapters.DefaultViewerInputProvider#supportsContextId(java.lang.String) */ @Override protected boolean supportsContextId( String id ) { - return IDebugUIConstants.ID_REGISTER_VIEW.equals( id ); - } + if ( IDebugUIConstants.ID_REGISTER_VIEW.equals( id ) ) + return true; + return super.supportsContextId( id ); + } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CStackFrameViewerInputProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CStackFrameViewerInputProvider.java new file mode 100644 index 00000000000..3d8bffba308 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CStackFrameViewerInputProvider.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2010 CodeSourcery and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * CodeSourcery - Initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.debug.internal.ui.elements.adapters; + +import org.eclipse.cdt.debug.core.model.ICDebugTarget; +import org.eclipse.cdt.debug.core.model.ICStackFrame; +import org.eclipse.cdt.debug.internal.ui.CRegisterManagerProxies; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.internal.ui.elements.adapters.StackFrameViewerInputProvider; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; +import org.eclipse.debug.ui.IDebugUIConstants; + +public class CStackFrameViewerInputProvider extends StackFrameViewerInputProvider { + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.elements.adapters.StackFrameViewerInputProvider#getViewerInput(java.lang.Object, org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext, org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate) + */ + @Override + protected Object getViewerInput( Object source, IPresentationContext context, IViewerUpdate update ) throws CoreException { + if ( IDebugUIConstants.ID_REGISTER_VIEW.equals( context.getId() ) && source instanceof ICStackFrame ) { + ICDebugTarget target = (ICDebugTarget)((ICStackFrame)source).getDebugTarget(); + return CRegisterManagerProxies.getInstance().getRegisterManagerProxy( target ); + } + return super.getViewerInput( source, context, update ); + } +}