mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 14:42:11 +02:00
[305533] Removed old disassembly view from codebase
This commit is contained in:
parent
20b24a0ea7
commit
cde61d6544
25 changed files with 8 additions and 2225 deletions
|
@ -16,7 +16,6 @@ Export-Package:
|
||||||
org.eclipse.cdt.debug.internal.ui.propertypages;x-internal:=true,
|
org.eclipse.cdt.debug.internal.ui.propertypages;x-internal:=true,
|
||||||
org.eclipse.cdt.debug.internal.ui.sourcelookup;x-friends:="org.eclipse.cdt.dsf.ui",
|
org.eclipse.cdt.debug.internal.ui.sourcelookup;x-friends:="org.eclipse.cdt.dsf.ui",
|
||||||
org.eclipse.cdt.debug.internal.ui.views;x-internal:=true,
|
org.eclipse.cdt.debug.internal.ui.views;x-internal:=true,
|
||||||
org.eclipse.cdt.debug.internal.ui.views.disassembly;x-internal:=true,
|
|
||||||
org.eclipse.cdt.debug.internal.ui.views.executables;x-internal:=true,
|
org.eclipse.cdt.debug.internal.ui.views.executables;x-internal:=true,
|
||||||
org.eclipse.cdt.debug.internal.ui.views.modules;x-internal:=true,
|
org.eclipse.cdt.debug.internal.ui.views.modules;x-internal:=true,
|
||||||
org.eclipse.cdt.debug.internal.ui.views.signals;x-internal:=true,
|
org.eclipse.cdt.debug.internal.ui.views.signals;x-internal:=true,
|
||||||
|
|
|
@ -834,41 +834,6 @@
|
||||||
</enablement>
|
</enablement>
|
||||||
</action>
|
</action>
|
||||||
</viewerContribution>
|
</viewerContribution>
|
||||||
<viewerContribution
|
|
||||||
targetID="#DisassemblyViewContext"
|
|
||||||
id="org.eclipse.cdt.debug.ui.disassemblyView.popupMenu">
|
|
||||||
<visibility>
|
|
||||||
<and>
|
|
||||||
<systemProperty
|
|
||||||
value="true"
|
|
||||||
name="org.eclipse.cdt.debug.ui.debuggerActive"/>
|
|
||||||
<objectClass name="org.eclipse.jface.text.ITextSelection"/>
|
|
||||||
</and>
|
|
||||||
</visibility>
|
|
||||||
<action
|
|
||||||
class="org.eclipse.cdt.debug.internal.ui.actions.ResumeAtLineActionDelegate"
|
|
||||||
enablesFor="1"
|
|
||||||
helpContextId="resume_at_line_action_context"
|
|
||||||
icon="icons/elcl16/resume_at_line_co.gif"
|
|
||||||
id="org.eclipse.cdt.debug.ui.resumeAtLineAction"
|
|
||||||
label="%ResumeAtLineAction.label"
|
|
||||||
menubarPath="additions"/>
|
|
||||||
<action
|
|
||||||
class="org.eclipse.cdt.debug.internal.ui.actions.MoveToLineActionDelegate"
|
|
||||||
enablesFor="1"
|
|
||||||
helpContextId="move_to_line_action_context"
|
|
||||||
icon="icons/elcl16/move_to_line_co.gif"
|
|
||||||
id="org.eclipse.cdt.debug.ui.moveToLineAction"
|
|
||||||
label="%MoveToLineAction.label"
|
|
||||||
menubarPath="additions"/>
|
|
||||||
<action
|
|
||||||
class="org.eclipse.debug.ui.actions.RunToLineActionDelegate"
|
|
||||||
definitionId="org.eclipse.debug.ui.commands.RunToLine"
|
|
||||||
helpContextId="run_to_line_action_context"
|
|
||||||
id="org.eclipse.cdt.debug.ui.runToLineAction"
|
|
||||||
label="%RunToLineAction.label"
|
|
||||||
menubarPath="additions"/>
|
|
||||||
</viewerContribution>
|
|
||||||
<objectContribution
|
<objectContribution
|
||||||
objectClass="org.eclipse.cdt.debug.core.model.ICModule"
|
objectClass="org.eclipse.cdt.debug.core.model.ICModule"
|
||||||
id="org.eclipse.cdt.debug.ui.ModuleActions">
|
id="org.eclipse.cdt.debug.ui.ModuleActions">
|
||||||
|
@ -1057,23 +1022,6 @@
|
||||||
tooltip="%AddEventBreakpoint.tooltip">
|
tooltip="%AddEventBreakpoint.tooltip">
|
||||||
</action>
|
</action>
|
||||||
</viewContribution>
|
</viewContribution>
|
||||||
<viewContribution
|
|
||||||
id="org.eclipse.cdt.debug.ui.disassemblyView.menu"
|
|
||||||
targetID="org.eclipse.cdt.debug.ui.DisassemblyView">
|
|
||||||
<menu
|
|
||||||
id="org.eclipse.cdt.debug.ui.disassemblyViewMenu"
|
|
||||||
label="%disassemblyViewMenu.label">
|
|
||||||
</menu>
|
|
||||||
<action
|
|
||||||
class="org.eclipse.cdt.debug.internal.ui.views.disassembly.GoToAddressActionDelegate"
|
|
||||||
icon="icons/elcl16/show_ascii.gif"
|
|
||||||
id="org.eclipse.cdt.debug.internal.ui.actions.disassemblyViewAction"
|
|
||||||
label="%DisassemblyViewAction.label"
|
|
||||||
menubarPath="org.eclipse.cdt.debug.ui.disassemblyViewMenu"
|
|
||||||
style="push"
|
|
||||||
tooltip="%DisassemblyViewAction.tooltip">
|
|
||||||
</action>
|
|
||||||
</viewContribution>
|
|
||||||
<viewContribution
|
<viewContribution
|
||||||
targetID="org.eclipse.debug.ui.VariableView"
|
targetID="org.eclipse.debug.ui.VariableView"
|
||||||
id="org.eclipse.debug.ui.variablesView.toolbar">
|
id="org.eclipse.debug.ui.variablesView.toolbar">
|
||||||
|
@ -1412,15 +1360,6 @@
|
||||||
<adapter type="org.eclipse.cdt.debug.internal.ui.actions.IResumeAtLineTarget"/>
|
<adapter type="org.eclipse.cdt.debug.internal.ui.actions.IResumeAtLineTarget"/>
|
||||||
<adapter type="org.eclipse.cdt.debug.internal.ui.actions.IMoveToLineTarget"/>
|
<adapter type="org.eclipse.cdt.debug.internal.ui.actions.IMoveToLineTarget"/>
|
||||||
</factory>
|
</factory>
|
||||||
<factory
|
|
||||||
class="org.eclipse.cdt.debug.internal.ui.actions.RetargettableActionAdapterFactory"
|
|
||||||
adaptableType="org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyView">
|
|
||||||
<adapter
|
|
||||||
type="org.eclipse.debug.ui.actions.IRunToLineTarget">
|
|
||||||
</adapter>
|
|
||||||
<adapter type="org.eclipse.cdt.debug.internal.ui.actions.IResumeAtLineTarget"/>
|
|
||||||
<adapter type="org.eclipse.cdt.debug.internal.ui.actions.IMoveToLineTarget"/>
|
|
||||||
</factory>
|
|
||||||
<factory
|
<factory
|
||||||
class="org.eclipse.cdt.debug.internal.ui.CBreakpointWorkbenchAdapterFactory"
|
class="org.eclipse.cdt.debug.internal.ui.CBreakpointWorkbenchAdapterFactory"
|
||||||
adaptableType="org.eclipse.cdt.debug.core.model.ICBreakpoint">
|
adaptableType="org.eclipse.cdt.debug.core.model.ICBreakpoint">
|
||||||
|
@ -1786,43 +1725,6 @@
|
||||||
</enablement>
|
</enablement>
|
||||||
</detailFactories>
|
</detailFactories>
|
||||||
</extension>
|
</extension>
|
||||||
<extension
|
|
||||||
point="org.eclipse.ui.commands">
|
|
||||||
<category
|
|
||||||
description="%DisassemblyCategory.description"
|
|
||||||
id="org.eclipse.cdt.debug.ui.category.disassembly"
|
|
||||||
name="%DisassemblyCategory.name">
|
|
||||||
</category>
|
|
||||||
<command
|
|
||||||
categoryId="org.eclipse.cdt.debug.ui.category.disassembly"
|
|
||||||
defaultHandler="org.eclipse.cdt.debug.internal.ui.disassembly.commands.OpenDisassemblyHandler"
|
|
||||||
description="%OpenDisassembly.description"
|
|
||||||
helpContextId="open_disassembly_context"
|
|
||||||
id="org.eclipse.cdt.debug.ui.command.openDisassembly"
|
|
||||||
name="%OpenDisassembly.name">
|
|
||||||
</command>
|
|
||||||
<command
|
|
||||||
categoryId="org.eclipse.cdt.debug.ui.category.disassembly"
|
|
||||||
defaultHandler="org.eclipse.cdt.debug.internal.ui.disassembly.commands.DisassemblyDisplayModeHandler"
|
|
||||||
description="%DisassemblyDisplayMode.description"
|
|
||||||
helpContextId="disassembly_display_mode_command_context"
|
|
||||||
id="org.eclipse.cdt.debug.command.disassemblyDisplayMode"
|
|
||||||
name="%DisassemblyDisplayMode.name">
|
|
||||||
<commandParameter
|
|
||||||
id="org.eclipse.cdt.debug.command.disassemblyDisplayMode.parameterMode"
|
|
||||||
name="%displayMode.name"
|
|
||||||
optional="false">
|
|
||||||
</commandParameter>
|
|
||||||
</command>
|
|
||||||
<command
|
|
||||||
categoryId="org.eclipse.debug.ui.category.run"
|
|
||||||
defaultHandler="org.eclipse.cdt.debug.internal.ui.actions.CBreakpointPropertiesHandler"
|
|
||||||
description="%BreakpointPropertiesCommand.description"
|
|
||||||
helpContextId="breakpoint_properties_action_context"
|
|
||||||
id="org.eclipse.cdt.debug.command.breakpointProperties"
|
|
||||||
name="%BreakpointPropertiesCommand.name">
|
|
||||||
</command>
|
|
||||||
</extension>
|
|
||||||
<extension
|
<extension
|
||||||
point="org.eclipse.ui.menus">
|
point="org.eclipse.ui.menus">
|
||||||
<menuContribution
|
<menuContribution
|
||||||
|
|
|
@ -19,7 +19,7 @@ import org.eclipse.cdt.debug.core.model.ICStackFrame;
|
||||||
import org.eclipse.cdt.debug.core.model.ICType;
|
import org.eclipse.cdt.debug.core.model.ICType;
|
||||||
import org.eclipse.cdt.debug.core.model.ICValue;
|
import org.eclipse.cdt.debug.core.model.ICValue;
|
||||||
import org.eclipse.cdt.debug.core.model.IEnableDisableTarget;
|
import org.eclipse.cdt.debug.core.model.IEnableDisableTarget;
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyEditorInput;
|
import org.eclipse.cdt.debug.internal.ui.disassembly.rendering.DisassemblyEditorInput;
|
||||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
||||||
import org.eclipse.core.filesystem.URIUtil;
|
import org.eclipse.core.filesystem.URIUtil;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
|
@ -13,12 +13,12 @@ package org.eclipse.cdt.debug.internal.ui.actions;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyView;
|
|
||||||
import org.eclipse.core.resources.IMarker;
|
import org.eclipse.core.resources.IMarker;
|
||||||
import org.eclipse.core.runtime.Assert;
|
import org.eclipse.core.runtime.Assert;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.debug.core.DebugPlugin;
|
import org.eclipse.debug.core.DebugPlugin;
|
||||||
import org.eclipse.debug.core.model.IBreakpoint;
|
import org.eclipse.debug.core.model.IBreakpoint;
|
||||||
|
import org.eclipse.debug.ui.actions.RulerBreakpointAction;
|
||||||
import org.eclipse.jface.action.Action;
|
import org.eclipse.jface.action.Action;
|
||||||
import org.eclipse.jface.text.BadLocationException;
|
import org.eclipse.jface.text.BadLocationException;
|
||||||
import org.eclipse.jface.text.IDocument;
|
import org.eclipse.jface.text.IDocument;
|
||||||
|
@ -49,7 +49,7 @@ public abstract class AbstractBreakpointRulerAction extends Action implements IU
|
||||||
* @param info vertical ruler information
|
* @param info vertical ruler information
|
||||||
*/
|
*/
|
||||||
public AbstractBreakpointRulerAction(IWorkbenchPart part, IVerticalRulerInfo info) {
|
public AbstractBreakpointRulerAction(IWorkbenchPart part, IVerticalRulerInfo info) {
|
||||||
Assert.isTrue(part instanceof ITextEditor || part instanceof DisassemblyView);
|
Assert.isTrue(part instanceof ITextEditor);
|
||||||
fTargetPart = part;
|
fTargetPart = part;
|
||||||
fRulerInfo = info;
|
fRulerInfo = info;
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ public abstract class AbstractBreakpointRulerAction extends Action implements IU
|
||||||
IAnnotationModel annotationModel = getAnnotationModel();
|
IAnnotationModel annotationModel = getAnnotationModel();
|
||||||
IDocument document = getDocument();
|
IDocument document = getDocument();
|
||||||
if (annotationModel != null) {
|
if (annotationModel != null) {
|
||||||
Iterator iterator = annotationModel.getAnnotationIterator();
|
Iterator<?> iterator = annotationModel.getAnnotationIterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
Object object = iterator.next();
|
Object object = iterator.next();
|
||||||
if (object instanceof SimpleMarkerAnnotation) {
|
if (object instanceof SimpleMarkerAnnotation) {
|
||||||
|
@ -116,12 +116,6 @@ public abstract class AbstractBreakpointRulerAction extends Action implements IU
|
||||||
if ( provider != null )
|
if ( provider != null )
|
||||||
return provider.getDocument( textEditor.getEditorInput() );
|
return provider.getDocument( textEditor.getEditorInput() );
|
||||||
}
|
}
|
||||||
else if ( targetPart instanceof DisassemblyView ) {
|
|
||||||
DisassemblyView dv = (DisassemblyView)targetPart;
|
|
||||||
IDocumentProvider provider = dv.getDocumentProvider();
|
|
||||||
if ( provider != null )
|
|
||||||
return provider.getDocument( dv.getInput() );
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,12 +127,6 @@ public abstract class AbstractBreakpointRulerAction extends Action implements IU
|
||||||
if ( provider != null )
|
if ( provider != null )
|
||||||
return provider.getAnnotationModel( textEditor.getEditorInput() );
|
return provider.getAnnotationModel( textEditor.getEditorInput() );
|
||||||
}
|
}
|
||||||
else if ( targetPart instanceof DisassemblyView ) {
|
|
||||||
DisassemblyView dv = (DisassemblyView)targetPart;
|
|
||||||
IDocumentProvider provider = dv.getDocumentProvider();
|
|
||||||
if ( provider != null )
|
|
||||||
return provider.getAnnotationModel( dv.getInput() );
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,18 +11,14 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.debug.internal.ui.actions;
|
package org.eclipse.cdt.debug.internal.ui.actions;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.IAddress;
|
|
||||||
import org.eclipse.cdt.debug.core.CDIDebugModel;
|
import org.eclipse.cdt.debug.core.CDIDebugModel;
|
||||||
import org.eclipse.cdt.debug.core.CDebugUtils;
|
import org.eclipse.cdt.debug.core.CDebugUtils;
|
||||||
import org.eclipse.cdt.debug.core.model.IMoveToAddress;
|
|
||||||
import org.eclipse.cdt.debug.core.model.IMoveToLine;
|
import org.eclipse.cdt.debug.core.model.IMoveToLine;
|
||||||
import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants;
|
import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants;
|
||||||
import org.eclipse.cdt.debug.internal.core.model.CDebugElement;
|
import org.eclipse.cdt.debug.internal.core.model.CDebugElement;
|
||||||
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
||||||
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
|
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
|
||||||
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
|
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyEditorInput;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyView;
|
|
||||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
|
@ -95,35 +91,6 @@ public class MoveToLineAdapter implements IMoveToLineTarget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( part instanceof DisassemblyView ) {
|
|
||||||
IEditorInput input = ((DisassemblyView)part).getInput();
|
|
||||||
if ( !(input instanceof DisassemblyEditorInput) ) {
|
|
||||||
errorMessage = ActionMessages.getString( "MoveToLineAdapter.2" ); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ITextSelection textSelection = (ITextSelection)selection;
|
|
||||||
int lineNumber = textSelection.getStartLine() + 1;
|
|
||||||
final IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber );
|
|
||||||
if ( address != null && target instanceof IAdaptable ) {
|
|
||||||
final IMoveToAddress moveToAddress = (IMoveToAddress)((IAdaptable)target).getAdapter( IMoveToAddress.class );
|
|
||||||
if ( moveToAddress != null && moveToAddress.canMoveToAddress( address ) ) {
|
|
||||||
Runnable r = new Runnable() {
|
|
||||||
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
moveToAddress.moveToAddress( address );
|
|
||||||
}
|
|
||||||
catch( DebugException e ) {
|
|
||||||
failed( e );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
runInBackground( r );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
errorMessage = ActionMessages.getString( "MoveToLineAdapter.3" ); //$NON-NLS-1$
|
errorMessage = ActionMessages.getString( "MoveToLineAdapter.3" ); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
@ -172,19 +139,6 @@ public class MoveToLineAdapter implements IMoveToLineTarget {
|
||||||
int lineNumber = textSelection.getStartLine() + 1;
|
int lineNumber = textSelection.getStartLine() + 1;
|
||||||
return moveToLine.canMoveToLine(path.toPortableString(), lineNumber );
|
return moveToLine.canMoveToLine(path.toPortableString(), lineNumber );
|
||||||
}
|
}
|
||||||
if ( part instanceof DisassemblyView ) {
|
|
||||||
IMoveToAddress moveToAddress = (IMoveToAddress)((IAdaptable)target).getAdapter( IMoveToAddress.class );
|
|
||||||
if ( moveToAddress == null )
|
|
||||||
return false;
|
|
||||||
IEditorInput input = ((DisassemblyView)part).getInput();
|
|
||||||
if ( !(input instanceof DisassemblyEditorInput) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
ITextSelection textSelection = (ITextSelection)selection;
|
|
||||||
int lineNumber = textSelection.getStartLine() + 1;
|
|
||||||
IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber );
|
|
||||||
return moveToAddress.canMoveToAddress( address );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,18 +11,14 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.debug.internal.ui.actions;
|
package org.eclipse.cdt.debug.internal.ui.actions;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.IAddress;
|
|
||||||
import org.eclipse.cdt.debug.core.CDIDebugModel;
|
import org.eclipse.cdt.debug.core.CDIDebugModel;
|
||||||
import org.eclipse.cdt.debug.core.CDebugUtils;
|
import org.eclipse.cdt.debug.core.CDebugUtils;
|
||||||
import org.eclipse.cdt.debug.core.model.IResumeAtAddress;
|
|
||||||
import org.eclipse.cdt.debug.core.model.IResumeAtLine;
|
import org.eclipse.cdt.debug.core.model.IResumeAtLine;
|
||||||
import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants;
|
import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants;
|
||||||
import org.eclipse.cdt.debug.internal.core.model.CDebugElement;
|
import org.eclipse.cdt.debug.internal.core.model.CDebugElement;
|
||||||
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
||||||
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
|
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
|
||||||
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
|
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyEditorInput;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyView;
|
|
||||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
|
@ -94,35 +90,6 @@ public class ResumeAtLineAdapter implements IResumeAtLineTarget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( part instanceof DisassemblyView ) {
|
|
||||||
IEditorInput input = ((DisassemblyView)part).getInput();
|
|
||||||
if ( !(input instanceof DisassemblyEditorInput) ) {
|
|
||||||
errorMessage = ActionMessages.getString( "ResumeAtLineAdapter.2" ); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ITextSelection textSelection = (ITextSelection)selection;
|
|
||||||
int lineNumber = textSelection.getStartLine() + 1;
|
|
||||||
final IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber );
|
|
||||||
if ( address != null && target instanceof IAdaptable ) {
|
|
||||||
final IResumeAtAddress resumeAtAddress = (IResumeAtAddress)((IAdaptable)target).getAdapter( IResumeAtAddress.class );
|
|
||||||
if ( resumeAtAddress != null && resumeAtAddress.canResumeAtAddress( address ) ) {
|
|
||||||
Runnable r = new Runnable() {
|
|
||||||
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
resumeAtAddress.resumeAtAddress( address );
|
|
||||||
}
|
|
||||||
catch( DebugException e ) {
|
|
||||||
failed( e );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
runInBackground( r );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
errorMessage = ActionMessages.getString( "ResumeAtLineAdapter.3" ); //$NON-NLS-1$
|
errorMessage = ActionMessages.getString( "ResumeAtLineAdapter.3" ); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
@ -170,19 +137,6 @@ public class ResumeAtLineAdapter implements IResumeAtLineTarget {
|
||||||
int lineNumber = textSelection.getStartLine() + 1;
|
int lineNumber = textSelection.getStartLine() + 1;
|
||||||
return resumeAtLine.canResumeAtLine( path.toPortableString(), lineNumber );
|
return resumeAtLine.canResumeAtLine( path.toPortableString(), lineNumber );
|
||||||
}
|
}
|
||||||
if ( part instanceof DisassemblyView ) {
|
|
||||||
IResumeAtAddress resumeAtAddress = (IResumeAtAddress)((IAdaptable)target).getAdapter( IResumeAtAddress.class );
|
|
||||||
if ( resumeAtAddress == null )
|
|
||||||
return false;
|
|
||||||
IEditorInput input = ((DisassemblyView)part).getInput();
|
|
||||||
if ( !(input instanceof DisassemblyEditorInput) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
ITextSelection textSelection = (ITextSelection)selection;
|
|
||||||
int lineNumber = textSelection.getStartLine() + 1;
|
|
||||||
IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber );
|
|
||||||
return resumeAtAddress.canResumeAtAddress( address );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,18 +11,14 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.debug.internal.ui.actions;
|
package org.eclipse.cdt.debug.internal.ui.actions;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.IAddress;
|
|
||||||
import org.eclipse.cdt.debug.core.CDIDebugModel;
|
import org.eclipse.cdt.debug.core.CDIDebugModel;
|
||||||
import org.eclipse.cdt.debug.core.CDebugUtils;
|
import org.eclipse.cdt.debug.core.CDebugUtils;
|
||||||
import org.eclipse.cdt.debug.core.model.IRunToAddress;
|
|
||||||
import org.eclipse.cdt.debug.core.model.IRunToLine;
|
import org.eclipse.cdt.debug.core.model.IRunToLine;
|
||||||
import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants;
|
import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants;
|
||||||
import org.eclipse.cdt.debug.internal.core.model.CDebugElement;
|
import org.eclipse.cdt.debug.internal.core.model.CDebugElement;
|
||||||
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
||||||
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
|
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
|
||||||
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
|
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyEditorInput;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyView;
|
|
||||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
|
@ -98,35 +94,6 @@ public class RunToLineAdapter implements IRunToLineTarget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( part instanceof DisassemblyView ) {
|
|
||||||
IEditorInput input = ((DisassemblyView)part).getInput();
|
|
||||||
if ( !(input instanceof DisassemblyEditorInput) ) {
|
|
||||||
errorMessage = ActionMessages.getString( "RunToLineAdapter.Empty_editor_1" ); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ITextSelection textSelection = (ITextSelection)selection;
|
|
||||||
int lineNumber = textSelection.getStartLine() + 1;
|
|
||||||
final IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber );
|
|
||||||
if ( address != null && target instanceof IAdaptable ) {
|
|
||||||
final IRunToAddress runToAddress = (IRunToAddress)((IAdaptable)target).getAdapter( IRunToAddress.class );
|
|
||||||
if ( runToAddress != null && runToAddress.canRunToAddress( address ) ) {
|
|
||||||
Runnable r = new Runnable() {
|
|
||||||
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
runToAddress.runToAddress( address, DebugUITools.getPreferenceStore().getBoolean( IDebugUIConstants.PREF_SKIP_BREAKPOINTS_DURING_RUN_TO_LINE ) );
|
|
||||||
}
|
|
||||||
catch( DebugException e ) {
|
|
||||||
failed( e );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
runInBackground( r );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
errorMessage = ActionMessages.getString( "RunToLineAdapter.Operation_is_not_supported_1" ); //$NON-NLS-1$
|
errorMessage = ActionMessages.getString( "RunToLineAdapter.Operation_is_not_supported_1" ); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
@ -174,19 +141,6 @@ public class RunToLineAdapter implements IRunToLineTarget {
|
||||||
int lineNumber = textSelection.getStartLine() + 1;
|
int lineNumber = textSelection.getStartLine() + 1;
|
||||||
return runToLine.canRunToLine( path.toPortableString(), lineNumber );
|
return runToLine.canRunToLine( path.toPortableString(), lineNumber );
|
||||||
}
|
}
|
||||||
if ( part instanceof DisassemblyView ) {
|
|
||||||
IRunToAddress runToAddress = (IRunToAddress)((IAdaptable)target).getAdapter( IRunToAddress.class );
|
|
||||||
if ( runToAddress == null )
|
|
||||||
return false;
|
|
||||||
IEditorInput input = ((DisassemblyView)part).getInput();
|
|
||||||
if ( !(input instanceof DisassemblyEditorInput) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
ITextSelection textSelection = (ITextSelection)selection;
|
|
||||||
int lineNumber = textSelection.getStartLine() + 1;
|
|
||||||
IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber );
|
|
||||||
return runToAddress.canRunToAddress( address );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.debug.internal.ui.actions;
|
package org.eclipse.cdt.debug.internal.ui.actions;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.IAddress;
|
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
@ -33,8 +32,6 @@ import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
|
||||||
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
|
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
|
||||||
import org.eclipse.cdt.debug.internal.ui.disassembly.editor.DisassemblyEditor;
|
import org.eclipse.cdt.debug.internal.ui.disassembly.editor.DisassemblyEditor;
|
||||||
import org.eclipse.cdt.debug.internal.ui.disassembly.viewer.VirtualDocument;
|
import org.eclipse.cdt.debug.internal.ui.disassembly.viewer.VirtualDocument;
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyEditorInput;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyView;
|
|
||||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
||||||
import org.eclipse.cdt.debug.ui.disassembly.IElementToggleBreakpointAdapter;
|
import org.eclipse.cdt.debug.ui.disassembly.IElementToggleBreakpointAdapter;
|
||||||
import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
|
import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
|
||||||
|
@ -47,7 +44,6 @@ import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Path;
|
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.debug.core.DebugPlugin;
|
import org.eclipse.debug.core.DebugPlugin;
|
||||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
|
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
|
||||||
|
@ -147,47 +143,6 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtensio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( part instanceof DisassemblyView ) {
|
|
||||||
IEditorInput input = ((DisassemblyView)part).getInput();
|
|
||||||
if ( !(input instanceof DisassemblyEditorInput) ) {
|
|
||||||
errorMessage = ActionMessages.getString( "ToggleBreakpointAdapter.Empty_editor_1" ); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
BreakpointLocationVerifier bv = new BreakpointLocationVerifier();
|
|
||||||
int lineNumber = bv.getValidAddressBreakpointLocation( null, ((ITextSelection)selection).getStartLine() );
|
|
||||||
if ( lineNumber == -1 ) {
|
|
||||||
errorMessage = ActionMessages.getString( "ToggleBreakpointAdapter.Invalid_line_1" ); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber );
|
|
||||||
if ( address == null ) {
|
|
||||||
errorMessage = ActionMessages.getString( "ToggleBreakpointAdapter.Invalid_line_1" ); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ICLineBreakpoint breakpoint = ((DisassemblyEditorInput)input).breakpointExists( address );
|
|
||||||
if ( breakpoint != null ) {
|
|
||||||
DebugPlugin.getDefault().getBreakpointManager().removeBreakpoint( breakpoint, true );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
String module = ((DisassemblyEditorInput)input).getModuleFile();
|
|
||||||
IResource resource = getAddressBreakpointResource( ((DisassemblyEditorInput)input).getSourceFile() );
|
|
||||||
String sourceHandle = getSourceHandle( input );
|
|
||||||
CDIDebugModel.createAddressBreakpoint( module,
|
|
||||||
sourceHandle,
|
|
||||||
resource,
|
|
||||||
ICBreakpointType.REGULAR,
|
|
||||||
((DisassemblyEditorInput)input).getSourceLine( lineNumber ),
|
|
||||||
address,
|
|
||||||
true,
|
|
||||||
0,
|
|
||||||
"", //$NON-NLS-1$
|
|
||||||
true );
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
errorMessage = ActionMessages.getString( "RunToLineAdapter.Operation_is_not_supported_1" ); //$NON-NLS-1$
|
errorMessage = ActionMessages.getString( "RunToLineAdapter.Operation_is_not_supported_1" ); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
@ -198,14 +153,7 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtensio
|
||||||
* @see org.eclipse.debug.ui.actions.IToggleBreakpointsTarget#canToggleLineBreakpoints(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
|
* @see org.eclipse.debug.ui.actions.IToggleBreakpointsTarget#canToggleLineBreakpoints(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
|
||||||
*/
|
*/
|
||||||
public boolean canToggleLineBreakpoints( IWorkbenchPart part, ISelection selection ) {
|
public boolean canToggleLineBreakpoints( IWorkbenchPart part, ISelection selection ) {
|
||||||
if ( part instanceof DisassemblyView ) {
|
if ( part instanceof DisassemblyEditor && selection instanceof ITextSelection ) {
|
||||||
IEditorInput input = ((DisassemblyView)part).getInput();
|
|
||||||
if ( !(input instanceof DisassemblyEditorInput) ||
|
|
||||||
((DisassemblyEditorInput)input).equals( DisassemblyEditorInput.EMPTY_EDITOR_INPUT ) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( part instanceof DisassemblyEditor && selection instanceof ITextSelection ) {
|
|
||||||
DisassemblyEditor editor = (DisassemblyEditor)part;
|
DisassemblyEditor editor = (DisassemblyEditor)part;
|
||||||
int lineNumber = ((ITextSelection)selection).getStartLine();
|
int lineNumber = ((ITextSelection)selection).getStartLine();
|
||||||
if ( lineNumber != -1 ) {
|
if ( lineNumber != -1 ) {
|
||||||
|
@ -516,18 +464,6 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTargetExtensio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private IResource getAddressBreakpointResource( String fileName ) {
|
|
||||||
if ( fileName != null ) {
|
|
||||||
IPath path = new Path( fileName );
|
|
||||||
if ( path.isValidPath( fileName ) ) {
|
|
||||||
IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation( path );
|
|
||||||
if ( files.length > 0 )
|
|
||||||
return files[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ResourcesPlugin.getWorkspace().getRoot();
|
|
||||||
}
|
|
||||||
|
|
||||||
private IElementToggleBreakpointAdapter getToggleBreakpointAdapter( Object element ) {
|
private IElementToggleBreakpointAdapter getToggleBreakpointAdapter( Object element ) {
|
||||||
IElementToggleBreakpointAdapter adapter = null;
|
IElementToggleBreakpointAdapter adapter = null;
|
||||||
if ( element instanceof IElementToggleBreakpointAdapter ) {
|
if ( element instanceof IElementToggleBreakpointAdapter ) {
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* QNX Software Systems - Initial API and implementation
|
* QNX Software Systems - Initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.disassembly;
|
package org.eclipse.cdt.debug.internal.ui.disassembly.rendering;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
|
@ -8,7 +8,7 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* QNX Software Systems - Initial API and implementation
|
* QNX Software Systems - Initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.disassembly;
|
package org.eclipse.cdt.debug.internal.ui.disassembly.rendering;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import org.eclipse.cdt.core.IAddress;
|
import org.eclipse.cdt.core.IAddress;
|
|
@ -15,7 +15,6 @@ 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.DisassemblyPane;
|
||||||
import org.eclipse.cdt.debug.internal.ui.disassembly.viewer.VirtualDocument;
|
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.disassembly.viewer.VirtualSourceViewer;
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyAnnotationModel;
|
|
||||||
import org.eclipse.cdt.debug.ui.disassembly.IDocumentPresentation;
|
import org.eclipse.cdt.debug.ui.disassembly.IDocumentPresentation;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
import org.eclipse.debug.core.model.IMemoryBlock;
|
import org.eclipse.debug.core.model.IMemoryBlock;
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* QNX Software Systems - Initial API and implementation
|
* QNX Software Systems - Initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.disassembly;
|
package org.eclipse.cdt.debug.internal.ui.disassembly.rendering;
|
||||||
|
|
||||||
import java.util.MissingResourceException;
|
import java.util.MissingResourceException;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
|
@ -51,7 +51,6 @@ public class CDebugElementAdapterFactory implements IAdapterFactory {
|
||||||
private static IDisassemblyContextProvider fgDisassemblyContextProvider = new CDisassemblyContextProvider();
|
private static IDisassemblyContextProvider fgDisassemblyContextProvider = new CDisassemblyContextProvider();
|
||||||
private static IDocumentElementContentProvider fgDisassemblyContentProvider = new DisassemblyElementContentProvider();
|
private static IDocumentElementContentProvider fgDisassemblyContentProvider = new DisassemblyElementContentProvider();
|
||||||
private static IDocumentElementLabelProvider fgDisassemblyLabelProvider = new DisassemblyElementLabelProvider();
|
private static IDocumentElementLabelProvider fgDisassemblyLabelProvider = new DisassemblyElementLabelProvider();
|
||||||
private static IDocumentElementAnnotationProvider fgDisassemblyAnnotationProvider = new DisassemblyElementAnnotationProvider();
|
|
||||||
private static IElementToggleBreakpointAdapter fgDisassemblyToggleBreakpointAdapter = new DisassemblyToggleBreakpointAdapter();
|
private static IElementToggleBreakpointAdapter fgDisassemblyToggleBreakpointAdapter = new DisassemblyToggleBreakpointAdapter();
|
||||||
private static ISourceDisplay fgSourceDisplayAdapter = new SourceDisplayAdapter();
|
private static ISourceDisplay fgSourceDisplayAdapter = new SourceDisplayAdapter();
|
||||||
|
|
||||||
|
@ -121,11 +120,6 @@ public class CDebugElementAdapterFactory implements IAdapterFactory {
|
||||||
return fgDisassemblyLabelProvider;
|
return fgDisassemblyLabelProvider;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( adapterType.equals( IDocumentElementAnnotationProvider.class ) ) {
|
|
||||||
if ( adaptableObject instanceof IDisassemblyLine ) {
|
|
||||||
return fgDisassemblyAnnotationProvider;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( adapterType.equals( IElementToggleBreakpointAdapter.class ) ) {
|
if ( adapterType.equals( IElementToggleBreakpointAdapter.class ) ) {
|
||||||
if ( adaptableObject instanceof IDisassemblyLine ) {
|
if ( adaptableObject instanceof IDisassemblyLine ) {
|
||||||
return fgDisassemblyToggleBreakpointAdapter;
|
return fgDisassemblyToggleBreakpointAdapter;
|
||||||
|
|
|
@ -1,120 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* 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.elements.adapters;
|
|
||||||
|
|
||||||
import java.math.BigInteger;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.IAddress;
|
|
||||||
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
|
|
||||||
import org.eclipse.cdt.debug.core.model.ICLineBreakpoint;
|
|
||||||
import org.eclipse.cdt.debug.core.model.ICStackFrame;
|
|
||||||
import org.eclipse.cdt.debug.core.model.IDisassemblyInstruction;
|
|
||||||
import org.eclipse.cdt.debug.internal.core.model.CDebugTarget;
|
|
||||||
import org.eclipse.cdt.debug.internal.core.model.DisassemblyRetrieval;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyInstructionPointerAnnotation;
|
|
||||||
import org.eclipse.cdt.debug.ui.disassembly.IDocumentElementAnnotationProvider;
|
|
||||||
import org.eclipse.cdt.debug.ui.disassembly.IDocumentElementAnnotationUpdate;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
|
||||||
import org.eclipse.core.runtime.IStatus;
|
|
||||||
import org.eclipse.core.runtime.Status;
|
|
||||||
import org.eclipse.core.runtime.jobs.Job;
|
|
||||||
import org.eclipse.debug.core.DebugException;
|
|
||||||
import org.eclipse.debug.core.DebugPlugin;
|
|
||||||
import org.eclipse.debug.core.model.IBreakpoint;
|
|
||||||
import org.eclipse.debug.core.model.IThread;
|
|
||||||
import org.eclipse.ui.texteditor.MarkerAnnotation;
|
|
||||||
|
|
||||||
public class DisassemblyElementAnnotationProvider implements IDocumentElementAnnotationProvider {
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see com.arm.eclipse.rvd.ui.disassembly.IDocumentElementAnnotationProvider#update(com.arm.eclipse.rvd.ui.disassembly.IDocumentElementAnnotationUpdate[])
|
|
||||||
*/
|
|
||||||
public void update( final IDocumentElementAnnotationUpdate[] updates ) {
|
|
||||||
Job job = new Job( "Annotations update" ) { //$NON-NLS-1$
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected IStatus run( IProgressMonitor monitor ) {
|
|
||||||
for( int i = 0; i < updates.length; i++ ) {
|
|
||||||
IDocumentElementAnnotationUpdate update = updates[i];
|
|
||||||
if ( !update.isCanceled() ) {
|
|
||||||
retrieveAnnotations( update );
|
|
||||||
}
|
|
||||||
update.done();
|
|
||||||
}
|
|
||||||
return Status.OK_STATUS;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
job.setSystem( true );
|
|
||||||
job.schedule();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void retrieveAnnotations( IDocumentElementAnnotationUpdate update ) {
|
|
||||||
retrieveInstructionPointers( update );
|
|
||||||
retrieveBreakpoints( update );
|
|
||||||
}
|
|
||||||
|
|
||||||
private void retrieveInstructionPointers( IDocumentElementAnnotationUpdate update ) {
|
|
||||||
Object root = update.getRootElement();
|
|
||||||
if ( root instanceof DisassemblyRetrieval ) {
|
|
||||||
DisassemblyRetrieval retrieval = (DisassemblyRetrieval)root;
|
|
||||||
Object input = retrieval.getInput();
|
|
||||||
if ( input instanceof ICStackFrame ) {
|
|
||||||
Object element = update.getElement();
|
|
||||||
if ( element instanceof IDisassemblyInstruction ) {
|
|
||||||
BigInteger address = ((IDisassemblyInstruction)element).getAdress().getValue();
|
|
||||||
ICStackFrame frame = (ICStackFrame)input;
|
|
||||||
IAddress frameAddress = frame.getAddress(); // will return null if frame has been disposed
|
|
||||||
if ( (frameAddress != null) && address.equals( frameAddress.getValue() ) ) {
|
|
||||||
IThread thread = frame.getThread();
|
|
||||||
boolean topFrame;
|
|
||||||
try {
|
|
||||||
topFrame = ( frame == thread.getTopStackFrame() );
|
|
||||||
update.addAnnotation( new DisassemblyInstructionPointerAnnotation( frame, topFrame ) );
|
|
||||||
}
|
|
||||||
catch( DebugException e ) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void retrieveBreakpoints( IDocumentElementAnnotationUpdate update ) {
|
|
||||||
IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints( CDebugCorePlugin.getUniqueIdentifier() );
|
|
||||||
for ( IBreakpoint b : breakpoints ) {
|
|
||||||
if ( b instanceof ICLineBreakpoint ) {
|
|
||||||
try {
|
|
||||||
Object root = update.getRootElement();
|
|
||||||
if ( root instanceof DisassemblyRetrieval ) {
|
|
||||||
Object element = update.getElement();
|
|
||||||
if ( element instanceof IDisassemblyInstruction ) {
|
|
||||||
IDisassemblyInstruction instruction = (IDisassemblyInstruction)element;
|
|
||||||
BigInteger address = ((CDebugTarget)((DisassemblyRetrieval)root).getDebugTarget()).getBreakpointAddress( (ICLineBreakpoint)b ).getValue();
|
|
||||||
BigInteger instrAddress = instruction.getAdress().getValue();
|
|
||||||
if ( address != null && instrAddress != null && instrAddress.compareTo( address ) == 0 ) {
|
|
||||||
update.addAnnotation( new MarkerAnnotation( b.getMarker() ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch( CoreException e ) {
|
|
||||||
}
|
|
||||||
catch( NumberFormatException e ) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,145 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2004, 2006 QNX Software Systems 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:
|
|
||||||
* QNX Software Systems - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.disassembly;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.HTMLPrinter;
|
|
||||||
import org.eclipse.core.resources.IMarker;
|
|
||||||
import org.eclipse.jface.text.BadLocationException;
|
|
||||||
import org.eclipse.jface.text.IDocument;
|
|
||||||
import org.eclipse.jface.text.Position;
|
|
||||||
import org.eclipse.jface.text.source.IAnnotationHover;
|
|
||||||
import org.eclipse.jface.text.source.IAnnotationModel;
|
|
||||||
import org.eclipse.jface.text.source.ISourceViewer;
|
|
||||||
import org.eclipse.ui.texteditor.MarkerAnnotation;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Annotation hovering support for disassembly view.
|
|
||||||
*/
|
|
||||||
public class DisassemblyAnnotationHover implements IAnnotationHover {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see org.eclipse.jface.text.source.IAnnotationHover#getHoverInfo(org.eclipse.jface.text.source.ISourceViewer, int)
|
|
||||||
*/
|
|
||||||
public String getHoverInfo( ISourceViewer sourceViewer, int lineNumber ) {
|
|
||||||
List markers = getMarkersForLine( sourceViewer, lineNumber );
|
|
||||||
if ( markers != null ) {
|
|
||||||
if ( markers.size() == 1 ) {
|
|
||||||
// optimization
|
|
||||||
IMarker marker = (IMarker)markers.get( 0 );
|
|
||||||
String message = marker.getAttribute( IMarker.MESSAGE, (String)null );
|
|
||||||
if ( message != null && message.trim().length() > 0 )
|
|
||||||
return formatSingleMessage( message );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
List messages = new ArrayList();
|
|
||||||
Iterator e = markers.iterator();
|
|
||||||
while( e.hasNext() ) {
|
|
||||||
IMarker marker = (IMarker)e.next();
|
|
||||||
String message = marker.getAttribute( IMarker.MESSAGE, (String)null );
|
|
||||||
if ( message != null && message.trim().length() > 0 )
|
|
||||||
messages.add( message.trim() );
|
|
||||||
}
|
|
||||||
if ( messages.size() == 1 )
|
|
||||||
return formatSingleMessage( (String)messages.get( 0 ) );
|
|
||||||
if ( messages.size() > 1 )
|
|
||||||
return formatMultipleMessages( messages );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the distance to the ruler line.
|
|
||||||
*/
|
|
||||||
protected int compareRulerLine( Position position, IDocument document, int line ) {
|
|
||||||
if ( position.getOffset() > -1 && position.getLength() > -1 ) {
|
|
||||||
try {
|
|
||||||
int markerLine = document.getLineOfOffset( position.getOffset() );
|
|
||||||
if ( line == markerLine )
|
|
||||||
return 1;
|
|
||||||
if ( markerLine <= line && line <= document.getLineOfOffset( position.getOffset() + position.getLength() ) )
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
catch( BadLocationException x ) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Formats a message as HTML text.
|
|
||||||
*/
|
|
||||||
private String formatSingleMessage( String message ) {
|
|
||||||
StringBuffer buffer = new StringBuffer();
|
|
||||||
HTMLPrinter.addPageProlog( buffer );
|
|
||||||
HTMLPrinter.addParagraph( buffer, HTMLPrinter.convertToHTMLContent( message ) );
|
|
||||||
HTMLPrinter.addPageEpilog( buffer );
|
|
||||||
return buffer.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Formats several message as HTML text.
|
|
||||||
*/
|
|
||||||
private String formatMultipleMessages( List messages ) {
|
|
||||||
StringBuffer buffer = new StringBuffer();
|
|
||||||
HTMLPrinter.addPageProlog( buffer );
|
|
||||||
HTMLPrinter.addParagraph( buffer, HTMLPrinter.convertToHTMLContent( DisassemblyMessages.getString( "DisassemblyAnnotationHover.Multiple_markers_at_this_line_1" ) ) ); //$NON-NLS-1$
|
|
||||||
HTMLPrinter.startBulletList( buffer );
|
|
||||||
Iterator e = messages.iterator();
|
|
||||||
while( e.hasNext() )
|
|
||||||
HTMLPrinter.addBullet( buffer, HTMLPrinter.convertToHTMLContent( (String)e.next() ) );
|
|
||||||
HTMLPrinter.endBulletList( buffer );
|
|
||||||
HTMLPrinter.addPageEpilog( buffer );
|
|
||||||
return buffer.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns one marker which includes the ruler's line of activity.
|
|
||||||
*/
|
|
||||||
protected List getMarkersForLine( ISourceViewer viewer, int line ) {
|
|
||||||
IDocument document = viewer.getDocument();
|
|
||||||
IAnnotationModel model = viewer.getAnnotationModel();
|
|
||||||
if ( model == null )
|
|
||||||
return null;
|
|
||||||
List exact = new ArrayList();
|
|
||||||
List including = new ArrayList();
|
|
||||||
Iterator e = model.getAnnotationIterator();
|
|
||||||
while( e.hasNext() ) {
|
|
||||||
Object o = e.next();
|
|
||||||
if ( o instanceof MarkerAnnotation ) {
|
|
||||||
MarkerAnnotation a = (MarkerAnnotation)o;
|
|
||||||
switch( compareRulerLine( model.getPosition( a ), document, line ) ) {
|
|
||||||
case 1:
|
|
||||||
exact.add( a.getMarker() );
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
including.add( a.getMarker() );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return select( exact, including );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Selects a set of markers from the two lists. By default, it just returns
|
|
||||||
* the set of exact matches.
|
|
||||||
*/
|
|
||||||
protected List select( List exactMatch, List including ) {
|
|
||||||
return exactMatch;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,189 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2004, 2006 QNX Software Systems 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:
|
|
||||||
* QNX Software Systems - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.disassembly;
|
|
||||||
|
|
||||||
import org.eclipse.core.resources.IMarkerDelta;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
|
||||||
import org.eclipse.debug.core.DebugPlugin;
|
|
||||||
import org.eclipse.debug.core.IBreakpointsListener;
|
|
||||||
import org.eclipse.debug.core.model.IBreakpoint;
|
|
||||||
import org.eclipse.jface.text.Document;
|
|
||||||
import org.eclipse.jface.text.IDocument;
|
|
||||||
import org.eclipse.jface.text.source.IAnnotationModel;
|
|
||||||
import org.eclipse.ui.texteditor.IDocumentProvider;
|
|
||||||
import org.eclipse.ui.texteditor.IElementStateListener;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Document provider for disassembly view.
|
|
||||||
*/
|
|
||||||
public class DisassemblyDocumentProvider implements IDocumentProvider, IBreakpointsListener {
|
|
||||||
|
|
||||||
private IDocument fDocument;
|
|
||||||
private DisassemblyAnnotationModel fAnnotationModel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor for DisassemblyDocumentProvider.
|
|
||||||
*/
|
|
||||||
public DisassemblyDocumentProvider() {
|
|
||||||
fDocument = new Document();
|
|
||||||
fAnnotationModel = new DisassemblyAnnotationModel();
|
|
||||||
DebugPlugin.getDefault().getBreakpointManager().addBreakpointListener( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#connect(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public void connect( Object element ) throws CoreException {
|
|
||||||
if ( element instanceof DisassemblyEditorInput ) {
|
|
||||||
String contents = ((DisassemblyEditorInput)element).getContents();
|
|
||||||
fDocument.set( contents );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fDocument.set( "" ); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
fAnnotationModel.setInput( ( element instanceof DisassemblyEditorInput ) ? (DisassemblyEditorInput)element : null, fDocument );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#disconnect(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public void disconnect( Object element ) {
|
|
||||||
fDocument.set( "" ); //$NON-NLS-1$
|
|
||||||
fAnnotationModel.setInput( null, fDocument );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#getDocument(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public IDocument getDocument( Object element ) {
|
|
||||||
return fDocument;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#resetDocument(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public void resetDocument( Object element ) throws CoreException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#saveDocument(org.eclipse.core.runtime.IProgressMonitor, java.lang.Object, org.eclipse.jface.text.IDocument, boolean)
|
|
||||||
*/
|
|
||||||
public void saveDocument( IProgressMonitor monitor, Object element, IDocument document, boolean overwrite ) throws CoreException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#getModificationStamp(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public long getModificationStamp( Object element ) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#getSynchronizationStamp(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public long getSynchronizationStamp( Object element ) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#isDeleted(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public boolean isDeleted( Object element ) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#mustSaveDocument(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public boolean mustSaveDocument( Object element ) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#canSaveDocument(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public boolean canSaveDocument( Object element ) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#getAnnotationModel(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public IAnnotationModel getAnnotationModel( Object element ) {
|
|
||||||
return fAnnotationModel;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#aboutToChange(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public void aboutToChange( Object element ) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#changed(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public void changed( Object element ) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#addElementStateListener(org.eclipse.ui.texteditor.IElementStateListener)
|
|
||||||
*/
|
|
||||||
public void addElementStateListener( IElementStateListener listener ) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IDocumentProvider#removeElementStateListener(org.eclipse.ui.texteditor.IElementStateListener)
|
|
||||||
*/
|
|
||||||
public void removeElementStateListener( IElementStateListener listener ) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void dispose() {
|
|
||||||
fDocument = null;
|
|
||||||
if ( fAnnotationModel != null ) {
|
|
||||||
fAnnotationModel.dispose();
|
|
||||||
fAnnotationModel = null;
|
|
||||||
}
|
|
||||||
DebugPlugin.getDefault().getBreakpointManager().removeBreakpointListener( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.debug.core.IBreakpointsListener#breakpointsAdded(org.eclipse.debug.core.model.IBreakpoint[])
|
|
||||||
*/
|
|
||||||
public void breakpointsAdded( IBreakpoint[] breakpoints ) {
|
|
||||||
fAnnotationModel.breakpointsAdded( breakpoints, fDocument );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.debug.core.IBreakpointsListener#breakpointsChanged(org.eclipse.debug.core.model.IBreakpoint[], org.eclipse.core.resources.IMarkerDelta[])
|
|
||||||
*/
|
|
||||||
public void breakpointsChanged( IBreakpoint[] breakpoints, IMarkerDelta[] deltas ) {
|
|
||||||
fAnnotationModel.breakpointsChanged( breakpoints, fDocument );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.debug.core.IBreakpointsListener#breakpointsRemoved(org.eclipse.debug.core.model.IBreakpoint[], org.eclipse.core.resources.IMarkerDelta[])
|
|
||||||
*/
|
|
||||||
public void breakpointsRemoved( IBreakpoint[] breakpoints, IMarkerDelta[] deltas ) {
|
|
||||||
fAnnotationModel.breakpointsRemoved( breakpoints, fDocument );
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,81 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2004, 2006 QNX Software Systems 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:
|
|
||||||
* QNX Software Systems - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.disassembly;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.IAddress;
|
|
||||||
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
|
|
||||||
import org.eclipse.cdt.debug.core.model.ICStackFrame;
|
|
||||||
import org.eclipse.cdt.debug.core.model.IDisassembly;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
|
|
||||||
import org.eclipse.debug.core.DebugException;
|
|
||||||
import org.eclipse.jface.text.source.Annotation;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An annotation for the vertical ruler in the disassembly view that shows one
|
|
||||||
* of two images for the current instruction pointer when debugging (one for
|
|
||||||
* the top stack frame, one for all others).
|
|
||||||
*/
|
|
||||||
public class DisassemblyInstructionPointerAnnotation extends Annotation {
|
|
||||||
|
|
||||||
private int fHashCode = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct an instruction pointer annotation for the given stack frame.
|
|
||||||
*
|
|
||||||
* @param stackFrame frame to create an instruction pointer annotation for
|
|
||||||
* @param isTopFrame whether the given frame is the top stack frame in its thread
|
|
||||||
*/
|
|
||||||
public DisassemblyInstructionPointerAnnotation( ICStackFrame stackFrame, boolean isTopFrame ) {
|
|
||||||
super( isTopFrame ? IInternalCDebugUIConstants.ANN_DISASM_INSTR_POINTER_CURRENT : IInternalCDebugUIConstants.ANN_DISASM_INSTR_POINTER_SECONDARY,
|
|
||||||
false,
|
|
||||||
isTopFrame ? DisassemblyMessages.getString( "DisassemblyInstructionPointerAnnotation.Current_Pointer_1" ) : DisassemblyMessages.getString( "DisassemblyInstructionPointerAnnotation.Secondary_Pointer_1" ) ); //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
fHashCode = getHashCode( stackFrame );
|
|
||||||
}
|
|
||||||
|
|
||||||
private IDisassembly getDisassembly( ICStackFrame frame ) {
|
|
||||||
if ( frame != null ) {
|
|
||||||
ICDebugTarget target = (ICDebugTarget)frame.getDebugTarget();
|
|
||||||
try {
|
|
||||||
return target.getDisassembly();
|
|
||||||
}
|
|
||||||
catch( DebugException e ) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#hashCode()
|
|
||||||
*/
|
|
||||||
public int hashCode() {
|
|
||||||
return fHashCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getHashCode( ICStackFrame frame ) {
|
|
||||||
int hashCode = 17;
|
|
||||||
IDisassembly disassembly = getDisassembly( frame );
|
|
||||||
hashCode = 37*hashCode + (( disassembly != null ) ? disassembly.hashCode() : 0);
|
|
||||||
if ( frame != null ) {
|
|
||||||
IAddress address = frame.getAddress(); // will return null if frame has been disposed
|
|
||||||
if (address != null) {
|
|
||||||
hashCode = 37*hashCode + address.hashCode();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return hashCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see java.lang.Object#equals(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public boolean equals( Object obj ) {
|
|
||||||
return ( obj != null ? obj.hashCode() == hashCode() : false );
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
###############################################################################
|
|
||||||
# Copyright (c) 2003, 2006 QNX Software Systems 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:
|
|
||||||
# QNX Software Systems - initial API and implementation
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
DisassemblyDocumentProvider.Pending_1=Pending...
|
|
||||||
DisassemblyInstructionPointerAnnotation.Current_Pointer_1=Current Disassembly Instruction Pointer
|
|
||||||
DisassemblyInstructionPointerAnnotation.Secondary_Pointer_1=Secondary Disassembly Instruction Pointer
|
|
||||||
DisassemblyAnnotationHover.Multiple_markers_at_this_line_1=Multiple markers at this line
|
|
||||||
HTMLTextPresenter.ellipsis=
|
|
||||||
HTML2TextReader.dash=-
|
|
||||||
DisassemblyEditorInput.source_line_is_not_available_1=<source line is not available>
|
|
|
@ -1,981 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2004, 2006 QNX Software Systems 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:
|
|
||||||
* QNX Software Systems - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.disassembly;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.IAddress;
|
|
||||||
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
|
|
||||||
import org.eclipse.cdt.debug.core.ICDebugConstants;
|
|
||||||
import org.eclipse.cdt.debug.core.model.ICStackFrame;
|
|
||||||
import org.eclipse.cdt.debug.core.model.IDisassembly;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.actions.CBreakpointPropertiesRulerAction;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.actions.EnableDisableBreakpointRulerAction;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandlerView;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.IDebugExceptionHandler;
|
|
||||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
|
||||||
import org.eclipse.core.runtime.IStatus;
|
|
||||||
import org.eclipse.core.runtime.Status;
|
|
||||||
import org.eclipse.debug.core.DebugException;
|
|
||||||
import org.eclipse.debug.core.DebugPlugin;
|
|
||||||
import org.eclipse.debug.core.model.IThread;
|
|
||||||
import org.eclipse.debug.ui.DebugUITools;
|
|
||||||
import org.eclipse.debug.ui.IDebugUIConstants;
|
|
||||||
import org.eclipse.debug.ui.actions.ToggleBreakpointAction;
|
|
||||||
import org.eclipse.jface.action.IAction;
|
|
||||||
import org.eclipse.jface.action.IMenuListener;
|
|
||||||
import org.eclipse.jface.action.IMenuManager;
|
|
||||||
import org.eclipse.jface.action.IToolBarManager;
|
|
||||||
import org.eclipse.jface.action.MenuManager;
|
|
||||||
import org.eclipse.jface.action.Separator;
|
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
|
||||||
import org.eclipse.jface.resource.JFaceResources;
|
|
||||||
import org.eclipse.jface.text.BadLocationException;
|
|
||||||
import org.eclipse.jface.text.IDocument;
|
|
||||||
import org.eclipse.jface.text.IRegion;
|
|
||||||
import org.eclipse.jface.text.Position;
|
|
||||||
import org.eclipse.jface.text.TextPresentation;
|
|
||||||
import org.eclipse.jface.text.source.IAnnotationAccess;
|
|
||||||
import org.eclipse.jface.text.source.IAnnotationModel;
|
|
||||||
import org.eclipse.jface.text.source.IOverviewRuler;
|
|
||||||
import org.eclipse.jface.text.source.ISharedTextColors;
|
|
||||||
import org.eclipse.jface.text.source.ISourceViewer;
|
|
||||||
import org.eclipse.jface.text.source.IVerticalRuler;
|
|
||||||
import org.eclipse.jface.text.source.OverviewRuler;
|
|
||||||
import org.eclipse.jface.text.source.SourceViewer;
|
|
||||||
import org.eclipse.jface.text.source.VerticalRuler;
|
|
||||||
import org.eclipse.jface.util.Assert;
|
|
||||||
import org.eclipse.jface.util.IPropertyChangeListener;
|
|
||||||
import org.eclipse.jface.util.PropertyChangeEvent;
|
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
|
||||||
import org.eclipse.jface.viewers.StructuredSelection;
|
|
||||||
import org.eclipse.jface.viewers.Viewer;
|
|
||||||
import org.eclipse.swt.SWT;
|
|
||||||
import org.eclipse.swt.custom.StyleRange;
|
|
||||||
import org.eclipse.swt.custom.StyledText;
|
|
||||||
import org.eclipse.swt.events.MouseEvent;
|
|
||||||
import org.eclipse.swt.events.MouseListener;
|
|
||||||
import org.eclipse.swt.graphics.Point;
|
|
||||||
import org.eclipse.swt.widgets.Composite;
|
|
||||||
import org.eclipse.swt.widgets.Control;
|
|
||||||
import org.eclipse.swt.widgets.Display;
|
|
||||||
import org.eclipse.swt.widgets.Menu;
|
|
||||||
import org.eclipse.ui.IEditorInput;
|
|
||||||
import org.eclipse.ui.INullSelectionListener;
|
|
||||||
import org.eclipse.ui.ISelectionListener;
|
|
||||||
import org.eclipse.ui.IViewPart;
|
|
||||||
import org.eclipse.ui.IWorkbenchActionConstants;
|
|
||||||
import org.eclipse.ui.IWorkbenchPart;
|
|
||||||
import org.eclipse.ui.editors.text.EditorsUI;
|
|
||||||
import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
|
|
||||||
import org.eclipse.ui.texteditor.AnnotationPreference;
|
|
||||||
import org.eclipse.ui.texteditor.DefaultMarkerAnnotationAccess;
|
|
||||||
import org.eclipse.ui.texteditor.DefaultRangeIndicator;
|
|
||||||
import org.eclipse.ui.texteditor.ITextEditorActionConstants;
|
|
||||||
import org.eclipse.ui.texteditor.IUpdate;
|
|
||||||
import org.eclipse.ui.texteditor.MarkerAnnotationPreferences;
|
|
||||||
import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This view shows disassembly for a particular stack frame.
|
|
||||||
*/
|
|
||||||
public class DisassemblyView extends AbstractDebugEventHandlerView
|
|
||||||
implements ISelectionListener,
|
|
||||||
INullSelectionListener,
|
|
||||||
IPropertyChangeListener,
|
|
||||||
IDebugExceptionHandler,
|
|
||||||
IDisassemblyListener {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates and returns the listener on this view's context menus.
|
|
||||||
*
|
|
||||||
* @return the menu listener
|
|
||||||
*/
|
|
||||||
protected final IMenuListener getContextMenuListener() {
|
|
||||||
if ( fMenuListener == null ) {
|
|
||||||
fMenuListener = new IMenuListener() {
|
|
||||||
|
|
||||||
public void menuAboutToShow( IMenuManager menu ) {
|
|
||||||
String id = menu.getId();
|
|
||||||
if ( getRulerContextMenuId().equals( id ) ) {
|
|
||||||
setFocus();
|
|
||||||
rulerContextMenuAboutToShow( menu );
|
|
||||||
}
|
|
||||||
else if ( getViewContextMenuId().equals( id ) ) {
|
|
||||||
setFocus();
|
|
||||||
viewContextMenuAboutToShow( menu );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return fMenuListener;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates and returns the listener on this editor's vertical ruler.
|
|
||||||
*
|
|
||||||
* @return the mouse listener
|
|
||||||
*/
|
|
||||||
protected final MouseListener getRulerMouseListener() {
|
|
||||||
if ( fMouseListener == null ) {
|
|
||||||
fMouseListener = new MouseListener() {
|
|
||||||
|
|
||||||
private boolean fDoubleClicked = false;
|
|
||||||
|
|
||||||
private void triggerAction( String actionID ) {
|
|
||||||
IAction action = getAction( actionID );
|
|
||||||
if ( action != null ) {
|
|
||||||
if ( action instanceof IUpdate )
|
|
||||||
((IUpdate)action).update();
|
|
||||||
if ( action.isEnabled() )
|
|
||||||
action.run();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mouseUp( MouseEvent e ) {
|
|
||||||
setFocus();
|
|
||||||
if ( 1 == e.button && !fDoubleClicked )
|
|
||||||
triggerAction( ITextEditorActionConstants.RULER_CLICK );
|
|
||||||
fDoubleClicked = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mouseDoubleClick( MouseEvent e ) {
|
|
||||||
if ( 1 == e.button ) {
|
|
||||||
fDoubleClicked = true;
|
|
||||||
triggerAction( IInternalCDebugUIConstants.ACTION_TOGGLE_BREAKPOINT );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mouseDown( MouseEvent e ) {
|
|
||||||
StyledText text = getSourceViewer().getTextWidget();
|
|
||||||
if ( text != null && !text.isDisposed() ) {
|
|
||||||
Display display = text.getDisplay();
|
|
||||||
Point location = display.getCursorLocation();
|
|
||||||
getRulerContextMenu().setLocation( location.x, location.y );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return fMouseListener;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The width of the vertical ruler.
|
|
||||||
*/
|
|
||||||
private final static int VERTICAL_RULER_WIDTH = 12;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Preference key for highlighting current line.
|
|
||||||
*/
|
|
||||||
private final static String CURRENT_LINE = AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Preference key for highlight color of current line.
|
|
||||||
*/
|
|
||||||
private final static String CURRENT_LINE_COLOR = AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The view's context menu id.
|
|
||||||
*/
|
|
||||||
private String fViewContextMenuId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The ruler's context menu id.
|
|
||||||
*/
|
|
||||||
private String fRulerContextMenuId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The vertical ruler.
|
|
||||||
*/
|
|
||||||
private IVerticalRuler fVerticalRuler;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The overview ruler.
|
|
||||||
*/
|
|
||||||
private IOverviewRuler fOverviewRuler;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The last stack frame for which the disassembly storage has
|
|
||||||
* been requested.
|
|
||||||
*/
|
|
||||||
protected ICStackFrame fLastStackFrame = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper for managing the decoration support of this view's viewer.
|
|
||||||
*/
|
|
||||||
private SourceViewerDecorationSupport fSourceViewerDecorationSupport;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper for accessing annotation from the perspective of this view.
|
|
||||||
*/
|
|
||||||
private IAnnotationAccess fAnnotationAccess;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The annotation preferences.
|
|
||||||
*/
|
|
||||||
private MarkerAnnotationPreferences fAnnotationPreferences;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Disassembly document provider.
|
|
||||||
*/
|
|
||||||
private DisassemblyDocumentProvider fDocumentProvider;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Current instruction pointer nnotation.
|
|
||||||
*/
|
|
||||||
private DisassemblyInstructionPointerAnnotation fInstrPointerAnnotation;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Context menu listener.
|
|
||||||
*/
|
|
||||||
private IMenuListener fMenuListener;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Vertical ruler mouse listener.
|
|
||||||
*/
|
|
||||||
private MouseListener fMouseListener;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The ruler context menu to be disposed.
|
|
||||||
*/
|
|
||||||
private Menu fRulerContextMenu;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The text context menu to be disposed.
|
|
||||||
*/
|
|
||||||
private Menu fTextContextMenu;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The actions registered with the view.
|
|
||||||
*/
|
|
||||||
private Map fActions = new HashMap( 10 );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor for DisassemblyView.
|
|
||||||
*/
|
|
||||||
public DisassemblyView() {
|
|
||||||
super();
|
|
||||||
setViewContextMenuId( "#DisassemblyViewContext" ); //$NON-NLS-1$
|
|
||||||
setRulerContextMenuId( "#DisassemblyViewRulerContext" ); //$NON-NLS-1$
|
|
||||||
fAnnotationPreferences = new MarkerAnnotationPreferences();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.debug.ui.AbstractDebugView#createViewer(org.eclipse.swt.widgets.Composite)
|
|
||||||
*/
|
|
||||||
protected Viewer createViewer( Composite parent ) {
|
|
||||||
fVerticalRuler = createVerticalRuler();
|
|
||||||
fOverviewRuler = createOverviewRuler( getSharedColors() );
|
|
||||||
|
|
||||||
SourceViewer viewer = createSourceViewer( parent, fVerticalRuler, getOverviewRuler() );
|
|
||||||
viewer.configure( new DisassemblyViewerConfiguration() );
|
|
||||||
getSourceViewerDecorationSupport( viewer );
|
|
||||||
|
|
||||||
getEditorPreferenceStore().addPropertyChangeListener( this );
|
|
||||||
CDebugUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener( this );
|
|
||||||
getSite().getPage().addSelectionListener( IDebugUIConstants.ID_DEBUG_VIEW, this );
|
|
||||||
getSite().setSelectionProvider( viewer.getSelectionProvider() );
|
|
||||||
setEventHandler( createEventHandler() );
|
|
||||||
|
|
||||||
viewer.setDocument( getDocumentProvider().getDocument( DisassemblyEditorInput.EMPTY_EDITOR_INPUT ), getDocumentProvider().getAnnotationModel( null ) );
|
|
||||||
|
|
||||||
resetViewerInput();
|
|
||||||
|
|
||||||
return viewer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.debug.ui.AbstractDebugView#createActions()
|
|
||||||
*/
|
|
||||||
protected void createActions() {
|
|
||||||
IAction action;
|
|
||||||
IVerticalRuler ruler = getVerticalRuler();
|
|
||||||
action= new ToggleBreakpointAction( this, null, ruler );
|
|
||||||
setAction( IInternalCDebugUIConstants.ACTION_TOGGLE_BREAKPOINT, action );
|
|
||||||
action= new EnableDisableBreakpointRulerAction( this, ruler );
|
|
||||||
setAction( IInternalCDebugUIConstants.ACTION_ENABLE_DISABLE_BREAKPOINT, action );
|
|
||||||
action= new CBreakpointPropertiesRulerAction( this, ruler );
|
|
||||||
setAction( IInternalCDebugUIConstants.ACTION_BREAKPOINT_PROPERTIES, action );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.debug.ui.AbstractDebugView#getHelpContextId()
|
|
||||||
*/
|
|
||||||
protected String getHelpContextId() {
|
|
||||||
return ICDebugHelpContextIds.DISASSEMBLY_VIEW;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.debug.ui.AbstractDebugView#fillContextMenu(org.eclipse.jface.action.IMenuManager)
|
|
||||||
*/
|
|
||||||
protected void fillContextMenu( IMenuManager menu ) {
|
|
||||||
menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) );
|
|
||||||
updateObjects();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.debug.ui.AbstractDebugView#configureToolBar(org.eclipse.jface.action.IToolBarManager)
|
|
||||||
*/
|
|
||||||
protected void configureToolBar( IToolBarManager tbm ) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection)
|
|
||||||
*/
|
|
||||||
public void selectionChanged( IWorkbenchPart part, ISelection selection ) {
|
|
||||||
if ( !isAvailable() || !isVisible() )
|
|
||||||
return;
|
|
||||||
if ( selection == null )
|
|
||||||
resetViewerInput();
|
|
||||||
else if ( selection instanceof IStructuredSelection )
|
|
||||||
computeInput( (IStructuredSelection)selection );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
|
|
||||||
*/
|
|
||||||
public void propertyChange( PropertyChangeEvent event ) {
|
|
||||||
String propertyName = event.getProperty();
|
|
||||||
if ( IInternalCDebugUIConstants.DISASSEMBLY_SOURCE_LINE_COLOR.equals( propertyName ) ) {
|
|
||||||
IEditorInput input = getInput();
|
|
||||||
if ( input instanceof DisassemblyEditorInput )
|
|
||||||
getSourceViewer().changeTextPresentation( createTextPresentation( ((DisassemblyEditorInput)input).getSourceRegions() ), true );
|
|
||||||
}
|
|
||||||
else if ( IInternalCDebugUIConstants.DISASSEMBLY_FONT.equals( propertyName ) ) {
|
|
||||||
getSourceViewer().getTextWidget().setFont( JFaceResources.getFont( IInternalCDebugUIConstants.DISASSEMBLY_FONT ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.debug.internal.ui.views.IDebugExceptionHandler#handleException(org.eclipse.debug.core.DebugException)
|
|
||||||
*/
|
|
||||||
public void handleException( DebugException e ) {
|
|
||||||
showMessage( e.getMessage() );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the vertical ruler to be used by this view.
|
|
||||||
*
|
|
||||||
* @return the vertical ruler
|
|
||||||
*/
|
|
||||||
protected IVerticalRuler createVerticalRuler() {
|
|
||||||
IVerticalRuler ruler = new VerticalRuler( VERTICAL_RULER_WIDTH, getAnnotationAccess() );
|
|
||||||
return ruler;
|
|
||||||
}
|
|
||||||
|
|
||||||
private IOverviewRuler createOverviewRuler( ISharedTextColors sharedColors ) {
|
|
||||||
IOverviewRuler ruler = new OverviewRuler( getAnnotationAccess(), VERTICAL_RULER_WIDTH, sharedColors );
|
|
||||||
Iterator e = fAnnotationPreferences.getAnnotationPreferences().iterator();
|
|
||||||
while( e.hasNext() ) {
|
|
||||||
AnnotationPreference preference = (AnnotationPreference)e.next();
|
|
||||||
if ( preference.contributesToHeader() )
|
|
||||||
ruler.addHeaderAnnotationType( preference.getAnnotationType() );
|
|
||||||
}
|
|
||||||
return ruler;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the source viewer to be used by this view.
|
|
||||||
*
|
|
||||||
* @param parent the parent control
|
|
||||||
* @param ruler the vertical ruler
|
|
||||||
* @param styles style bits
|
|
||||||
* @return the source viewer
|
|
||||||
*/
|
|
||||||
private SourceViewer createSourceViewer( Composite parent, IVerticalRuler vertRuler, IOverviewRuler ovRuler ) {
|
|
||||||
DisassemblyViewer viewer = new DisassemblyViewer( parent, vertRuler, ovRuler );
|
|
||||||
viewer.setRangeIndicator( new DefaultRangeIndicator() );
|
|
||||||
JFaceResources.getFontRegistry().addListener( this );
|
|
||||||
JFaceResources.getColorRegistry().addListener( this );
|
|
||||||
return viewer;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected SourceViewer getSourceViewer() {
|
|
||||||
return (SourceViewer)getViewer();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates this view's event handler.
|
|
||||||
*
|
|
||||||
* @return an event handler
|
|
||||||
*/
|
|
||||||
protected AbstractDebugEventHandler createEventHandler() {
|
|
||||||
return new DisassemblyViewEventHandler( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void computeInput( IStructuredSelection ssel ) {
|
|
||||||
SourceViewer viewer = getSourceViewer();
|
|
||||||
if ( viewer == null )
|
|
||||||
return;
|
|
||||||
|
|
||||||
fLastStackFrame = null;
|
|
||||||
if ( ssel != null && ssel.size() == 1 ) {
|
|
||||||
Object element = ssel.getFirstElement();
|
|
||||||
if ( element instanceof ICStackFrame ) {
|
|
||||||
fLastStackFrame = (ICStackFrame)element;
|
|
||||||
IEditorInput input = getInput();
|
|
||||||
if ( input instanceof DisassemblyEditorInput &&
|
|
||||||
!((DisassemblyEditorInput)input).contains( (ICStackFrame)element ) )
|
|
||||||
setViewerInput( DisassemblyEditorInput.PENDING_EDITOR_INPUT );
|
|
||||||
computeInput( input, (ICStackFrame)element, this );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
resetViewerInput();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setViewerInput( IEditorInput input ) {
|
|
||||||
SourceViewer viewer = getSourceViewer();
|
|
||||||
if ( viewer == null )
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ( input == null )
|
|
||||||
input = DisassemblyEditorInput.EMPTY_EDITOR_INPUT;
|
|
||||||
|
|
||||||
IEditorInput current = getInput();
|
|
||||||
if ( current != null && current.equals( input ) ) {
|
|
||||||
updateObjects();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
setInput( input );
|
|
||||||
showViewer();
|
|
||||||
try {
|
|
||||||
getDocumentProvider().connect( input );
|
|
||||||
}
|
|
||||||
catch( CoreException e ) {
|
|
||||||
// never happens
|
|
||||||
}
|
|
||||||
getSourceViewer().setDocument( getDocumentProvider().getDocument( input ),
|
|
||||||
getDocumentProvider().getAnnotationModel( input ) );
|
|
||||||
if ( input instanceof DisassemblyEditorInput ) {
|
|
||||||
// Workaround for bug #69728
|
|
||||||
IRegion[] sourceRegions = ((DisassemblyEditorInput)input).getSourceRegions();
|
|
||||||
if ( sourceRegions.length > 0 ) {
|
|
||||||
getSourceViewer().changeTextPresentation( createTextPresentation( sourceRegions ), true );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
updateObjects();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.IWorkbenchPart#dispose()
|
|
||||||
*/
|
|
||||||
public void dispose() {
|
|
||||||
getSite().getPage().removeSelectionListener( IDebugUIConstants.ID_DEBUG_VIEW, this );
|
|
||||||
JFaceResources.getFontRegistry().removeListener( this );
|
|
||||||
JFaceResources.getColorRegistry().removeListener( this );
|
|
||||||
getEditorPreferenceStore().removePropertyChangeListener( this );
|
|
||||||
CDebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener( this );
|
|
||||||
|
|
||||||
if ( fSourceViewerDecorationSupport != null ) {
|
|
||||||
fSourceViewerDecorationSupport.dispose();
|
|
||||||
fSourceViewerDecorationSupport = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( fDocumentProvider != null ) {
|
|
||||||
fDocumentProvider.dispose();
|
|
||||||
fDocumentProvider = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( fActions != null ) {
|
|
||||||
fActions.clear();
|
|
||||||
fActions = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
super.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.debug.internal.ui.views.disassembly.IDisassemblyListener#inputComputed(org.eclipse.cdt.debug.core.model.ICStackFrame, org.eclipse.core.runtime.IStatus, org.eclipse.ui.IEditorInput)
|
|
||||||
*/
|
|
||||||
public void inputComputed( final ICStackFrame frame, final IStatus status, final IEditorInput input ) {
|
|
||||||
Runnable runnable = new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
if ( isAvailable() ) {
|
|
||||||
if ( fLastStackFrame != null && fLastStackFrame.equals( frame ) ) {
|
|
||||||
fLastStackFrame = null;
|
|
||||||
if ( !status.isOK() ) {
|
|
||||||
setInput( null );
|
|
||||||
getViewer().setInput( null );
|
|
||||||
showMessage( status.getMessage() );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( input != null ) {
|
|
||||||
setViewerInput( input );
|
|
||||||
selectAndReveal( frame, input );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
resetViewerInput();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
asyncExec( runnable );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Asynchronousy computes the editor input for the given stack frame.
|
|
||||||
*
|
|
||||||
* @param current the current editor input
|
|
||||||
* @param frame the stack frame for which the input is required
|
|
||||||
* @param listener the listener to be notified when the computation is completed
|
|
||||||
*/
|
|
||||||
public void computeInput( final Object current,
|
|
||||||
final ICStackFrame frame,
|
|
||||||
final IDisassemblyListener listener ) {
|
|
||||||
Runnable runnable = new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
IStatus status = Status.OK_STATUS;
|
|
||||||
IEditorInput input = null;
|
|
||||||
if ( current instanceof DisassemblyEditorInput &&
|
|
||||||
((DisassemblyEditorInput)current).contains( frame ) ) {
|
|
||||||
input = (IEditorInput)current;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
input = DisassemblyEditorInput.create( frame );
|
|
||||||
}
|
|
||||||
catch( DebugException e ) {
|
|
||||||
status = new Status( IStatus.ERROR,
|
|
||||||
CDebugUIPlugin.getUniqueIdentifier(),
|
|
||||||
0,
|
|
||||||
e.getMessage(),
|
|
||||||
null );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
listener.inputComputed( frame, status, input );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
DebugPlugin.getDefault().asyncExec( runnable );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void selectAndReveal( ICStackFrame frame, IEditorInput input ) {
|
|
||||||
IRegion region = getLineInformation( frame, input );
|
|
||||||
if ( region != null ) {
|
|
||||||
int start = region.getOffset();
|
|
||||||
int length = region.getLength();
|
|
||||||
StyledText widget = getSourceViewer().getTextWidget();
|
|
||||||
widget.setRedraw( false );
|
|
||||||
{
|
|
||||||
getSourceViewer().revealRange( start, length );
|
|
||||||
getSourceViewer().setSelectedRange( start, 0 );
|
|
||||||
}
|
|
||||||
widget.setRedraw( true );
|
|
||||||
setInstructionPointer( frame, start, length, getDocumentProvider().getAnnotationModel( input ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the line information for the given line in the given editor
|
|
||||||
*/
|
|
||||||
private IRegion getLineInformation( ICStackFrame frame, IEditorInput input ) {
|
|
||||||
if ( input instanceof DisassemblyEditorInput ) {
|
|
||||||
final IAddress address = frame.getAddress(); // will return null if frame has been disposed
|
|
||||||
if (address != null) {
|
|
||||||
int line = ((DisassemblyEditorInput)input).getInstructionLine( address );
|
|
||||||
if ( line > 0 ) {
|
|
||||||
try {
|
|
||||||
return getSourceViewer().getDocument().getLineInformation( --line );
|
|
||||||
}
|
|
||||||
catch( BadLocationException e1 ) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEditorInput getInput() {
|
|
||||||
if ( getSourceViewer() != null ) {
|
|
||||||
Object input = getSourceViewer().getInput();
|
|
||||||
if ( input instanceof IEditorInput )
|
|
||||||
return (IEditorInput)input;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setInput( IEditorInput input ) {
|
|
||||||
getSourceViewer().setInput( input );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
|
|
||||||
*/
|
|
||||||
public void createPartControl( Composite parent ) {
|
|
||||||
super.createPartControl( parent );
|
|
||||||
createViewContextMenu();
|
|
||||||
createRulerContextMenu();
|
|
||||||
if ( fSourceViewerDecorationSupport != null )
|
|
||||||
fSourceViewerDecorationSupport.install( getEditorPreferenceStore() );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the source viewer decoration support.
|
|
||||||
*
|
|
||||||
* @return the source viewer decoration support
|
|
||||||
*/
|
|
||||||
protected SourceViewerDecorationSupport getSourceViewerDecorationSupport( ISourceViewer viewer ) {
|
|
||||||
if ( fSourceViewerDecorationSupport == null ) {
|
|
||||||
fSourceViewerDecorationSupport = new SourceViewerDecorationSupport( viewer, getOverviewRuler(), getAnnotationAccess(), getSharedColors() );
|
|
||||||
configureSourceViewerDecorationSupport( fSourceViewerDecorationSupport );
|
|
||||||
}
|
|
||||||
return fSourceViewerDecorationSupport;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the annotation access for this view.
|
|
||||||
*
|
|
||||||
* @return the created annotation access
|
|
||||||
*/
|
|
||||||
private IAnnotationAccess createAnnotationAccess() {
|
|
||||||
return new DefaultMarkerAnnotationAccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Configures the decoration support for this view's the source viewer.
|
|
||||||
*/
|
|
||||||
private void configureSourceViewerDecorationSupport( SourceViewerDecorationSupport support ) {
|
|
||||||
Iterator e = fAnnotationPreferences.getAnnotationPreferences().iterator();
|
|
||||||
while( e.hasNext() )
|
|
||||||
support.setAnnotationPreference( (AnnotationPreference)e.next() );
|
|
||||||
support.setCursorLinePainterPreferenceKeys( CURRENT_LINE, CURRENT_LINE_COLOR );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the annotation access.
|
|
||||||
*
|
|
||||||
* @return the annotation access
|
|
||||||
*/
|
|
||||||
private IAnnotationAccess getAnnotationAccess() {
|
|
||||||
if ( fAnnotationAccess == null )
|
|
||||||
fAnnotationAccess = createAnnotationAccess();
|
|
||||||
return fAnnotationAccess;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ISharedTextColors getSharedColors() {
|
|
||||||
ISharedTextColors sharedColors = CDebugUIPlugin.getDefault().getSharedTextColors();
|
|
||||||
return sharedColors;
|
|
||||||
}
|
|
||||||
|
|
||||||
private IPreferenceStore getEditorPreferenceStore() {
|
|
||||||
return EditorsUI.getPreferenceStore();
|
|
||||||
}
|
|
||||||
|
|
||||||
public DisassemblyDocumentProvider getDocumentProvider() {
|
|
||||||
if ( this.fDocumentProvider == null )
|
|
||||||
this.fDocumentProvider = new DisassemblyDocumentProvider();
|
|
||||||
return this.fDocumentProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setInstructionPointer( ICStackFrame frame, int start, int length, IAnnotationModel model ) {
|
|
||||||
Assert.isNotNull( model );
|
|
||||||
boolean tos = isTopStackFrame( frame );
|
|
||||||
DisassemblyInstructionPointerAnnotation instPtrAnnotation = new DisassemblyInstructionPointerAnnotation( frame, tos );
|
|
||||||
Position position = new Position( start, length );
|
|
||||||
DisassemblyInstructionPointerAnnotation oldPointer = getCurrentInstructionPointer();
|
|
||||||
if ( oldPointer != null )
|
|
||||||
model.removeAnnotation( oldPointer );
|
|
||||||
model.addAnnotation( instPtrAnnotation, position );
|
|
||||||
setCurrentInstructionPointer( instPtrAnnotation );
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isTopStackFrame( ICStackFrame stackFrame ) {
|
|
||||||
IThread thread = stackFrame.getThread();
|
|
||||||
boolean tos = false;
|
|
||||||
try {
|
|
||||||
tos = stackFrame.equals( thread.getTopStackFrame() );
|
|
||||||
}
|
|
||||||
catch( DebugException e ) {
|
|
||||||
}
|
|
||||||
return tos;
|
|
||||||
}
|
|
||||||
|
|
||||||
private DisassemblyInstructionPointerAnnotation getCurrentInstructionPointer() {
|
|
||||||
return fInstrPointerAnnotation;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setCurrentInstructionPointer( DisassemblyInstructionPointerAnnotation instrPointer ) {
|
|
||||||
fInstrPointerAnnotation = instrPointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void removeCurrentInstructionPointer( IAnnotationModel model ) {
|
|
||||||
Assert.isNotNull( model );
|
|
||||||
DisassemblyInstructionPointerAnnotation instrPointer = getCurrentInstructionPointer();
|
|
||||||
if ( instrPointer != null ) {
|
|
||||||
model.removeAnnotation( instrPointer );
|
|
||||||
setCurrentInstructionPointer( null );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void resetViewerInput() {
|
|
||||||
SourceViewer viewer = getSourceViewer();
|
|
||||||
if ( viewer == null )
|
|
||||||
return;
|
|
||||||
|
|
||||||
IEditorInput input = DisassemblyEditorInput.EMPTY_EDITOR_INPUT;
|
|
||||||
setInput( input );
|
|
||||||
showViewer();
|
|
||||||
try {
|
|
||||||
getDocumentProvider().connect( input );
|
|
||||||
}
|
|
||||||
catch( CoreException e ) {
|
|
||||||
// never happens
|
|
||||||
}
|
|
||||||
IAnnotationModel model = getDocumentProvider().getAnnotationModel( input );
|
|
||||||
getSourceViewer().setDocument( getDocumentProvider().getDocument( input ), model );
|
|
||||||
removeCurrentInstructionPointer( model );
|
|
||||||
|
|
||||||
updateObjects();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.debug.ui.AbstractDebugView#becomesHidden()
|
|
||||||
*/
|
|
||||||
protected void becomesHidden() {
|
|
||||||
selectionChanged( null, new StructuredSelection() );
|
|
||||||
super.becomesHidden();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.debug.ui.AbstractDebugView#becomesVisible()
|
|
||||||
*/
|
|
||||||
protected void becomesVisible() {
|
|
||||||
super.becomesVisible();
|
|
||||||
IViewPart part = getSite().getPage().findView( IDebugUIConstants.ID_DEBUG_VIEW );
|
|
||||||
if ( part != null ) {
|
|
||||||
ISelection selection = getSite().getPage().getSelection( IDebugUIConstants.ID_DEBUG_VIEW );
|
|
||||||
selectionChanged( part, selection );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the overview ruler.
|
|
||||||
*
|
|
||||||
* @return the overview ruler
|
|
||||||
*/
|
|
||||||
private IOverviewRuler getOverviewRuler() {
|
|
||||||
if ( fOverviewRuler == null )
|
|
||||||
fOverviewRuler = createOverviewRuler( getSharedColors() );
|
|
||||||
return fOverviewRuler;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String getRulerContextMenuId() {
|
|
||||||
return this.fRulerContextMenuId;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setRulerContextMenuId( String rulerContextMenuId ) {
|
|
||||||
Assert.isNotNull( rulerContextMenuId );
|
|
||||||
this.fRulerContextMenuId = rulerContextMenuId;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected String getViewContextMenuId() {
|
|
||||||
return this.fViewContextMenuId;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setViewContextMenuId( String viewContextMenuId ) {
|
|
||||||
Assert.isNotNull( viewContextMenuId );
|
|
||||||
this.fViewContextMenuId = viewContextMenuId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets up the ruler context menu before it is made visible.
|
|
||||||
*
|
|
||||||
* @param menu the menu
|
|
||||||
*/
|
|
||||||
protected void rulerContextMenuAboutToShow( IMenuManager menu ) {
|
|
||||||
menu.add( new Separator( ITextEditorActionConstants.GROUP_REST ) );
|
|
||||||
menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) );
|
|
||||||
addAction( menu, IInternalCDebugUIConstants.ACTION_TOGGLE_BREAKPOINT );
|
|
||||||
addAction( menu, IInternalCDebugUIConstants.ACTION_ENABLE_DISABLE_BREAKPOINT );
|
|
||||||
addAction( menu, IInternalCDebugUIConstants.ACTION_BREAKPOINT_PROPERTIES );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets up the view context menu before it is made visible.
|
|
||||||
*
|
|
||||||
* @param menu the menu
|
|
||||||
*/
|
|
||||||
protected void viewContextMenuAboutToShow( IMenuManager menu ) {
|
|
||||||
menu.add( new Separator( ITextEditorActionConstants.GROUP_REST ) );
|
|
||||||
menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convenience method to add the action installed under the given action id to the specified group of the menu.
|
|
||||||
* @param menu the menu to add the action to
|
|
||||||
* @param group the group in the menu
|
|
||||||
* @param actionId the id of the action to add
|
|
||||||
*/
|
|
||||||
protected final void addAction( IMenuManager menu, String group, String actionId ) {
|
|
||||||
IAction action = getAction( actionId );
|
|
||||||
if ( action != null ) {
|
|
||||||
if ( action instanceof IUpdate )
|
|
||||||
((IUpdate)action).update();
|
|
||||||
IMenuManager subMenu = menu.findMenuUsingPath( group );
|
|
||||||
if ( subMenu != null )
|
|
||||||
subMenu.add( action );
|
|
||||||
else
|
|
||||||
menu.appendToGroup( group, action );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convenience method to add the action installed under the given action id to the given menu.
|
|
||||||
* @param menu the menu to add the action to
|
|
||||||
* @param actionId the id of the action to be added
|
|
||||||
*/
|
|
||||||
protected final void addAction( IMenuManager menu, String actionId ) {
|
|
||||||
IAction action = getAction( actionId );
|
|
||||||
if ( action != null ) {
|
|
||||||
if ( action instanceof IUpdate )
|
|
||||||
((IUpdate)action).update();
|
|
||||||
menu.add( action );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Menu getRulerContextMenu() {
|
|
||||||
return this.fRulerContextMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setRulerContextMenu( Menu rulerContextMenu ) {
|
|
||||||
this.fRulerContextMenu = rulerContextMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createViewContextMenu() {
|
|
||||||
String id = getViewContextMenuId();
|
|
||||||
MenuManager manager = new MenuManager( id, id );
|
|
||||||
manager.setRemoveAllWhenShown( true );
|
|
||||||
manager.addMenuListener( getContextMenuListener() );
|
|
||||||
StyledText styledText = getSourceViewer().getTextWidget();
|
|
||||||
setTextContextMenu( manager.createContextMenu( styledText ) );
|
|
||||||
styledText.setMenu( getTextContextMenu() );
|
|
||||||
|
|
||||||
// register the context menu such that other plugins may contribute to it
|
|
||||||
if ( getSite() != null ) {
|
|
||||||
getSite().registerContextMenu( id, manager, getSourceViewer() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createRulerContextMenu() {
|
|
||||||
String id = getRulerContextMenuId();
|
|
||||||
MenuManager manager = new MenuManager( id, id );
|
|
||||||
manager.setRemoveAllWhenShown( true );
|
|
||||||
manager.addMenuListener( getContextMenuListener() );
|
|
||||||
Control rulerControl = fVerticalRuler.getControl();
|
|
||||||
setRulerContextMenu( manager.createContextMenu( rulerControl ) );
|
|
||||||
rulerControl.setMenu( getRulerContextMenu() );
|
|
||||||
rulerControl.addMouseListener( getRulerMouseListener() );
|
|
||||||
|
|
||||||
if ( getSite() != null ) {
|
|
||||||
getSite().registerContextMenu( id, manager, getSourceViewer() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Menu getTextContextMenu() {
|
|
||||||
return this.fTextContextMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setTextContextMenu( Menu textContextMenu ) {
|
|
||||||
this.fTextContextMenu = textContextMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAction( String actionID, IAction action ) {
|
|
||||||
Assert.isNotNull( actionID );
|
|
||||||
if ( action == null ) {
|
|
||||||
action = (IAction)fActions.remove( actionID );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fActions.put( actionID, action );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public IAction getAction( String actionID ) {
|
|
||||||
Assert.isNotNull( actionID );
|
|
||||||
return (IAction)fActions.get( actionID );
|
|
||||||
}
|
|
||||||
|
|
||||||
private IVerticalRuler getVerticalRuler() {
|
|
||||||
return this.fVerticalRuler;
|
|
||||||
}
|
|
||||||
|
|
||||||
private TextPresentation createTextPresentation( IRegion[] regions ) {
|
|
||||||
TextPresentation p = new TextPresentation();
|
|
||||||
for ( int i = 0; i < regions.length; ++i ) {
|
|
||||||
p.addStyleRange( new StyleRange( regions[i].getOffset(),
|
|
||||||
regions[i].getLength(),
|
|
||||||
CDebugUIPlugin.getPreferenceColor( IInternalCDebugUIConstants.DISASSEMBLY_SOURCE_LINE_COLOR ),
|
|
||||||
null ) );
|
|
||||||
}
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void refresh( IDisassembly disassembly ) {
|
|
||||||
if ( !(getInput() instanceof DisassemblyEditorInput) || !disassembly.equals( ((DisassemblyEditorInput)getInput()).getDisassembly() ) )
|
|
||||||
return;
|
|
||||||
resetViewerInput();
|
|
||||||
if ( !isAvailable() || !isVisible() )
|
|
||||||
return;
|
|
||||||
IAdaptable context = DebugUITools.getDebugContext();
|
|
||||||
if ( context instanceof ICStackFrame ) {
|
|
||||||
fLastStackFrame = (ICStackFrame)context;
|
|
||||||
IEditorInput input = getInput();
|
|
||||||
if ( input instanceof DisassemblyEditorInput )
|
|
||||||
setViewerInput( DisassemblyEditorInput.PENDING_EDITOR_INPUT );
|
|
||||||
computeInput( input, (ICStackFrame)context, this );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.part.PageBookView#partActivated(org.eclipse.ui.IWorkbenchPart)
|
|
||||||
*/
|
|
||||||
public void partActivated( IWorkbenchPart part ) {
|
|
||||||
if ( this.equals( part ) ) {
|
|
||||||
CDebugCorePlugin.getDefault().getPluginPreferences().setValue( ICDebugConstants.PREF_INSTRUCTION_STEP_MODE_ON, true );
|
|
||||||
}
|
|
||||||
super.partActivated( part );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.part.PageBookView#partDeactivated(org.eclipse.ui.IWorkbenchPart)
|
|
||||||
*/
|
|
||||||
public void partDeactivated( IWorkbenchPart part ) {
|
|
||||||
if ( this.equals( part ) ) {
|
|
||||||
CDebugCorePlugin.getDefault().getPluginPreferences().setValue( ICDebugConstants.PREF_INSTRUCTION_STEP_MODE_ON, false );
|
|
||||||
}
|
|
||||||
super.partDeactivated( part );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object getAdapter(Class adapter) {
|
|
||||||
if (IDocument.class.equals(adapter)) {
|
|
||||||
return getDocumentProvider().getDocument(getInput());
|
|
||||||
}
|
|
||||||
return super.getAdapter(adapter);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getOrientation() {
|
|
||||||
//bug 273250 - Disassembly view should have LTR orientation
|
|
||||||
return SWT.LEFT_TO_RIGHT;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,85 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2004, 2006 QNX Software Systems 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:
|
|
||||||
* QNX Software Systems - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.disassembly;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.core.model.IDisassembly;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler;
|
|
||||||
import org.eclipse.debug.core.DebugEvent;
|
|
||||||
import org.eclipse.debug.ui.AbstractDebugView;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the disassembly view.
|
|
||||||
*/
|
|
||||||
public class DisassemblyViewEventHandler extends AbstractDebugEventHandler {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor for DisassemblyViewEventHandler.
|
|
||||||
*
|
|
||||||
* @param view
|
|
||||||
*/
|
|
||||||
public DisassemblyViewEventHandler( AbstractDebugView view ) {
|
|
||||||
super( view );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler#doHandleDebugEvents(org.eclipse.debug.core.DebugEvent[])
|
|
||||||
*/
|
|
||||||
protected void doHandleDebugEvents( DebugEvent[] events ) {
|
|
||||||
for ( int i = 0; i < events.length; i++ ) {
|
|
||||||
DebugEvent event = events[i];
|
|
||||||
switch( event.getKind() ) {
|
|
||||||
case DebugEvent.TERMINATE:
|
|
||||||
handleTerminateEvent( events[i] );
|
|
||||||
break;
|
|
||||||
case DebugEvent.SUSPEND:
|
|
||||||
handleSuspendEvent( events[i] );
|
|
||||||
break;
|
|
||||||
case DebugEvent.RESUME:
|
|
||||||
handleResumeEvent( events[i] );
|
|
||||||
break;
|
|
||||||
case DebugEvent.CHANGE:
|
|
||||||
handleChangeEvent( events[i] );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler#refresh()
|
|
||||||
*/
|
|
||||||
public void refresh() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler#refresh(java.lang.Object)
|
|
||||||
*/
|
|
||||||
protected void refresh( Object element ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleTerminateEvent( DebugEvent event ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleResumeEvent( DebugEvent event ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleSuspendEvent( DebugEvent event ) {
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleChangeEvent( DebugEvent event ) {
|
|
||||||
if ( event.getSource() instanceof IDisassembly )
|
|
||||||
getDisassemblyView().refresh( (IDisassembly)event.getSource() );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected DisassemblyView getDisassemblyView() {
|
|
||||||
return (DisassemblyView)getView();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,60 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2004, 2006 QNX Software Systems 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:
|
|
||||||
* QNX Software Systems - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.disassembly;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
|
|
||||||
import org.eclipse.jface.resource.JFaceResources;
|
|
||||||
import org.eclipse.jface.text.source.IOverviewRuler;
|
|
||||||
import org.eclipse.jface.text.source.IVerticalRuler;
|
|
||||||
import org.eclipse.jface.text.source.SourceViewer;
|
|
||||||
import org.eclipse.swt.SWT;
|
|
||||||
import org.eclipse.swt.layout.GridData;
|
|
||||||
import org.eclipse.swt.widgets.Composite;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The disassembly viewer.
|
|
||||||
*/
|
|
||||||
public class DisassemblyViewer extends SourceViewer {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The current input.
|
|
||||||
*/
|
|
||||||
private Object fInput;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor for DisassemblyViewer.
|
|
||||||
*
|
|
||||||
* @param parent
|
|
||||||
* @param ruler
|
|
||||||
* @param styles
|
|
||||||
*/
|
|
||||||
public DisassemblyViewer( Composite parent, IVerticalRuler vertRuler, IOverviewRuler ovRuler ) {
|
|
||||||
super( parent, vertRuler, ovRuler, true, SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION );
|
|
||||||
getTextWidget().setFont( JFaceResources.getFont( IInternalCDebugUIConstants.DISASSEMBLY_FONT ) );
|
|
||||||
setEditable( false );
|
|
||||||
GridData gd = new GridData( GridData.FILL_BOTH );
|
|
||||||
getControl().setLayoutData( gd );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.viewers.IInputProvider#getInput()
|
|
||||||
*/
|
|
||||||
public Object getInput() {
|
|
||||||
return fInput;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
|
|
||||||
*/
|
|
||||||
public void setInput( Object input ) {
|
|
||||||
fInput = input;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2004, 2008 QNX Software Systems 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:
|
|
||||||
* QNX Software Systems - Initial API and implementation
|
|
||||||
* Anton Leherbauer (Wind River Systems)
|
|
||||||
*******************************************************************************/
|
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.disassembly;
|
|
||||||
|
|
||||||
import org.eclipse.jface.text.DefaultInformationControl;
|
|
||||||
import org.eclipse.jface.text.IInformationControl;
|
|
||||||
import org.eclipse.jface.text.IInformationControlCreator;
|
|
||||||
import org.eclipse.jface.text.source.IAnnotationHover;
|
|
||||||
import org.eclipse.jface.text.source.ISourceViewer;
|
|
||||||
import org.eclipse.jface.text.source.SourceViewerConfiguration;
|
|
||||||
import org.eclipse.swt.widgets.Shell;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Viewer configuration for disassembly.
|
|
||||||
*/
|
|
||||||
public class DisassemblyViewerConfiguration extends SourceViewerConfiguration {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see org.eclipse.jface.text.source.SourceViewerConfiguration#getAnnotationHover(org.eclipse.jface.text.source.ISourceViewer)
|
|
||||||
*/
|
|
||||||
public IAnnotationHover getAnnotationHover( ISourceViewer sourceViewer ) {
|
|
||||||
return new DisassemblyAnnotationHover();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see org.eclipse.jface.text.source.SourceViewerConfiguration#getInformationControlCreator(org.eclipse.jface.text.source.ISourceViewer)
|
|
||||||
*/
|
|
||||||
public IInformationControlCreator getInformationControlCreator( ISourceViewer sourceViewer ) {
|
|
||||||
return getInformationControlCreator( sourceViewer, true );
|
|
||||||
}
|
|
||||||
|
|
||||||
public IInformationControlCreator getInformationControlCreator( ISourceViewer sourceViewer, final boolean cutDown ) {
|
|
||||||
return new IInformationControlCreator() {
|
|
||||||
public IInformationControl createInformationControl( Shell parent ) {
|
|
||||||
return new DefaultInformationControl( parent, false );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,134 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2009 QNX Software Systems 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:
|
|
||||||
* QNX Software Systems - initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.disassembly;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.IAddress;
|
|
||||||
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
|
|
||||||
import org.eclipse.cdt.debug.core.model.ICStackFrame;
|
|
||||||
import org.eclipse.cdt.debug.core.model.IDisassembly;
|
|
||||||
import org.eclipse.cdt.debug.core.model.IDisassemblyBlock;
|
|
||||||
import org.eclipse.cdt.debug.internal.core.model.Disassembly;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyEditorInput;
|
|
||||||
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyView;
|
|
||||||
import org.eclipse.cdt.utils.Addr32;
|
|
||||||
import org.eclipse.debug.core.DebugException;
|
|
||||||
import org.eclipse.debug.core.model.IDebugTarget;
|
|
||||||
import org.eclipse.debug.ui.IDebugUIConstants;
|
|
||||||
import org.eclipse.jface.action.IAction;
|
|
||||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
|
||||||
import org.eclipse.jface.dialogs.IInputValidator;
|
|
||||||
import org.eclipse.jface.dialogs.InputDialog;
|
|
||||||
import org.eclipse.jface.dialogs.MessageDialog;
|
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
|
||||||
import org.eclipse.jface.window.Window;
|
|
||||||
import org.eclipse.ui.IActionDelegate;
|
|
||||||
import org.eclipse.ui.IViewActionDelegate;
|
|
||||||
import org.eclipse.ui.IViewPart;
|
|
||||||
|
|
||||||
public class GoToAddressActionDelegate implements IActionDelegate, IViewActionDelegate {
|
|
||||||
private IViewPart fView;
|
|
||||||
private IAction fAction;
|
|
||||||
private DisassemblyView fDisassemblyView;
|
|
||||||
|
|
||||||
public void init(IViewPart view) {
|
|
||||||
setView(view);
|
|
||||||
if (view instanceof DisassemblyView) {
|
|
||||||
fDisassemblyView = (DisassemblyView) view;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setView(IViewPart view) {
|
|
||||||
fView = view;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IViewPart getView() {
|
|
||||||
return fView;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void run(IAction action) {
|
|
||||||
String address;
|
|
||||||
InputDialog dialog = new InputDialog(fView.getViewSite().getShell(), "Enter address", "Enter address to go to", "",
|
|
||||||
new IInputValidator() {
|
|
||||||
public String isValid(String in) {
|
|
||||||
try {
|
|
||||||
String input = in.trim();
|
|
||||||
if (input.length() == 0)
|
|
||||||
return "Cannot be empty address";
|
|
||||||
if (input.toLowerCase().startsWith("0x")) {
|
|
||||||
Long.parseLong(input.substring(2), 16);
|
|
||||||
} else {
|
|
||||||
Long.parseLong(input);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
} catch (NumberFormatException ex) {
|
|
||||||
return "Must be a hexadecimal or decimal address";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (dialog.open() == Window.OK) {
|
|
||||||
address = dialog.getValue();
|
|
||||||
gotoAddress(address);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setAction(IAction action) {
|
|
||||||
fAction = action;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IAction getAction() {
|
|
||||||
return fAction;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void selectionChanged(IAction action, ISelection selection) {
|
|
||||||
setAction(action);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void gotoAddress(String addr) {
|
|
||||||
IAddress address = new Addr32(addr);
|
|
||||||
if (fDisassemblyView != null) {
|
|
||||||
ICDebugTarget target = null;
|
|
||||||
ISelection selection = fDisassemblyView.getSite().getPage().getSelection(IDebugUIConstants.ID_DEBUG_VIEW);
|
|
||||||
if (selection instanceof IStructuredSelection) {
|
|
||||||
Object element = ((IStructuredSelection) selection).getFirstElement();
|
|
||||||
if (element instanceof ICStackFrame) {
|
|
||||||
IDebugTarget tar = ((ICStackFrame) element).getDebugTarget();
|
|
||||||
if (tar instanceof ICDebugTarget) {
|
|
||||||
target = (ICDebugTarget) tar;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DisassemblyEditorInput input = null;
|
|
||||||
try {
|
|
||||||
input = create(target, address);
|
|
||||||
fDisassemblyView.setViewerInput(input);
|
|
||||||
} catch (DebugException e) {
|
|
||||||
MessageDialog dialog = new MessageDialog(fView.getViewSite().getShell(), "Wrong address", null,
|
|
||||||
"Cannot access memory at address " + addr, MessageDialog.ERROR, new String[] { IDialogConstants.OK_LABEL },
|
|
||||||
0);
|
|
||||||
dialog.open();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DisassemblyEditorInput create(ICDebugTarget target, IAddress address) throws DebugException {
|
|
||||||
DisassemblyEditorInput input = null;
|
|
||||||
IDisassembly disassembly = target.getDisassembly();
|
|
||||||
if (disassembly instanceof Disassembly) {
|
|
||||||
IDisassemblyBlock block = ((Disassembly) disassembly).getDisassemblyBlock(address);
|
|
||||||
input = DisassemblyEditorInput.create(block);
|
|
||||||
}
|
|
||||||
return input;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2004, 2006 QNX Software Systems 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:
|
|
||||||
* QNX Software Systems - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.disassembly;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.core.model.ICStackFrame;
|
|
||||||
import org.eclipse.core.runtime.IStatus;
|
|
||||||
import org.eclipse.ui.IEditorInput;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A disassembly listener is notified when the storage
|
|
||||||
* retrieval operation for given stack frame is completed.
|
|
||||||
*/
|
|
||||||
public interface IDisassemblyListener {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Notifies this listener that the input is computed.
|
|
||||||
*
|
|
||||||
* @param frame the stack frame.
|
|
||||||
* @param status the result status.
|
|
||||||
* @param input the resulting editor input.
|
|
||||||
* <code>null</code> if status is not OK.
|
|
||||||
*/
|
|
||||||
public void inputComputed( ICStackFrame frame, IStatus status, IEditorInput input );
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue