From af3f69afb9ed7804041fdb5d405c411ac22cfd4e Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Fri, 4 Apr 2008 16:39:42 +0000 Subject: [PATCH] Contributing new disassembly. --- .../plugin.properties | 11 ++ debug/org.eclipse.cdt.debug.ui/plugin.xml | 57 +++++++++- .../editor/DisassemblyEditorManager.java | 2 +- .../rendering/DisassemblyMemoryRendering.java | 102 ++++++++++++++++++ .../DisassemblyRenderingTypeDelegate.java | 26 +++++ .../viewer/DisassemblyDocumentProvider.java | 2 +- .../disassembly/viewer/VirtualDocument.java | 10 +- .../adapters/CDebugElementAdapterFactory.java | 26 +++-- 8 files changed, 220 insertions(+), 16 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/rendering/DisassemblyMemoryRendering.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/rendering/DisassemblyRenderingTypeDelegate.java diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties index fc3e783e1e8..ad3b46faef5 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.properties +++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties @@ -107,6 +107,17 @@ DisassemblySourceLineColor.description=The color used in the Disassembly view fo DisassemblyFontDefinition.label=Disassembly View Text Font DisassemblyFontDefinition.description=The text font used in the Disassembly view. +# new disassembly +DisassemblyCategory.name = Disassembly +DisassemblyCategory.description = Category for disassembly commands +OpenDisassembly.name = Open Disassembly +OpenDisassembly.description = Open disassembly window +OpenDisassembly.label = Open Disassembly +OpenDisassembly.tooltip = Open disassembly window +DisassemblyEditor.name = Disassembly +DisassemblyRendering.name = Disassembly +# new disassembly (end) + DebugTextHover.label=Debugger DebugTextHover.description=Shows the value of the expression selected in the debug perspective. diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index fefe0c25d0c..14eaf08422a 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -1274,6 +1274,9 @@ + + + renderingIds="org.eclipse.debug.ui.rendering.raw_memory,org.eclipse.debug.ui.rendering.ascii,org.eclipse.debug.ui.rendering.signedint,org.eclipse.debug.ui.rendering.unsignedint,org.eclipse.cdt.debug.ui.rendering.disassembly"> + + @@ -1434,6 +1442,13 @@ class="org.eclipse.cdt.debug.internal.ui.sourcelookup.CSourceNotFoundEditor" id="org.eclipse.cdt.debug.ui.SourceNotFoundEditor"> + + + + + + + + + + + + + + + + + + + + diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorManager.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorManager.java index 8aa0179866f..c10d3159185 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorManager.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorManager.java @@ -45,7 +45,7 @@ import org.eclipse.ui.progress.UIJob; public class DisassemblyEditorManager implements IWindowListener, IDisassemblyContextListener, IPartListener2 { - private static final String DEFAULT_EDITOR_ID = "com.arm.eclipse.rvd.ui.disassemblyEditor"; //$NON-NLS-1$ + private static final String DEFAULT_EDITOR_ID = "org.eclipse.cdt.debug.ui.disassemblyEditor"; //$NON-NLS-1$ private Map fEditorParts; private Map fOpenDisassemblyPolicy; private Map fSteppingModePolicy; diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/rendering/DisassemblyMemoryRendering.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/rendering/DisassemblyMemoryRendering.java new file mode 100644 index 00000000000..5a575bcca02 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/rendering/DisassemblyMemoryRendering.java @@ -0,0 +1,102 @@ +/******************************************************************************* + * Copyright (c) 2008 ARM Limited 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: + * ARM Limited - Initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.debug.internal.ui.disassembly.rendering; + +import org.eclipse.cdt.debug.core.disassembly.IDisassemblyContextProvider; +import org.eclipse.cdt.debug.internal.ui.disassembly.viewer.DisassemblyPane; +import org.eclipse.cdt.debug.internal.ui.disassembly.viewer.VirtualDocument; +import org.eclipse.cdt.debug.internal.ui.disassembly.viewer.VirtualSourceViewer; +import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyAnnotationModel; +import org.eclipse.cdt.debug.ui.disassembly.IDocumentPresentation; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.debug.core.model.IMemoryBlock; +import org.eclipse.debug.ui.memory.AbstractMemoryRendering; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.SashForm; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; + +public class DisassemblyMemoryRendering extends AbstractMemoryRendering { + + protected SashForm fSashForm; + protected DisassemblyPane fDisassemblyPane; + + public DisassemblyMemoryRendering( String renderingId ) { + super( renderingId ); + fDisassemblyPane = new DisassemblyPane(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.memory.IMemoryRendering#createControl(org.eclipse.swt.widgets.Composite) + */ + public Control createControl( Composite parent ) { + Composite composite = new Composite( parent, SWT.BORDER ); + GridLayout layout = new GridLayout(); + layout.marginHeight = 0; + layout.marginWidth = 0; + layout.verticalSpacing = 0; + composite.setLayout( layout ); + composite.setLayoutData( new GridData( GridData.FILL_BOTH ) ); + createViewer( composite ); + return composite; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.memory.IMemoryRendering#getControl() + */ + public Control getControl() { + return fDisassemblyPane.getControl(); + } + + protected VirtualSourceViewer getViewer() { + return fDisassemblyPane.getViewer(); + } + + protected void createViewer( final Composite parent ) { + fSashForm = new SashForm( parent, SWT.VERTICAL ); + fSashForm.setLayoutData( new GridData( GridData.FILL_BOTH ) ); + + fDisassemblyPane.create( fSashForm ); + +// createGoToAddressComposite( fSashForm ); +// hideGotoAddressComposite(); + + IMemoryBlock memoryBlock = getMemoryBlock(); + IDisassemblyContextProvider contextProvider = getDisassemblyContextProvider( memoryBlock ); + Object disassemblyContext = null; + if ( contextProvider != null ) { + disassemblyContext = contextProvider.getDisassemblyContext( memoryBlock ); + } + DisassemblyAnnotationModel annotationModel = new DisassemblyAnnotationModel(); + VirtualDocument document = new VirtualDocument( annotationModel, getDocumentPresentationContext(), disassemblyContext ); + getViewer().setDocument( document ); + document.getContentProvider().changeInput( getViewer(), document.getPresentationContext(), null, getMemoryBlock(), document.getCurrentOffset() ); + } + + private IDocumentPresentation getDocumentPresentationContext() { + return null; + } + + private IDisassemblyContextProvider getDisassemblyContextProvider( Object element ) { + IDisassemblyContextProvider adapter = null; + if ( element instanceof IDisassemblyContextProvider ) { + adapter = (IDisassemblyContextProvider)element; + } + else if ( element instanceof IAdaptable ) { + IAdaptable adaptable = (IAdaptable)element; + adapter = (IDisassemblyContextProvider)adaptable.getAdapter( IDisassemblyContextProvider.class ); + } + return adapter; + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/rendering/DisassemblyRenderingTypeDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/rendering/DisassemblyRenderingTypeDelegate.java new file mode 100644 index 00000000000..d37e296d582 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/rendering/DisassemblyRenderingTypeDelegate.java @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2008 ARM Limited 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: + * ARM Limited - Initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.debug.internal.ui.disassembly.rendering; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.ui.memory.IMemoryRendering; +import org.eclipse.debug.ui.memory.IMemoryRenderingTypeDelegate; + +public class DisassemblyRenderingTypeDelegate implements IMemoryRenderingTypeDelegate { + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.memory.IMemoryRenderingTypeDelegate#createRendering(java.lang.String) + */ + public IMemoryRendering createRendering( String id ) throws CoreException { + return new DisassemblyMemoryRendering( id ); + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DisassemblyDocumentProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DisassemblyDocumentProvider.java index 894e64e2172..db98e12835c 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DisassemblyDocumentProvider.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DisassemblyDocumentProvider.java @@ -210,7 +210,7 @@ public class DisassemblyDocumentProvider implements IDocumentProvider { } private VirtualDocument createDocument( Object disassemblyContext, IDocumentPresentation presentationContext, IAnnotationModel annotationModel ) { - return null; + return new VirtualDocument( annotationModel, presentationContext, disassemblyContext ); } private IDocumentPresentation createDocumentPresentation( Object context ) { diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/VirtualDocument.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/VirtualDocument.java index ab1f129788b..0bc9ed808a5 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/VirtualDocument.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/VirtualDocument.java @@ -16,21 +16,21 @@ import java.util.Properties; import org.eclipse.cdt.debug.ui.disassembly.IDocumentPresentation; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.source.Annotation; -import org.eclipse.jface.text.source.AnnotationModel; +import org.eclipse.jface.text.source.IAnnotationModel; /** * Converts the model elements into the text content */ -abstract public class VirtualDocument extends Document { +public class VirtualDocument extends Document { private Object fRoot; private int fCurrentOffset = 0; private IDocumentPresentation fPresentationContext; - private AnnotationModel fAnnotationModel; + private IAnnotationModel fAnnotationModel; private DocumentContentProvider fContentProvider; - public VirtualDocument( AnnotationModel annotationModel, IDocumentPresentation presentationContext, Object root ) { + public VirtualDocument( IAnnotationModel annotationModel, IDocumentPresentation presentationContext, Object root ) { super(); fRoot = root; fPresentationContext = presentationContext; @@ -47,7 +47,7 @@ abstract public class VirtualDocument extends Document { return fPresentationContext; } - public AnnotationModel getAnnotationModel() { + public IAnnotationModel getAnnotationModel() { return fAnnotationModel; } 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 352ce28eba9..92246dfaa58 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 @@ -14,11 +14,13 @@ package org.eclipse.cdt.debug.internal.ui.elements.adapters; import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.debug.core.disassembly.IDisassemblyContextProvider; import org.eclipse.cdt.debug.core.model.ICDebugTarget; import org.eclipse.cdt.debug.core.model.ICModule; import org.eclipse.cdt.debug.core.model.ICStackFrame; import org.eclipse.cdt.debug.core.model.ICThread; import org.eclipse.cdt.debug.core.model.IModuleRetrieval; +import org.eclipse.cdt.debug.internal.core.CDisassemblyContextProvider; import org.eclipse.cdt.debug.internal.ui.views.modules.ModuleContentProvider; import org.eclipse.cdt.debug.internal.ui.views.modules.ModuleMementoProvider; import org.eclipse.core.runtime.IAdapterFactory; @@ -38,6 +40,8 @@ public class CDebugElementAdapterFactory implements IAdapterFactory { private static IElementMementoProvider fgStackFrameMementoProvider = new CStackFrameMementoProvider(); private static IElementMementoProvider fgModuleMementoProvider = new ModuleMementoProvider(); + private static IDisassemblyContextProvider fgDisassemblyContextProvider = new CDisassemblyContextProvider(); + /* (non-Javadoc) * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class) */ @@ -80,14 +84,19 @@ public class CDebugElementAdapterFactory implements IAdapterFactory { if ( adaptableObject instanceof ICStackFrame ) { return fgStackFrameMementoProvider; } - if ( adaptableObject instanceof IModuleRetrieval || - adaptableObject instanceof ICThread || - adaptableObject instanceof ICModule || - adaptableObject instanceof ICElement) - { - return fgModuleMementoProvider; - } - } + if ( adaptableObject instanceof IModuleRetrieval || + adaptableObject instanceof ICThread || + adaptableObject instanceof ICModule || + adaptableObject instanceof ICElement) + { + return fgModuleMementoProvider; + } + } + if ( adapterType.equals( IDisassemblyContextProvider.class ) ) { + if ( adaptableObject instanceof ICStackFrame ) { + return fgDisassemblyContextProvider; + } + } return null; } @@ -99,6 +108,7 @@ public class CDebugElementAdapterFactory implements IAdapterFactory { IElementContentProvider.class, IModelProxyFactory.class, IElementMementoProvider.class, + IDisassemblyContextProvider.class, }; } }