diff options
author | Mikhail Khodjaiants | 2005-01-21 18:54:55 +0000 |
---|---|---|
committer | Mikhail Khodjaiants | 2005-01-21 18:54:55 +0000 |
commit | d26cf662e5866d7de215920d88d87df511d2b9c0 (patch) | |
tree | d9d9d0fd0bbaa5d0ef7ee89217c6779657ee51c4 | |
parent | b64d1a5b1c07f3b84c8002ee89c8eef4fefaa068 (diff) | |
download | org.eclipse.cdt-d26cf662e5866d7de215920d88d87df511d2b9c0.tar.gz org.eclipse.cdt-d26cf662e5866d7de215920d88d87df511d2b9c0.tar.xz org.eclipse.cdt-d26cf662e5866d7de215920d88d87df511d2b9c0.zip |
Fix for bug 83412: Run to line and resume at line should run in the background.
4 files changed, 103 insertions, 26 deletions
diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index 48c326275af..305b840b49d 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,4 +1,10 @@ 2005-01-20 Mikhail Khodjaiants
+ Fix for bug 83412: Run to line and resume at line should run in the background.
+ * ResumeAtLineActionDelegate.java
+ * RunToLineAdapter.java
+ * ActionMessages.properties
+
+2005-01-20 Mikhail Khodjaiants
Bug 83330: Inconsistent in the label for Add expression.
* plugin.properties
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ActionMessages.properties b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ActionMessages.properties index d33ed908c01..6f6fe38f857 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ActionMessages.properties +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ActionMessages.properties @@ -46,6 +46,7 @@ ToggleBreakpointRulerAction.Error_1=Error ToggleBreakpointRulerAction.Operation_failed_1=Operation failed CBreakpointPropertiesRulerAction.Breakpoint_Properties=Breakpoint &Properties... ResumeAtLineActionDelegate.Error_1=Error +ResumeAtLineActionDelegate.0=Resume At Line failed. RestoreDefaultTypeActionDelegate.0=Unable to restore the default type. ResumeAtLineActionDelegate.Operation_failed_1=Operation failed. ResumeAtLineActionDelegate.Missing_document=Missing document diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ResumeAtLineActionDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ResumeAtLineActionDelegate.java index e75ed8d39cf..c791b243574 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ResumeAtLineActionDelegate.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ResumeAtLineActionDelegate.java @@ -12,8 +12,10 @@ 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.CDebugUtils; import org.eclipse.cdt.debug.core.model.IJumpToAddress; import org.eclipse.cdt.debug.core.model.IJumpToLine; +import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants; 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; @@ -21,7 +23,10 @@ import org.eclipse.cdt.debug.ui.ICDebugUIConstants; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.internal.ui.DebugUIPlugin; @@ -273,12 +278,24 @@ public class ResumeAtLineActionDelegate implements IWorkbenchWindowActionDelegat errorMessage = ActionMessages.getString( "ResumeAtLineActionDelegate.Missing_document" ); //$NON-NLS-1$ } else { - String fileName = getFileName( input ); + final String fileName = getFileName( input ); ITextSelection textSelection = (ITextSelection)selection; - int lineNumber = textSelection.getStartLine() + 1; - IJumpToLine jumpToLine = (IJumpToLine)((IAdaptable)debugTarget).getAdapter( IJumpToLine.class ); - if ( jumpToLine != null ) - jumpToLine.jumpToLine( fileName, lineNumber ); + final int lineNumber = textSelection.getStartLine() + 1; + final IJumpToLine jumpToLine = (IJumpToLine)((IAdaptable)debugTarget).getAdapter( IJumpToLine.class ); + if ( jumpToLine != null ) { + Runnable r = new Runnable() { + + public void run() { + try { + jumpToLine.jumpToLine( fileName, lineNumber ); + } + catch( DebugException e ) { + failed( e ); + } + } + }; + runInBackground( r ); + } return; } } @@ -291,10 +308,22 @@ public class ResumeAtLineActionDelegate implements IWorkbenchWindowActionDelegat else { ITextSelection textSelection = (ITextSelection)selection; int lineNumber = textSelection.getStartLine() + 1; - IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber ); - IJumpToAddress jumpToAddress = (IJumpToAddress)((IAdaptable)debugTarget).getAdapter( IJumpToAddress.class ); - if ( jumpToAddress != null ) - jumpToAddress.jumpToAddress( address ); + final IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber ); + final IJumpToAddress jumpToAddress = (IJumpToAddress)((IAdaptable)debugTarget).getAdapter( IJumpToAddress.class ); + if ( jumpToAddress != null ) { + Runnable r = new Runnable() { + + public void run() { + try { + jumpToAddress.jumpToAddress( address ); + } + catch( DebugException e ) { + failed( e ); + } + } + }; + runInBackground( r ); + } return; } } @@ -313,4 +342,14 @@ public class ResumeAtLineActionDelegate implements IWorkbenchWindowActionDelegat } return null; } + + private void runInBackground( Runnable r ) { + DebugPlugin.getDefault().asyncExec( r ); + } + + protected void failed( Throwable e ) { + MultiStatus ms = new MultiStatus( CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, ActionMessages.getString( "ResumeAtLineActionDelegate.0" ), null ); //$NON-NLS-1$ + ms.add( new Status( IStatus.ERROR, CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, e.getMessage(), e ) ); + CDebugUtils.error( ms, this ); + } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RunToLineAdapter.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RunToLineAdapter.java index 90f7e3a90b0..7ae3ce15cf5 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RunToLineAdapter.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RunToLineAdapter.java @@ -12,8 +12,10 @@ 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.CDebugUtils; import org.eclipse.cdt.debug.core.model.IRunToAddress; import org.eclipse.cdt.debug.core.model.IRunToLine; +import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants; 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; @@ -21,7 +23,10 @@ import org.eclipse.cdt.debug.ui.ICDebugUIConstants; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.ISuspendResume; import org.eclipse.debug.internal.ui.DebugUIPlugin; @@ -41,11 +46,8 @@ import org.eclipse.ui.texteditor.ITextEditor; */ public class RunToLineAdapter implements IRunToLineTarget { - /* - * (non-Javadoc) - * - * @see org.eclipse.debug.ui.actions.IRunToLineTarget#runToLine(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection, - * org.eclipse.debug.core.model.ISuspendResume) + /* (non-Javadoc) + * @see org.eclipse.debug.ui.actions.IRunToLineTarget#runToLine(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection, org.eclipse.debug.core.model.ISuspendResume) */ public void runToLine( IWorkbenchPart part, ISelection selection, ISuspendResume target ) throws CoreException { String errorMessage = null; @@ -61,13 +63,24 @@ public class RunToLineAdapter implements IRunToLineTarget { errorMessage = ActionMessages.getString( "RunToLineAdapter.Missing_document_1" ); //$NON-NLS-1$ } else { - String fileName = getFileName( input ); + final String fileName = getFileName( input ); ITextSelection textSelection = (ITextSelection)selection; - int lineNumber = textSelection.getStartLine() + 1; + final int lineNumber = textSelection.getStartLine() + 1; if ( target instanceof IAdaptable ) { - IRunToLine runToLine = (IRunToLine)((IAdaptable)target).getAdapter( IRunToLine.class ); + final IRunToLine runToLine = (IRunToLine)((IAdaptable)target).getAdapter( IRunToLine.class ); if ( runToLine != null && runToLine.canRunToLine( fileName, lineNumber ) ) { - runToLine.runToLine( fileName, lineNumber, DebugUIPlugin.getDefault().getPluginPreferences().getBoolean( IDebugUIConstants.PREF_SKIP_BREAKPOINTS_DURING_RUN_TO_LINE ) ); + Runnable r = new Runnable() { + + public void run() { + try { + runToLine.runToLine( fileName, lineNumber, DebugUIPlugin.getDefault().getPluginPreferences().getBoolean( IDebugUIConstants.PREF_SKIP_BREAKPOINTS_DURING_RUN_TO_LINE ) ); + } + catch( DebugException e ) { + failed( e ); + } + } + }; + runInBackground( r ); } } return; @@ -82,11 +95,22 @@ public class RunToLineAdapter implements IRunToLineTarget { else { ITextSelection textSelection = (ITextSelection)selection; int lineNumber = textSelection.getStartLine() + 1; - IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber ); + final IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber ); if ( target instanceof IAdaptable ) { - IRunToAddress runToAddress = (IRunToAddress)((IAdaptable)target).getAdapter( IRunToAddress.class ); + final IRunToAddress runToAddress = (IRunToAddress)((IAdaptable)target).getAdapter( IRunToAddress.class ); if ( runToAddress != null && runToAddress.canRunToAddress( address ) ) { - runToAddress.runToAddress( address, DebugUIPlugin.getDefault().getPluginPreferences().getBoolean( IDebugUIConstants.PREF_SKIP_BREAKPOINTS_DURING_RUN_TO_LINE ) ); + Runnable r = new Runnable() { + + public void run() { + try { + runToAddress.runToAddress( address, DebugUIPlugin.getDefault().getPluginPreferences().getBoolean( IDebugUIConstants.PREF_SKIP_BREAKPOINTS_DURING_RUN_TO_LINE ) ); + } + catch( DebugException e ) { + failed( e ); + } + } + }; + runInBackground( r ); } } return; @@ -98,11 +122,8 @@ public class RunToLineAdapter implements IRunToLineTarget { throw new CoreException( new Status( IStatus.ERROR, CDebugUIPlugin.getUniqueIdentifier(), ICDebugUIConstants.INTERNAL_ERROR, errorMessage, null ) ); } - /* - * (non-Javadoc) - * - * @see org.eclipse.debug.ui.actions.IRunToLineTarget#canRunToLine(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection, - * org.eclipse.debug.core.model.ISuspendResume) + /* (non-Javadoc) + * @see org.eclipse.debug.ui.actions.IRunToLineTarget#canRunToLine(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection, org.eclipse.debug.core.model.ISuspendResume) */ public boolean canRunToLine( IWorkbenchPart part, ISelection selection, ISuspendResume target ) { if ( part instanceof DisassemblyView || part instanceof ITextEditor ) @@ -119,4 +140,14 @@ public class RunToLineAdapter implements IRunToLineTarget { } return null; } + + private void runInBackground( Runnable r ) { + DebugPlugin.getDefault().asyncExec( r ); + } + + protected void failed( Throwable e ) { + MultiStatus ms = new MultiStatus( CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, ActionMessages.getString( "RunToLineAdapter.0" ), null ); //$NON-NLS-1$ + ms.add( new Status( IStatus.ERROR, CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, e.getMessage(), e ) ); + CDebugUtils.error( ms, this ); + } }
\ No newline at end of file |