mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-18 06:25:23 +02:00
Fixed 186929. Run to Line should pass CDI client the absolute path of the file.
This commit is contained in:
parent
50eb4ffbed
commit
3a0c623f52
1 changed files with 40 additions and 7 deletions
|
@ -16,17 +16,23 @@ 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.core.ICDebugInternalConstants;
|
||||||
|
import org.eclipse.cdt.debug.internal.core.model.CDebugElement;
|
||||||
|
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
||||||
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.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;
|
||||||
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.IPath;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.MultiStatus;
|
import org.eclipse.core.runtime.MultiStatus;
|
||||||
|
import org.eclipse.core.runtime.Path;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.debug.core.DebugException;
|
import org.eclipse.debug.core.DebugException;
|
||||||
import org.eclipse.debug.core.DebugPlugin;
|
import org.eclipse.debug.core.DebugPlugin;
|
||||||
|
import org.eclipse.debug.core.model.IDebugTarget;
|
||||||
|
import org.eclipse.debug.core.model.ISourceLocator;
|
||||||
import org.eclipse.debug.core.model.ISuspendResume;
|
import org.eclipse.debug.core.model.ISuspendResume;
|
||||||
import org.eclipse.debug.ui.DebugUITools;
|
import org.eclipse.debug.ui.DebugUITools;
|
||||||
import org.eclipse.debug.ui.IDebugUIConstants;
|
import org.eclipse.debug.ui.IDebugUIConstants;
|
||||||
|
@ -63,17 +69,22 @@ 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 {
|
||||||
final String fileName = getFileName( input );
|
final String fileName = getFileName( input ); // actually, absolute path, not just file name
|
||||||
|
IDebugTarget debugTarget = null;
|
||||||
|
if (target instanceof CDebugElement) { // should always be, but just in case
|
||||||
|
debugTarget = ((CDebugElement)target).getDebugTarget();
|
||||||
|
}
|
||||||
|
final IPath path = convertPath( fileName, debugTarget );
|
||||||
ITextSelection textSelection = (ITextSelection)selection;
|
ITextSelection textSelection = (ITextSelection)selection;
|
||||||
final int lineNumber = textSelection.getStartLine() + 1;
|
final int lineNumber = textSelection.getStartLine() + 1;
|
||||||
if ( target instanceof IAdaptable ) {
|
if ( target instanceof IAdaptable ) {
|
||||||
final 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( path.toPortableString(), lineNumber ) ) {
|
||||||
Runnable r = new Runnable() {
|
Runnable r = new Runnable() {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
runToLine.runToLine( fileName, lineNumber, DebugUITools.getPreferenceStore().getBoolean( IDebugUIConstants.PREF_SKIP_BREAKPOINTS_DURING_RUN_TO_LINE ) );
|
runToLine.runToLine( path.toPortableString(), lineNumber, DebugUITools.getPreferenceStore().getBoolean( IDebugUIConstants.PREF_SKIP_BREAKPOINTS_DURING_RUN_TO_LINE ) );
|
||||||
}
|
}
|
||||||
catch( DebugException e ) {
|
catch( DebugException e ) {
|
||||||
failed( e );
|
failed( e );
|
||||||
|
@ -144,16 +155,22 @@ public class RunToLineAdapter implements IRunToLineTarget {
|
||||||
if ( document == null ) {
|
if ( document == null ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
String fileName;
|
String fileName; // actually, absolute path, not just file name
|
||||||
try {
|
try {
|
||||||
fileName = getFileName( input );
|
fileName = getFileName( input );
|
||||||
}
|
}
|
||||||
catch( CoreException e ) {
|
catch( CoreException e ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
IDebugTarget debugTarget = null;
|
||||||
|
if (target instanceof CDebugElement) { // should always be, but just in case
|
||||||
|
debugTarget = ((CDebugElement)target).getDebugTarget();
|
||||||
|
}
|
||||||
|
final IPath path = convertPath( fileName, debugTarget );
|
||||||
|
|
||||||
ITextSelection textSelection = (ITextSelection)selection;
|
ITextSelection textSelection = (ITextSelection)selection;
|
||||||
int lineNumber = textSelection.getStartLine() + 1;
|
int lineNumber = textSelection.getStartLine() + 1;
|
||||||
return runToLine.canRunToLine( fileName, lineNumber );
|
return runToLine.canRunToLine( path.toPortableString(), lineNumber );
|
||||||
}
|
}
|
||||||
if ( part instanceof DisassemblyView ) {
|
if ( part instanceof DisassemblyView ) {
|
||||||
IRunToAddress runToAddress = (IRunToAddress)((IAdaptable)target).getAdapter( IRunToAddress.class );
|
IRunToAddress runToAddress = (IRunToAddress)((IAdaptable)target).getAdapter( IRunToAddress.class );
|
||||||
|
@ -174,10 +191,10 @@ public class RunToLineAdapter implements IRunToLineTarget {
|
||||||
|
|
||||||
private String getFileName( IEditorInput input ) throws CoreException {
|
private String getFileName( IEditorInput input ) throws CoreException {
|
||||||
if ( input instanceof IFileEditorInput ) {
|
if ( input instanceof IFileEditorInput ) {
|
||||||
return ((IFileEditorInput)input).getFile().getName();
|
return ((IFileEditorInput)input).getFile().getLocation().toOSString();
|
||||||
}
|
}
|
||||||
if ( input instanceof IStorageEditorInput ) {
|
if ( input instanceof IStorageEditorInput ) {
|
||||||
return ((IStorageEditorInput)input).getStorage().getName();
|
return ((IStorageEditorInput)input).getStorage().getFullPath().toOSString();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -191,4 +208,20 @@ public class RunToLineAdapter implements IRunToLineTarget {
|
||||||
ms.add( new Status( IStatus.ERROR, CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, e.getMessage(), e ) );
|
ms.add( new Status( IStatus.ERROR, CDIDebugModel.getPluginIdentifier(), ICDebugInternalConstants.STATUS_CODE_ERROR, e.getMessage(), e ) );
|
||||||
CDebugUtils.error( ms, this );
|
CDebugUtils.error( ms, this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IPath convertPath( String sourceHandle, IDebugTarget debugTarget ) {
|
||||||
|
IPath path = null;
|
||||||
|
if ( Path.EMPTY.isValidPath( sourceHandle ) ) {
|
||||||
|
if ( debugTarget != null ) {
|
||||||
|
ISourceLocator sl = debugTarget.getLaunch().getSourceLocator();
|
||||||
|
if ( sl instanceof CSourceLookupDirector ) {
|
||||||
|
path = ((CSourceLookupDirector)sl).getCompilationPath( sourceHandle );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( path == null ) {
|
||||||
|
path = new Path( sourceHandle );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue