From b45f93e8ce901380c464e8d2d5a5607cc29b8545 Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Fri, 18 Apr 2008 16:18:15 +0000 Subject: [PATCH] Contributing new disassembly. --- .../debug/core/model/IDisassemblyLine.java | 2 +- .../core/model/DisassemblyRetrieval.java | 39 +++++++- debug/org.eclipse.cdt.debug.ui/plugin.xml | 10 ++ .../ui/actions/ToggleBreakpointAdapter.java | 11 ++- .../viewer/DocumentContentProvider.java | 4 +- .../adapters/CDebugElementAdapterFactory.java | 16 ++- .../adapters/CDebugElementProxyFactory.java | 33 ++++--- .../DisassemblyElementAnnotationProvider.java | 1 - .../adapters/DisassemblyElementProxy.java | 88 +++++++++++++++++ .../DisassemblyToggleBreakpointAdapter.java | 98 +++++++++++++++++++ 10 files changed, 278 insertions(+), 24 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyElementProxy.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyToggleBreakpointAdapter.java diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IDisassemblyLine.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IDisassemblyLine.java index 1d899d4f3ac..64d7eea02e7 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IDisassemblyLine.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IDisassemblyLine.java @@ -15,6 +15,6 @@ package org.eclipse.cdt.debug.core.model; * org.eclipse.cdt.debug.core.model.IDisassemblyLine: * //TODO Add description. */ -public interface IDisassemblyLine { +public interface IDisassemblyLine extends ICDebugElement { } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyRetrieval.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyRetrieval.java index 7f9fa9a5ad0..dffb34b59ec 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyRetrieval.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyRetrieval.java @@ -19,9 +19,15 @@ import java.util.List; import org.eclipse.cdt.core.IAddressFactory; import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.cdi.CDIException; +import org.eclipse.cdt.debug.core.cdi.event.ICDIBreakpointMovedEvent; +import org.eclipse.cdt.debug.core.cdi.event.ICDIBreakpointProblemEvent; +import org.eclipse.cdt.debug.core.cdi.event.ICDIChangedEvent; +import org.eclipse.cdt.debug.core.cdi.event.ICDICreatedEvent; +import org.eclipse.cdt.debug.core.cdi.event.ICDIDestroyedEvent; import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent; import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener; import org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction; +import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint; import org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction; import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; import org.eclipse.cdt.debug.core.model.ICStackFrame; @@ -30,6 +36,7 @@ import org.eclipse.cdt.debug.core.model.IDisassemblyLine; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugException; public class DisassemblyRetrieval extends CDebugElement implements ICDIEventListener { @@ -58,10 +65,38 @@ public class DisassemblyRetrieval extends CDebugElement implements ICDIEventList /* (non-Javadoc) * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener#handleDebugEvents(org.eclipse.cdt.debug.core.cdi.event.ICDIEvent[]) */ - public void handleDebugEvents( ICDIEvent[] event ) { - // TODO Auto-generated method stub + public void handleDebugEvents( ICDIEvent[] events ) { + for ( ICDIEvent event : events ) { + Object source = event.getSource(); + if ( (event instanceof ICDICreatedEvent + || event instanceof ICDIChangedEvent + || event instanceof ICDIDestroyedEvent + || event instanceof ICDIBreakpointMovedEvent + || event instanceof ICDIBreakpointProblemEvent ) + && source instanceof ICDILocationBreakpoint ) { + BigInteger address = ((ICDILocationBreakpoint)source).getLocator().getAddress(); + if ( address != null ) { + int index = getIndexForAddress( address, fLines ); + if ( index >= 0 ) { + fireEvent( new DebugEvent( fLines[index], DebugEvent.CHANGE, DebugEvent.STATE ) ); + } + if ( event instanceof ICDIBreakpointMovedEvent ) { + address = ((ICDIBreakpointMovedEvent)event).getNewLocation().getAddress(); + if ( address != null ) { + index = getIndexForAddress( address, fLines ); + if ( index >= 0 ) { + fireEvent( new DebugEvent( fLines[index], DebugEvent.CHANGE, DebugEvent.STATE ) ); + } + } + } + } + } + } } + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.IDisassemblyRetrieval#getInput() + */ public Object getInput() { return fInput; } diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index 5257168a3b9..cf003686cfd 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -1354,6 +1354,16 @@ + + + + + +