X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.debug.ui/src/net/sourceforge/phpdt/internal/debug/ui/PHPSourceLocator.java b/net.sourceforge.phpeclipse.debug.ui/src/net/sourceforge/phpdt/internal/debug/ui/PHPSourceLocator.java index 07d0841..aaba834 100644 --- a/net.sourceforge.phpeclipse.debug.ui/src/net/sourceforge/phpdt/internal/debug/ui/PHPSourceLocator.java +++ b/net.sourceforge.phpeclipse.debug.ui/src/net/sourceforge/phpdt/internal/debug/ui/PHPSourceLocator.java @@ -1,5 +1,8 @@ package net.sourceforge.phpdt.internal.debug.ui; +import java.util.Map; +import java.util.Iterator; + import net.sourceforge.phpdt.internal.debug.core.model.PHPStackFrame; import net.sourceforge.phpdt.internal.launching.PHPLaunchConfigurationAttribute; import net.sourceforge.phpeclipse.PHPeclipsePlugin; @@ -11,13 +14,14 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.model.IPersistableSourceLocator; import org.eclipse.debug.core.model.IStackFrame; import org.eclipse.debug.ui.ISourcePresentation; -import org.eclipse.ui.IEditorDescriptor; +//import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorRegistry; +//import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; @@ -26,6 +30,10 @@ import org.eclipse.ui.part.FileEditorInput; public class PHPSourceLocator implements IPersistableSourceLocator, ISourcePresentation { private String absoluteWorkingDirectory; + private Map pathMap = null; + private boolean remoteDebug; + private IPath remoteSourcePath; + private String projectName; public PHPSourceLocator() { @@ -52,13 +60,56 @@ public class PHPSourceLocator implements IPersistableSourceLocator, ISourcePrese */ public void initializeDefaults(ILaunchConfiguration configuration) throws CoreException { this.absoluteWorkingDirectory = configuration.getAttribute(PHPLaunchConfigurationAttribute.WORKING_DIRECTORY, ""); + this.remoteDebug=configuration.getAttribute(PHPLaunchConfigurationAttribute.REMOTE_DEBUG,false); + this.pathMap = configuration.getAttribute(PHPLaunchConfigurationAttribute.FILE_MAP, (Map)null); + this.projectName =configuration.getAttribute(PHPLaunchConfigurationAttribute.PROJECT_NAME, ""); + + if (Platform.getOS().equals(Platform.OS_WIN32)) + this.remoteSourcePath= new Path((configuration.getAttribute(PHPLaunchConfigurationAttribute.REMOTE_PATH, "")).toLowerCase()); + else + this.remoteSourcePath= new Path(configuration.getAttribute(PHPLaunchConfigurationAttribute.REMOTE_PATH, "")); + +// system.os.name + } /** * @see org.eclipse.debug.core.model.ISourceLocator#getSourceElement(IStackFrame) */ public Object getSourceElement(IStackFrame stackFrame) { - return ((PHPStackFrame) stackFrame).getFileName(); + + String fileName=((PHPStackFrame) stackFrame).getFileName(); + String file=""; + + if (remoteDebug) + { + IPath path = new Path(fileName); + if (remoteSourcePath.isPrefixOf(path)) + { + IPath projectPath; + path=path.removeFirstSegments(remoteSourcePath.matchingFirstSegments(path)); + file=path.toString(); + projectPath=(PHPeclipsePlugin.getWorkspace().getRoot().getProject(projectName).getLocation()); + return (projectPath.append(path)).toOSString(); + } + + if (pathMap == null) { + return fileName; + } + Iterator iterator = pathMap.keySet().iterator(); + while (iterator.hasNext()) { + String local = (String) iterator.next(); + IPath remotePath = new Path((String) pathMap.get(local)); + if (remotePath.isPrefixOf(path)) { + path=path.removeFirstSegments(remotePath.matchingFirstSegments(path)); + IPath localPath= new Path(local); + return localPath.append(path).toOSString(); + } + } + return fileName; + } else { + return fileName; + } } /** @@ -78,6 +129,8 @@ public class PHPSourceLocator implements IPersistableSourceLocator, ISourcePrese IWorkbenchWindow window = workbench.getWorkbenchWindows()[0]; IWorkbenchPage page = window.getActivePage(); IPath path = new Path(filename); + + // If the file exists in the workspace, open it IFile eclipseFile = PHPeclipsePlugin.getWorkspace().getRoot().getFileForLocation(path);