From 35dfb7a9a99169b69b5926b3895894fe09389c5c Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Mon, 7 Apr 2008 17:31:51 +0000 Subject: Contributing new disassembly. --- debug/org.eclipse.cdt.debug.ui/plugin.properties | 7 ++ debug/org.eclipse.cdt.debug.ui/plugin.xml | 40 ++++++++++ .../internal/ui/IInternalCDebugUIConstants.java | 7 ++ .../commands/DisassemblyDisplayModeHandler.java | 92 ++++++++++++++++++++++ .../ui/disassembly/editor/DisassemblyEditor.java | 2 +- .../editor/DisassemblyEditorManager.java | 6 +- .../editor/DisassemblyEditorPresentation.java | 46 +++++++++++ .../rendering/DisassemblyMemoryRendering.java | 2 +- .../viewer/DisassemblyDocumentProvider.java | 3 +- .../ui/disassembly/viewer/DisassemblyPane.java | 6 +- .../ui/preferences/ICDebugPreferenceConstants.java | 4 + .../eclipse/cdt/debug/ui/ICDebugUIConstants.java | 13 ++- 12 files changed, 215 insertions(+), 13 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/commands/DisassemblyDisplayModeHandler.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorPresentation.java (limited to 'debug') diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties index ad3b46faef5..54b66e6c789 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.properties +++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties @@ -116,6 +116,13 @@ OpenDisassembly.label = Open Disassembly OpenDisassembly.tooltip = Open disassembly window DisassemblyEditor.name = Disassembly DisassemblyRendering.name = Disassembly + +DisassemblyDisplayMode.name = Disassembly Display Mode +DisassemblyDisplayMode.description = Disassembly display mode +InstructionsDisplayMode.label = Show Instructions +InstructionsDisplayMode.tooltip = Show disassembly instructions +SourceDisplayMode.label = Show Source +SourceDisplayMode.tooltip = Show source code # new disassembly (end) DebugTextHover.label=Debugger diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index 14eaf08422a..2659851eb03 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -1560,6 +1560,19 @@ id="org.eclipse.cdt.debug.ui.command.openDisassembly" name="%OpenDisassembly.name"> + + + + @@ -1584,6 +1597,33 @@ + + + + + + + + + + diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/IInternalCDebugUIConstants.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/IInternalCDebugUIConstants.java index 959c154e5b2..8b164103aaa 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/IInternalCDebugUIConstants.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/IInternalCDebugUIConstants.java @@ -73,4 +73,11 @@ public interface IInternalCDebugUIConstants { * Status code indicating an unexpected internal error. */ public static final int INTERNAL_ERROR = 150; + + // new disassembly (start) + + public static final String DISASM_DISPLAY_MODE_INSTRUCTIONS = "instructions"; //$NON-NLS-1$ + public static final String DISASM_DISPLAY_MODE_SOURCE = "source"; //$NON-NLS-1$ + + // new disassembly (end) } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/commands/DisassemblyDisplayModeHandler.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/commands/DisassemblyDisplayModeHandler.java new file mode 100644 index 00000000000..c372cf0c121 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/commands/DisassemblyDisplayModeHandler.java @@ -0,0 +1,92 @@ +/******************************************************************************* + * 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.commands; + +import java.util.Map; + +import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants; +import org.eclipse.cdt.debug.internal.ui.disassembly.editor.DisassemblyEditorInput; +import org.eclipse.cdt.debug.internal.ui.disassembly.editor.DisassemblyEditorPresentation; +import org.eclipse.cdt.debug.internal.ui.disassembly.viewer.DisassemblyDocumentProvider; +import org.eclipse.cdt.debug.internal.ui.preferences.ICDebugPreferenceConstants; +import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.commands.IElementUpdater; +import org.eclipse.ui.handlers.HandlerUtil; +import org.eclipse.ui.menus.UIElement; +import org.eclipse.ui.texteditor.IDocumentProvider; + +public class DisassemblyDisplayModeHandler extends AbstractHandler implements IElementUpdater { + + private static final String ID_PARAMETER_MODE = "org.eclipse.cdt.debug.command.disassemblyDisplayMode.parameterMode"; //$NON-NLS-1$ + + private boolean fShowInstructions = false; + private boolean fShowSource = false; + + public DisassemblyDisplayModeHandler() { + super(); + fShowInstructions = CDebugUIPlugin.getDefault().getPreferenceStore().getBoolean( ICDebugPreferenceConstants.PREF_DISASM_SHOW_INSTRUCTIONS ); + fShowSource = CDebugUIPlugin.getDefault().getPreferenceStore().getBoolean( ICDebugPreferenceConstants.PREF_DISASM_SHOW_SOURCE ); + } + + /* (non-Javadoc) + * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public Object execute( ExecutionEvent event ) throws ExecutionException { + DisassemblyEditorPresentation presentation = getEditorPresentation( event ); + if ( presentation != null ) { + String param = event.getParameter( ID_PARAMETER_MODE ); + if ( IInternalCDebugUIConstants.DISASM_DISPLAY_MODE_INSTRUCTIONS.equals( param ) ) { + fShowInstructions = !fShowInstructions; + presentation.setShowIntstructions( fShowInstructions ); + } + else if ( IInternalCDebugUIConstants.DISASM_DISPLAY_MODE_SOURCE.equals( param ) ) { + fShowSource = !fShowSource; + presentation.setShowSource( fShowSource ); + } + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.commands.IElementUpdater#updateElement(org.eclipse.ui.menus.UIElement, java.util.Map) + */ + @SuppressWarnings("unchecked") + public void updateElement( UIElement element, Map parameters ) { + String param = (String)parameters.get( ID_PARAMETER_MODE ); + if ( IInternalCDebugUIConstants.DISASM_DISPLAY_MODE_INSTRUCTIONS.equals( param ) ) { + element.setChecked( fShowInstructions ); + } + else if ( IInternalCDebugUIConstants.DISASM_DISPLAY_MODE_SOURCE.equals( param ) ) { + element.setChecked( fShowSource ); + } + } + + private DisassemblyEditorPresentation getEditorPresentation( ExecutionEvent event ) throws ExecutionException { + ISelection s = HandlerUtil.getActiveMenuEditorInputChecked( event ); + if ( s instanceof IStructuredSelection ) { + Object o = ((IStructuredSelection)s).getFirstElement(); + if ( o instanceof DisassemblyEditorInput ) { + IDocumentProvider dp = CDebugUIPlugin.getDefault().getDisassemblyEditorManager().getDocumentProvider(); + if ( dp instanceof DisassemblyDocumentProvider ) { + return (DisassemblyEditorPresentation)((DisassemblyDocumentProvider)dp).getDocumentPresentation( o ); + } + } + } + return null; + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditor.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditor.java index 0a1c5349f45..1b002f14674 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditor.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditor.java @@ -49,7 +49,7 @@ public class DisassemblyEditor extends EditorPart implements ITextEditor, IReusa public DisassemblyEditor() { super(); - fDisassemblyPane = new DisassemblyPane(); + fDisassemblyPane = new DisassemblyPane( "#DisassemblyEditorContext", "#DisassemblyEditorRulerContext" ); //$NON-NLS-1$ //$NON-NLS-2$ } /* (non-Javadoc) 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 c10d3159185..fc97f3826fe 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 @@ -23,6 +23,7 @@ import org.eclipse.cdt.debug.core.model.ISteppingModeTarget; import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants; import org.eclipse.cdt.debug.internal.ui.disassembly.viewer.DisassemblyDocumentProvider; import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.cdt.debug.ui.ICDebugUIConstants; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; @@ -45,7 +46,6 @@ import org.eclipse.ui.progress.UIJob; public class DisassemblyEditorManager implements IWindowListener, IDisassemblyContextListener, IPartListener2 { - 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; @@ -278,7 +278,7 @@ public class DisassemblyEditorManager implements IWindowListener, IDisassemblyCo private boolean isDisassemblyEditorPart( IWorkbenchPartReference partRef ) { // TODO: check all editors contributed via the extension point - return ( partRef.getId().equals( DEFAULT_EDITOR_ID ) ); + return ( partRef.getId().equals( ICDebugUIConstants.ID_DEFAULT_DISASSEMBLY_EDITOR ) ); } private ISourcePresentation getSourcePresentation() { @@ -291,7 +291,7 @@ public class DisassemblyEditorManager implements IWindowListener, IDisassemblyCo } public String getEditorId( IEditorInput input, Object element ) { - return DEFAULT_EDITOR_ID; + return ICDebugUIConstants.ID_DEFAULT_DISASSEMBLY_EDITOR; } }; } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorPresentation.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorPresentation.java new file mode 100644 index 00000000000..15895196399 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorPresentation.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * 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.editor; + +import org.eclipse.cdt.debug.ui.ICDebugUIConstants; +import org.eclipse.cdt.debug.ui.disassembly.IDocumentPresentation; +import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext; + +/** + * org.eclipse.cdt.debug.internal.ui.disassembly.viewer.DisassemblyEditorPresentation: + * //TODO Add description. + */ +public class DisassemblyEditorPresentation extends PresentationContext implements IDocumentPresentation { + + private boolean fShowIntstructions = true; + private boolean fShowSource = false; + + public DisassemblyEditorPresentation() { + super( ICDebugUIConstants.ID_DEFAULT_DISASSEMBLY_EDITOR ); + } + + public boolean showIntstructions() { + return fShowIntstructions; + } + + public void setShowIntstructions( boolean showIntstructions ) { + fShowIntstructions = showIntstructions; + } + + public boolean showSource() { + return fShowSource; + } + + public void setShowSource( boolean showSource ) { + fShowSource = showSource; + } +} 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 index 5a575bcca02..dbed2cfa8d8 100644 --- 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 @@ -34,7 +34,7 @@ public class DisassemblyMemoryRendering extends AbstractMemoryRendering { public DisassemblyMemoryRendering( String renderingId ) { super( renderingId ); - fDisassemblyPane = new DisassemblyPane(); + fDisassemblyPane = new DisassemblyPane( "#DisassemblyRenderingContext", "#DisassemblyRenderingRulerContext" ); //$NON-NLS-1$//$NON-NLS-2$ } /* (non-Javadoc) 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 db98e12835c..de8dfb8afb1 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 @@ -15,6 +15,7 @@ import java.util.HashMap; import java.util.Map; import org.eclipse.cdt.debug.internal.ui.disassembly.editor.DisassemblyEditorInput; +import org.eclipse.cdt.debug.internal.ui.disassembly.editor.DisassemblyEditorPresentation; import org.eclipse.cdt.debug.ui.disassembly.IDocumentPresentation; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; @@ -214,6 +215,6 @@ public class DisassemblyDocumentProvider implements IDocumentProvider { } private IDocumentPresentation createDocumentPresentation( Object context ) { - return null; + return new DisassemblyEditorPresentation(); } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DisassemblyPane.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DisassemblyPane.java index 23c97f44fa2..fff09af7794 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DisassemblyPane.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DisassemblyPane.java @@ -89,10 +89,10 @@ public class DisassemblyPane implements IPropertyChangeListener { private Map fActions = new HashMap( 10 ); - public DisassemblyPane() { + public DisassemblyPane( String contextMenuId, String rulerMenuId ) { fAnnotationPreferences = new MarkerAnnotationPreferences(); - setViewContextMenuId( "#DisassemblyViewContext" ); //$NON-NLS-1$ - setRulerContextMenuId( "#DisassemblyEditorRulerContext" ); //$NON-NLS-1$ + setViewContextMenuId( contextMenuId ); + setRulerContextMenuId( rulerMenuId ); } public void create( Composite parent ) { diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/ICDebugPreferenceConstants.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/ICDebugPreferenceConstants.java index 264fc41f2d4..116a3232a67 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/ICDebugPreferenceConstants.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/ICDebugPreferenceConstants.java @@ -35,4 +35,8 @@ public interface ICDebugPreferenceConstants { * Boolean preference controlling whether primitive types types display char values. */ public static final String PREF_SHOW_CHAR_VALUES = ICDebugUIConstants.PLUGIN_ID + ".cDebug.showCharValues"; //$NON-NLS-1$ + + public static final String PREF_DISASM_SHOW_INSTRUCTIONS = ICDebugUIConstants.PLUGIN_ID + ".disassembly.showInstructions"; //$NON-NLS-1$ + + public static final String PREF_DISASM_SHOW_SOURCE = ICDebugUIConstants.PLUGIN_ID + ".disassembly.showSource"; //$NON-NLS-1$ } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java index 6988a5a9392..8ffaf77c8fd 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java @@ -27,10 +27,15 @@ public interface ICDebugUIConstants { */ public static final String ID_EXECUTABLES_VIEW = PREFIX + "executablesView"; //$NON-NLS-1$ - /** - * Disassembly view identifier (value "org.eclipse.cdt.debug.ui.DisassemblyView"). - */ - public static final String ID_DISASSEMBLY_VIEW = PREFIX + "DisassemblyView"; //$NON-NLS-1$ + /** + * Disassembly view identifier (value "org.eclipse.cdt.debug.ui.DisassemblyView"). + */ + public static final String ID_DISASSEMBLY_VIEW = PREFIX + "DisassemblyView"; //$NON-NLS-1$ + + /** + * Deafult disassembly editor identifier (value "org.eclipse.cdt.debug.ui.disassemblyEditor"). + */ + public static final String ID_DEFAULT_DISASSEMBLY_EDITOR = PREFIX + "disassemblyEditor"; //$NON-NLS-1$ /** * Id for the popup menu associated with the detail (text viewer) part of the Modules view -- cgit v1.2.3