From 138cdae85d1a5bb2fcd87f9d1812f9f5e51ab50f Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Wed, 2 Oct 2002 21:13:02 +0000 Subject: [PATCH] Moved getRegisters from the stack frame to the target. --- .../internal/core/model/CDebugTarget.java | 28 +++++------ .../internal/core/model/CGlobalVariable.java | 31 ++++++++++++ .../internal/core/model/CRegisterGroup.java | 47 +++---------------- .../internal/core/model/CStackFrame.java | 10 +--- .../debug/internal/core/model/CThread.java | 1 + 5 files changed, 55 insertions(+), 62 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 3508a8573b1..4c8d3f2bede 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 @@ -1681,13 +1681,13 @@ public class CDebugTarget extends CDebugElement return isAvailable() && isSuspended(); } + protected IRegisterGroup[] getRegisterGroups() throws DebugException + { + return (IRegisterGroup[])fRegisterGroups.toArray( new IRegisterGroup[fRegisterGroups.size()] ); + } + protected IRegisterGroup[] getRegisterGroups( CStackFrame stackFrame ) throws DebugException { - Iterator it = fRegisterGroups.iterator(); - while( it.hasNext() ) - { - ((CRegisterGroup)it.next()).refresh( stackFrame ); - } return (IRegisterGroup[])fRegisterGroups.toArray( new IRegisterGroup[fRegisterGroups.size()] ); } @@ -1716,15 +1716,6 @@ public class CDebugTarget extends CDebugElement ((CRegisterGroup)it.next()).dispose(); } } - - protected void preserveRegisters() - { - Iterator it = fRegisterGroups.iterator(); - while( it.hasNext() ) - { - ((CRegisterGroup)it.next()).resetChangeFlags(); - } - } /* (non-Javadoc) * @see org.eclipse.debug.core.IExpressionListener#expressionAdded(IExpression) @@ -1854,6 +1845,15 @@ public class CDebugTarget extends CDebugElement } } + protected void resetRegisters() + { + Iterator it = fRegisterGroups.iterator(); + while( it.hasNext() ) + { + ((CRegisterGroup)it.next()).resetChangeFlags(); + } + } + /** * @see org.eclipse.cdt.debug.core.ICDebugTargetType#getTargetType() */ diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CGlobalVariable.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CGlobalVariable.java index d2d4e29e0a3..1a5bb21b012 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CGlobalVariable.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CGlobalVariable.java @@ -1,5 +1,9 @@ package org.eclipse.cdt.debug.internal.core.model; +import org.eclipse.cdt.debug.core.CDebugCorePlugin; +import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent; +import org.eclipse.cdt.debug.core.cdi.event.ICDIResumedEvent; +import org.eclipse.cdt.debug.core.cdi.model.ICDIObject; import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IValue; @@ -36,4 +40,31 @@ public class CGlobalVariable extends CModificationVariable } return fValue; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener#handleDebugEvent(ICDIEvent) + */ + public void handleDebugEvent( ICDIEvent event ) + { + super.handleDebugEvent( event ); + + ICDIObject source = event.getSource(); + if (source == null) + return; + + if ( source.getTarget().equals( getCDITarget() ) ) + { + if ( event instanceof ICDIResumedEvent ) + { + try + { + 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/CRegisterGroup.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CRegisterGroup.java index f8869e50f08..63383afacf4 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 @@ -28,12 +28,6 @@ public class CRegisterGroup extends CDebugElement implements IRegisterGroup private String fName; private ICDIRegisterObject[] fRegisterObjects; private List fRegisters; - private CStackFrame fCurrentStackFrame = null; - - /** - * Whether the registers need refreshing - */ - private boolean fRefresh = true; /** * Constructor for CRegisterGroup. @@ -83,13 +77,6 @@ public class CRegisterGroup extends CDebugElement implements IRegisterGroup fRegisters.add( new CRegister( this, regs[i] ) ); } } -/* - else if ( fRefresh ) - { - updateRegisters(); - } - fRefresh = false; -*/ return fRegisters; } @@ -102,41 +89,21 @@ public class CRegisterGroup extends CDebugElement implements IRegisterGroup } fRegisters.clear(); } - - protected void refresh( CStackFrame stackFrame ) - { - setCurrentStackFrame( stackFrame ); - fRefresh = true; - } - + private ICDIRegister[] getCDIRegisters() throws DebugException { ICDIRegister[] result = new ICDIRegister[0]; - CStackFrame currentFrame = getCurrentStackFrame(); - if ( currentFrame != null ) + try { - try - { - result = getCurrentStackFrame().getCDIStackFrame().getRegisters( fRegisterObjects ); - } - catch( CDIException e ) - { - targetRequestFailed( e.getMessage(), null ); - } + result = ((CDebugTarget)getDebugTarget()).getCDITarget().getRegisters( fRegisterObjects ); + } + catch( CDIException e ) + { + targetRequestFailed( e.getMessage(), null ); } return result; } - protected void setCurrentStackFrame( CStackFrame stackFrame ) - { - fCurrentStackFrame = stackFrame; - } - - protected CStackFrame getCurrentStackFrame() - { - return fCurrentStackFrame; - } - private void updateRegisters() throws DebugException { ICDIRegister[] cdiRegisters = getCDIRegisters(); 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 9f01a9e629c..e9a741e90f0 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 @@ -222,7 +222,7 @@ public class CStackFrame extends CDebugElement */ public IRegisterGroup[] getRegisterGroups() throws DebugException { - return ((CDebugTarget)getDebugTarget()).getRegisterGroups( this ); + return ((CDebugTarget)getDebugTarget()).getRegisterGroups(); } /* (non-Javadoc) @@ -230,7 +230,7 @@ public class CStackFrame extends CDebugElement */ public boolean hasRegisterGroups() throws DebugException { - return ((CDebugTarget)getDebugTarget()).getRegisterGroups( this ).length > 0; + return ((CDebugTarget)getDebugTarget()).getRegisterGroups().length > 0; } /* (non-Javadoc) @@ -686,7 +686,6 @@ public class CStackFrame extends CDebugElement protected synchronized void preserve() { preserveVariables(); - preserveRegisters(); } private void preserveVariables() @@ -707,11 +706,6 @@ 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 ad15c1288d2..ddb3090bdd5 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 @@ -963,6 +963,7 @@ public class CThread extends CDebugElement { return; } +// ((CDebugTarget)getDebugTarget()).resetRegisters(); try { getCDIThread().setCurrentStackFrame( ((CStackFrame)frame).getCDIStackFrame() );