1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-23 17:05:26 +02:00

Fix for bug 83412: Run to line and resume at line should run in the background.

This commit is contained in:
Mikhail Khodjaiants 2005-01-21 18:37:58 +00:00
parent f8c0954d72
commit 57e12dda16
4 changed files with 101 additions and 24 deletions

View file

@ -1,3 +1,9 @@
2005-01-20 Mikhail Khodjaiants
Fix for bug 83412: Run to line and resume at line should run in the background.
* ResumeAtLineAdapter.java
* RunToLineAdapter.java
* ActionMessages.properties
2005-01-20 Mikhail Khodjaiants 2005-01-20 Mikhail Khodjaiants
Bug 83330: Inconsistent in the label for Add expression. Bug 83330: Inconsistent in the label for Add expression.
* plugin.properties * plugin.properties

View file

@ -25,6 +25,7 @@ SignalZeroObjectActionDelegate.1=Operation failed.
RunToLineActionDelegate.Error_1=Error RunToLineActionDelegate.Error_1=Error
RunToLineActionDelegate.Operation_failed_1=Operation failed. RunToLineActionDelegate.Operation_failed_1=Operation failed.
RunToLineAdapter.Empty_editor_1=Empty editor RunToLineAdapter.Empty_editor_1=Empty editor
RunToLineAdapter.0=Run To Line failed.
RunToLineAdapter.Missing_document_1=Missing document RunToLineAdapter.Missing_document_1=Missing document
ToggleBreakpointAdapter.Empty_editor_1=Empty editor ToggleBreakpointAdapter.Empty_editor_1=Empty editor
ToggleBreakpointAdapter.Missing_document_1=Missing document ToggleBreakpointAdapter.Missing_document_1=Missing document
@ -92,3 +93,4 @@ ResumeAtLineAdapter.0=Empty editor
ResumeAtLineAdapter.1=Missing document ResumeAtLineAdapter.1=Missing document
ResumeAtLineAdapter.2=Empty editor ResumeAtLineAdapter.2=Empty editor
ResumeAtLineAdapter.3=Operation is not supported. ResumeAtLineAdapter.3=Operation is not supported.
ResumeAtLineAdapter.4=Resume At Line failed.

View file

@ -11,8 +11,11 @@
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.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.IJumpToAddress;
import org.eclipse.cdt.debug.core.model.IJumpToLine; 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.DisassemblyEditorInput;
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyView; import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyView;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
@ -20,7 +23,10 @@ import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.model.ISuspendResume; import org.eclipse.debug.core.model.ISuspendResume;
import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.ITextSelection;
@ -54,13 +60,24 @@ public class ResumeAtLineAdapter implements IResumeAtLineTarget {
errorMessage = ActionMessages.getString( "ResumeAtLineAdapter.1" ); //$NON-NLS-1$ errorMessage = ActionMessages.getString( "ResumeAtLineAdapter.1" ); //$NON-NLS-1$
} }
else { else {
String fileName = getFileName( input ); final String fileName = getFileName( input );
ITextSelection textSelection = (ITextSelection)selection; ITextSelection textSelection = (ITextSelection)selection;
int lineNumber = textSelection.getStartLine() + 1; final int lineNumber = textSelection.getStartLine() + 1;
if ( target instanceof IAdaptable ) { if ( target instanceof IAdaptable ) {
IJumpToLine jumpToLine = (IJumpToLine)((IAdaptable)target).getAdapter( IJumpToLine.class ); final IJumpToLine jumpToLine = (IJumpToLine)((IAdaptable)target).getAdapter( IJumpToLine.class );
if ( jumpToLine != null && jumpToLine.canJumpToLine( fileName, lineNumber ) ) { if ( jumpToLine != null && jumpToLine.canJumpToLine( fileName, lineNumber ) ) {
jumpToLine.jumpToLine( fileName, lineNumber ); Runnable r = new Runnable() {
public void run() {
try {
jumpToLine.jumpToLine( fileName, lineNumber );
}
catch( DebugException e ) {
failed( e );
}
}
};
runInBackground( r );
} }
} }
return; return;
@ -75,11 +92,22 @@ public class ResumeAtLineAdapter implements IResumeAtLineTarget {
else { else {
ITextSelection textSelection = (ITextSelection)selection; ITextSelection textSelection = (ITextSelection)selection;
int lineNumber = textSelection.getStartLine() + 1; int lineNumber = textSelection.getStartLine() + 1;
IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber ); final IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber );
if ( target instanceof IAdaptable ) { if ( target instanceof IAdaptable ) {
IJumpToAddress jumpToAddress = (IJumpToAddress)((IAdaptable)target).getAdapter( IJumpToAddress.class ); final IJumpToAddress jumpToAddress = (IJumpToAddress)((IAdaptable)target).getAdapter( IJumpToAddress.class );
if ( jumpToAddress != null && jumpToAddress.canJumpToAddress( address ) ) { if ( jumpToAddress != null && jumpToAddress.canJumpToAddress( address ) ) {
jumpToAddress.jumpToAddress( address ); Runnable r = new Runnable() {
public void run() {
try {
jumpToAddress.jumpToAddress( address );
}
catch( DebugException e ) {
failed( e );
}
}
};
runInBackground( r );
} }
} }
return; return;
@ -150,4 +178,14 @@ public class ResumeAtLineAdapter implements IResumeAtLineTarget {
} }
return null; 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( "ResumeAtLineAdapter.4" ), null ); //$NON-NLS-1$
ms.add( new Status( IStatus.ERROR, CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, e.getMessage(), e ) );
CDebugUtils.error( ms, this );
}
} }

View file

@ -12,8 +12,10 @@ package org.eclipse.cdt.debug.internal.ui.actions;
import org.eclipse.cdt.core.IAddress; 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.model.IRunToAddress; 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.ui.views.disassembly.DisassemblyEditorInput; 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.internal.ui.views.disassembly.DisassemblyView;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin; 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.CoreException;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status; 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.IDebugElement;
import org.eclipse.debug.core.model.ISuspendResume; import org.eclipse.debug.core.model.ISuspendResume;
import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.DebugUIPlugin;
@ -41,11 +46,8 @@ import org.eclipse.ui.texteditor.ITextEditor;
*/ */
public class RunToLineAdapter implements IRunToLineTarget { public class RunToLineAdapter implements IRunToLineTarget {
/* /* (non-Javadoc)
* (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)
*
* @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 { public void runToLine( IWorkbenchPart part, ISelection selection, ISuspendResume target ) throws CoreException {
String errorMessage = null; String errorMessage = null;
@ -61,13 +63,24 @@ public class RunToLineAdapter implements IRunToLineTarget {
errorMessage = ActionMessages.getString( "RunToLineAdapter.Missing_document_1" ); //$NON-NLS-1$ errorMessage = ActionMessages.getString( "RunToLineAdapter.Missing_document_1" ); //$NON-NLS-1$
} }
else { else {
String fileName = getFileName( input ); final String fileName = getFileName( input );
ITextSelection textSelection = (ITextSelection)selection; ITextSelection textSelection = (ITextSelection)selection;
int lineNumber = textSelection.getStartLine() + 1; final int lineNumber = textSelection.getStartLine() + 1;
if ( target instanceof IAdaptable ) { 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 ) ) { 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; return;
@ -82,11 +95,22 @@ public class RunToLineAdapter implements IRunToLineTarget {
else { else {
ITextSelection textSelection = (ITextSelection)selection; ITextSelection textSelection = (ITextSelection)selection;
int lineNumber = textSelection.getStartLine() + 1; int lineNumber = textSelection.getStartLine() + 1;
IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber ); final IAddress address = ((DisassemblyEditorInput)input).getAddress( lineNumber );
if ( target instanceof IAdaptable ) { 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 ) ) { 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; return;
@ -98,11 +122,8 @@ public class RunToLineAdapter implements IRunToLineTarget {
throw new CoreException( new Status( IStatus.ERROR, CDebugUIPlugin.getUniqueIdentifier(), ICDebugUIConstants.INTERNAL_ERROR, errorMessage, null ) ); throw new CoreException( new Status( IStatus.ERROR, CDebugUIPlugin.getUniqueIdentifier(), ICDebugUIConstants.INTERNAL_ERROR, errorMessage, null ) );
} }
/* /* (non-Javadoc)
* (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)
*
* @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 ) { public boolean canRunToLine( IWorkbenchPart part, ISelection selection, ISuspendResume target ) {
if ( part instanceof DisassemblyView || part instanceof ITextEditor ) if ( part instanceof DisassemblyView || part instanceof ITextEditor )
@ -119,4 +140,14 @@ public class RunToLineAdapter implements IRunToLineTarget {
} }
return null; 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 );
}
} }