From 40300813c0a0e5fcb8cbc14f10acbc712538264a Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Mon, 13 Jan 2003 22:28:48 +0000 Subject: [PATCH] Implementation of the 'Run To Line' action for disassembly. --- debug/org.eclipse.cdt.debug.ui/ChangeLog | 4 ++ .../ui/actions/RunToLineActionDelegate.java | 47 ++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index fe258f5e138..470ffa02bec 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,7 @@ +2003-01-10 Mikhail Khodjaiants + Implementation of the 'Run To Line' action for disassembly. + * RunToLineActionDelegate.java + 2003-01-13 Alain Magloire * src/org/eclipse/cdt/debug/internal/ui/editors/DebugTextHover.java (getHoverInfo): diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RunToLineActionDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RunToLineActionDelegate.java index 08c40f08432..013ac4aa315 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RunToLineActionDelegate.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RunToLineActionDelegate.java @@ -5,10 +5,14 @@ */ package org.eclipse.cdt.debug.internal.ui.actions; +import org.eclipse.cdt.debug.core.model.IRunToAddress; import org.eclipse.cdt.debug.core.model.IRunToLine; +import org.eclipse.cdt.debug.core.sourcelookup.IDisassemblyStorage; import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IStorage; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IDebugElement; @@ -21,6 +25,7 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IFileEditorInput; +import org.eclipse.ui.IStorageEditorInput; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.texteditor.ITextEditor; @@ -52,11 +57,30 @@ public class RunToLineActionDelegate extends AbstractEditorActionDelegate IFile file = ((IFileEditorInput)input).getFile(); if ( file != null ) { - ITextSelection selection= (ITextSelection)((ITextEditor)getTargetPart()).getSelectionProvider().getSelection(); + ITextSelection selection = (ITextSelection)((ITextEditor)getTargetPart()).getSelectionProvider().getSelection(); int lineNumber = selection.getStartLine() + 1; runToLine( file, lineNumber ); } } + else if ( input != null && input instanceof IStorageEditorInput ) + { + try + { + IStorage storage = ((IStorageEditorInput)input).getStorage(); + if ( storage != null && storage.getAdapter( IDisassemblyStorage.class ) != null ) + { + IDisassemblyStorage disassemblyStorage = (IDisassemblyStorage)storage.getAdapter( IDisassemblyStorage.class ); + ITextSelection selection = (ITextSelection)((ITextEditor)getTargetPart()).getSelectionProvider().getSelection(); + int lineNumber = selection.getStartLine(); + long address = disassemblyStorage.getAddress( lineNumber ); + if ( address > 0 ) + runToAddress( address ); + } + } + catch( CoreException e ) + { + } + } } } @@ -122,4 +146,25 @@ public class RunToLineActionDelegate extends AbstractEditorActionDelegate } } } + + protected void runToAddress( long address ) + { + IRunToAddress target = (IRunToAddress)getDebugTarget().getAdapter( IRunToAddress.class ); + if ( target != null ) + { + if ( !target.canRunToAddress( address ) ) + { + getTargetPart().getSite().getShell().getDisplay().beep(); + return; + } + try + { + target.runToAddress( address ); + } + catch( DebugException e ) + { + CDebugUIPlugin.errorDialog( e.getMessage(), e ); + } + } + } }