1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-23 17:05:26 +02:00

Bug 308055: Register values are not updated when switching between frames. CViewerInputProvider should extend existing platform input providers.

This commit is contained in:
Mikhail Khodjaiants 2010-04-06 18:05:17 +00:00
parent 6a80bb8cc7
commit cdb45fd02a
3 changed files with 50 additions and 10 deletions

View file

@ -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 ) ) {

View file

@ -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 );
}
}

View file

@ -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 );
}
}