mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 17:56:01 +02:00
New methods verifyWorkingDirectory().
This commit is contained in:
parent
2526120966
commit
92ad7a5001
1 changed files with 91 additions and 16 deletions
|
@ -19,13 +19,16 @@ import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
|
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
|
||||||
import org.eclipse.cdt.debug.core.ICDebugConfiguration;
|
import org.eclipse.cdt.debug.core.ICDebugConfiguration;
|
||||||
import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin;
|
import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin;
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.Path;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.debug.core.DebugPlugin;
|
import org.eclipse.debug.core.DebugPlugin;
|
||||||
import org.eclipse.debug.core.ILaunch;
|
import org.eclipse.debug.core.ILaunch;
|
||||||
|
@ -39,9 +42,22 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel
|
||||||
throws CoreException;
|
throws CoreException;
|
||||||
|
|
||||||
protected String[] getEnvironmentArray(ILaunchConfiguration config) {
|
protected String[] getEnvironmentArray(ILaunchConfiguration config) {
|
||||||
// Map env = configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_ENVIROMENT_MAP, (Map) null);
|
Map env = null;
|
||||||
// TODO create env array;
|
try {
|
||||||
return null;
|
env = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_ENVIROMENT_MAP, (Map) null);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
if (env == null) {
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
String[] array = new String[env.size()];
|
||||||
|
Iterator entries = env.entrySet().iterator();
|
||||||
|
Entry entry;
|
||||||
|
for (int i = 0; entries.hasNext() && i < array.length; i++) {
|
||||||
|
entry = (Entry) entries.next();
|
||||||
|
array[i] = ((String) entry.getKey()) + ((String) entry.getValue());
|
||||||
|
}
|
||||||
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Properties getEnvironmentProperty(ILaunchConfiguration config) {
|
protected Properties getEnvironmentProperty(ILaunchConfiguration config) {
|
||||||
|
@ -63,20 +79,40 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel
|
||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected File getWorkingDir(ILaunchConfiguration config) throws CoreException {
|
/**
|
||||||
|
* Returns the working directory specified by
|
||||||
|
* the given launch configuration, or <code>null</code> if none.
|
||||||
|
*
|
||||||
|
* @deprecated Should use getWorkingDirectory()
|
||||||
|
* @param configuration launch configuration
|
||||||
|
* @return the working directory specified by the given
|
||||||
|
* launch configuration, or <code>null</code> if none
|
||||||
|
* @exception CoreException if unable to retrieve the attribute
|
||||||
|
*/
|
||||||
|
public File getWorkingDir(ILaunchConfiguration configuration) throws CoreException {
|
||||||
|
return getWorkingDirectory(configuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the working directory specified by
|
||||||
|
* the given launch configuration, or <code>null</code> if none.
|
||||||
|
*
|
||||||
|
* @param configuration launch configuration
|
||||||
|
* @return the working directory specified by the given
|
||||||
|
* launch configuration, or <code>null</code> if none
|
||||||
|
* @exception CoreException if unable to retrieve the attribute
|
||||||
|
*/
|
||||||
|
public File getWorkingDirectory(ILaunchConfiguration configuration) throws CoreException {
|
||||||
|
return verifyWorkingDirectory(configuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IPath getWorkingDirectoryPath(ILaunchConfiguration config) throws CoreException {
|
||||||
String path = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, (String) null);
|
String path = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, (String) null);
|
||||||
if (path == null) {
|
if (path != null) {
|
||||||
|
return new Path(path);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
File dir = new File(path);
|
|
||||||
if (!dir.isDirectory()) {
|
|
||||||
abort(
|
|
||||||
"Specified working directory does not exist or is not a directory",
|
|
||||||
null,
|
|
||||||
ICDTLaunchConfigurationConstants.ERR_WORKING_DIRECTORY_DOES_NOT_EXIST);
|
|
||||||
}
|
|
||||||
return dir;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Throws a core exception with an error status object built from
|
* Throws a core exception with an error status object built from
|
||||||
|
@ -102,7 +138,7 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel
|
||||||
abstract protected String getPluginID();
|
abstract protected String getPluginID();
|
||||||
|
|
||||||
|
|
||||||
public ICProject getCProject(ILaunchConfiguration configuration) throws CoreException {
|
public static ICProject getCProject(ILaunchConfiguration configuration) throws CoreException {
|
||||||
String projectName = getProjectName(configuration);
|
String projectName = getProjectName(configuration);
|
||||||
if (projectName != null) {
|
if (projectName != null) {
|
||||||
projectName = projectName.trim();
|
projectName = projectName.trim();
|
||||||
|
@ -117,7 +153,7 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getProjectName(ILaunchConfiguration configuration) throws CoreException {
|
public static String getProjectName(ILaunchConfiguration configuration) throws CoreException {
|
||||||
return configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String) null);
|
return configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,6 +260,45 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel
|
||||||
return projectPath.getLocation();
|
return projectPath.getLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies the working directory specified by the given
|
||||||
|
* launch configuration exists, and returns the working
|
||||||
|
* directory, or <code>null</code> if none is specified.
|
||||||
|
*
|
||||||
|
* @param configuration launch configuration
|
||||||
|
* @return the working directory specified by the given
|
||||||
|
* launch configuration, or <code>null</code> if none
|
||||||
|
* @exception CoreException if unable to retrieve the attribute
|
||||||
|
*/
|
||||||
|
public File verifyWorkingDirectory(ILaunchConfiguration configuration) throws CoreException {
|
||||||
|
IPath path = getWorkingDirectoryPath(configuration);
|
||||||
|
if (path == null) {
|
||||||
|
// default working dir is the project if this config has a project
|
||||||
|
ICProject cp = getCProject(configuration);
|
||||||
|
if (cp != null) {
|
||||||
|
IProject p = cp.getProject();
|
||||||
|
return p.getLocation().toFile();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (path.isAbsolute()) {
|
||||||
|
File dir = new File(path.toOSString());
|
||||||
|
if (dir.isDirectory()) {
|
||||||
|
return dir;
|
||||||
|
} else {
|
||||||
|
abort("Working directory does not exist", null, ICDTLaunchConfigurationConstants.ERR_WORKING_DIRECTORY_DOES_NOT_EXIST);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
IResource res = ResourcesPlugin.getWorkspace().getRoot().findMember(path);
|
||||||
|
if (res instanceof IContainer && res.exists()) {
|
||||||
|
return res.getLocation().toFile();
|
||||||
|
} else {
|
||||||
|
abort("Working directory does not exist", null, ICDTLaunchConfigurationConstants.ERR_WORKING_DIRECTORY_DOES_NOT_EXIST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private static class ArgumentParser {
|
private static class ArgumentParser {
|
||||||
private String fArgs;
|
private String fArgs;
|
||||||
private int fIndex = 0;
|
private int fIndex = 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue