Source:
<code>public void launch(ILaunchConfiguration config, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException { this.config = config; Oprofile.OprofileProject.setProject(getProject()); LaunchOptions options = new LaunchOptions(); options.loadConfiguration(config); IPath exePath = getExePath(config); options.setBinaryImage(exePath.toOSString()); OprofileDaemonEvent[] daemonEvents = null; if (!config.getAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, false)) { OprofileCounter[] counters = OprofileCounter.getCounters(config); ArrayList<OprofileDaemonEvent> events = new ArrayList<OprofileDaemonEvent>(); for (int i = 0; i < counters.length; ++i) { if (counters[i].getEnabled()) events.add(counters[i].getDaemonEvent()); } daemonEvents = new OprofileDaemonEvent[events.size()]; events.toArray(daemonEvents); } if (!preExec(options, daemonEvents, launch)) return; IRemoteCommandLauncher launcher = RemoteProxyManager.getInstance().getLauncher(Oprofile.OprofileProject.getProject()); IRemoteFileProxy proxy = RemoteProxyManager.getInstance().getFileProxy(Oprofile.OprofileProject.getProject()); <START> URI workingDirURI = proxy.getRemoteDir(); <END> IPath workingDirPath = new Path(workingDirURI.getPath()); String arguments[] = getProgramArgumentsArray( config ); Process process = launcher.execute(exePath, arguments, getEnvironment(config), workingDirPath, monitor); DebugPlugin.newProcess( launch, process, renderProcessLabel( exePath.toOSString() ) ); postExec(options, daemonEvents, process); }</code><technical_language>This sense considering local ssh proxies return null for getRemoteDir(). clearer add URI API name e.g. getRemoteBaseURI getWorkingDirURI (since is for) getBaseURI etc..</technical_language>

Target:
public void launch(ILaunchConfiguration config, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException { this.config = config; Oprofile.OprofileProject.setProject(getProject()); LaunchOptions options = new LaunchOptions(); options.loadConfiguration(config); IPath exePath = getExePath(config); options.setBinaryImage(exePath.toOSString()); OprofileDaemonEvent[] daemonEvents = null; if (!config.getAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, false)) { OprofileCounter[] counters = OprofileCounter.getCounters(config); ArrayList<OprofileDaemonEvent> events = new ArrayList<OprofileDaemonEvent>(); for (int i = 0; i < counters.length; ++i) { if (counters[i].getEnabled()) events.add(counters[i].getDaemonEvent()); } daemonEvents = new OprofileDaemonEvent[events.size()]; events.toArray(daemonEvents); } if (!preExec(options, daemonEvents, launch)) return; IRemoteCommandLauncher launcher = RemoteProxyManager.getInstance().getLauncher(Oprofile.OprofileProject.getProject()); IRemoteFileProxy proxy = RemoteProxyManager.getInstance().getFileProxy(Oprofile.OprofileProject.getProject()); URI workingDirURI = proxy.getWorkingDir(); IPath workingDirPath = new Path(workingDirURI.getPath()); String arguments[] = getProgramArgumentsArray( config ); Process process = launcher.execute(exePath, arguments, getEnvironment(config), workingDirPath, monitor); DebugPlugin.newProcess( launch, process, renderProcessLabel( exePath.toOSString() ) ); postExec(options, daemonEvents, process); }