From 655d90ba807cf7432b3bddaf76d2aba27f4a503b Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Tue, 17 Sep 2002 16:03:53 +0000 Subject: [PATCH] Implementation of Registers view. --- .../internal/core/model/CDebugTarget.java | 9 ++++++++ .../internal/core/model/CRegisterGroup.java | 21 ++++++++++++++++++- .../internal/core/model/CStackFrame.java | 13 +++++++++++- .../debug/internal/core/model/CThread.java | 2 +- .../ui/views/registers/RegistersView.java | 7 +++++++ 5 files changed, 49 insertions(+), 3 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java index 96d81da863a..df1ef841d8a 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java @@ -1647,4 +1647,13 @@ public class CDebugTarget extends CDebugElement ((CRegisterGroup)it.next()).dispose(); } } + + protected void preserveRegisters() + { + Iterator it = fRegisterGroups.iterator(); + while( it.hasNext() ) + { + ((CRegisterGroup)it.next()).preserve(); + } + } } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CRegisterGroup.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CRegisterGroup.java index e33b4de137f..dc236574ed6 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CRegisterGroup.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CRegisterGroup.java @@ -10,6 +10,7 @@ import java.util.Arrays; import java.util.Iterator; import java.util.List; +import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject; import org.eclipse.cdt.debug.core.cdi.model.ICDIRegister; @@ -69,7 +70,7 @@ public class CRegisterGroup extends CDebugElement implements IRegisterGroup */ public boolean hasRegisters() throws DebugException { - return getRegisters0().size() > 0; + return fRegisterObjects.length > 0; } private List getRegisters0() throws DebugException @@ -149,4 +150,22 @@ public class CRegisterGroup extends CDebugElement implements IRegisterGroup index++; } } + + protected void preserve() + { + if ( fRegisters == null ) + return; + try + { + Iterator it = fRegisters.iterator(); + while( it.hasNext() ) + { + ((CVariable)it.next()).setChanged( false ); + } + } + catch( DebugException e ) + { + CDebugCorePlugin.log( e ); + } + } } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CStackFrame.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CStackFrame.java index 32da65805dd..abff5c35b1f 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CStackFrame.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CStackFrame.java @@ -682,7 +682,13 @@ public class CStackFrame extends CDebugElement return (IVariable[])list.toArray( new IVariable[list.size()] ); } - protected synchronized void preserveVariables() + protected synchronized void preserve() + { + preserveVariables(); + preserveRegisters(); + } + + private void preserveVariables() { if ( fVariables == null ) return; @@ -700,6 +706,11 @@ public class CStackFrame extends CDebugElement } } + private void preserveRegisters() + { + ((CDebugTarget)getDebugTarget()).preserveRegisters(); + } + // temporary solution protected ICDIVariable findVariable( List list, ICDIVariable var ) { diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java index 4e39106db3f..2a5f6bedceb 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java @@ -657,7 +657,7 @@ public class CThread extends CDebugElement Iterator it = fStackFrames.iterator(); while( it.hasNext() ) { - ((CStackFrame)it.next()).preserveVariables(); + ((CStackFrame)it.next()).preserve(); } setRefreshChildren( true ); } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/registers/RegistersView.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/registers/RegistersView.java index cd2e26735bf..058d260695e 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/registers/RegistersView.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/registers/RegistersView.java @@ -227,6 +227,13 @@ public class RegistersView extends AbstractDebugEventHandlerView return; } + if ( current != null && frame != null && + current instanceof IStackFrame && + ((IStackFrame)current).getDebugTarget().equals( frame.getDebugTarget() ) ) + { + return; + } + showViewer(); getViewer().setInput( frame ); }