diff options
author | David Inglis | 2004-05-18 16:43:58 +0000 |
---|---|---|
committer | David Inglis | 2004-05-18 16:43:58 +0000 |
commit | aa2dc61d0530e696743ef23a07eef36b20f404e5 (patch) | |
tree | 37f738495aa4c51f2c0dc54cc57864aa1fc4f901 | |
parent | b458ecd917139457c95d2c28b6ef07a504a21e5a (diff) | |
download | org.eclipse.cdt-aa2dc61d0530e696743ef23a07eef36b20f404e5.tar.gz org.eclipse.cdt-aa2dc61d0530e696743ef23a07eef36b20f404e5.tar.xz org.eclipse.cdt-aa2dc61d0530e696743ef23a07eef36b20f404e5.zip |
removed runtime.compatablity dependency
build on launch should now be scoped to referenced projects only.
update launch tab interaction to use new 3.0 methods
11 files changed, 482 insertions, 232 deletions
diff --git a/launch/org.eclipse.cdt.launch/plugin.xml b/launch/org.eclipse.cdt.launch/plugin.xml index 4949ee678f4..d6db22674f3 100644 --- a/launch/org.eclipse.cdt.launch/plugin.xml +++ b/launch/org.eclipse.cdt.launch/plugin.xml @@ -24,7 +24,7 @@ <import plugin="org.eclipse.cdt.debug.core"/> <import plugin="org.eclipse.cdt.debug.ui"/> <import plugin="org.eclipse.core.boot"/> - <import plugin="org.eclipse.core.runtime.compatibility"/> + <import plugin="org.eclipse.core.runtime"/> </requires> diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/AbstractCLaunchDelegate.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/AbstractCLaunchDelegate.java index 9dc3fb73d7e..031bb598075 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/AbstractCLaunchDelegate.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/AbstractCLaunchDelegate.java @@ -1,6 +1,5 @@ /* - * (c) Copyright QNX Software System Ltd. 2002. - * All Rights Reserved. + * (c) Copyright QNX Software System Ltd. 2002. All Rights Reserved. */ package org.eclipse.cdt.launch; @@ -9,14 +8,18 @@ import java.io.FileNotFoundException; import java.text.DateFormat; import java.text.MessageFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.Enumeration; +import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Map.Entry; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.model.ICModelMarker; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; @@ -26,8 +29,11 @@ import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin; import org.eclipse.cdt.utils.spawner.EnvironmentReader; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; @@ -40,25 +46,34 @@ import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.IStatusHandler; -import org.eclipse.debug.core.model.ILaunchConfigurationDelegate; import org.eclipse.debug.core.model.IPersistableSourceLocator; +import org.eclipse.debug.core.model.LaunchConfigurationDelegate; -abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDelegate { +abstract public class AbstractCLaunchDelegate extends LaunchConfigurationDelegate { + + protected static final IStatus complileErrorPromptStatus = new Status(IStatus.INFO, "org.eclipse.cdt.launch", 202, "", null); //$NON-NLS-1$ //$NON-NLS-2$ + + /** + * The project containing the programs file being launched + */ + private IProject project; + /** + * A list of prequisite projects ordered by their build order. + */ + private List orderedProjects; abstract public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) - throws CoreException; + throws CoreException; /** - * Return the save environment variables in the configuration. - * The array does not include the default environment of the target. - * array[n] : name=value + * Return the save environment variables in the configuration. The array does not include the default environment of the target. + * array[n] : name=value */ protected String[] getEnvironmentArray(ILaunchConfiguration config) { Map env = null; try { env = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_ENVIROMENT_MAP, (Map) null); - } - catch (CoreException e) { + } catch (CoreException e) { } if (env == null) { return new String[0]; @@ -74,8 +89,8 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel } /** - * Return the save environment variables of this configuration. - * The array does not include the default environment of the target. + * Return the save environment variables of this configuration. The array does not include the default environment of the + * target. */ protected Properties getEnvironmentProperty(ILaunchConfiguration config) { Properties prop = new Properties(); @@ -103,20 +118,16 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel } /** - * Expand the variable with the format ${key}. example: - * HOME=/foobar - * NEWHOME = ${HOME}/project - * The environement NEWHOME will be /foobar/project. + * Expand the variable with the format ${key}. example: HOME=/foobar NEWHOME = ${HOME}/project The environement NEWHOME will be + * /foobar/project. */ - protected Properties expandEnvironment(ILaunchConfiguration config ) { + protected Properties expandEnvironment(ILaunchConfiguration config) { return expandEnvironment(getEnvironmentProperty(config)); } /** - * Expand the variable with the format ${key}. example: - * HOME=/foobar - * NEWHOME = ${HOME}/project - * The environement NEWHOME will be /foobar/project. + * Expand the variable with the format ${key}. example: HOME=/foobar NEWHOME = ${HOME}/project The environement NEWHOME will be + * /foobar/project. */ protected Properties expandEnvironment(Properties props) { Enumeration names = props.propertyNames(); @@ -135,11 +146,11 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel for (int i = 0; i < value.length(); i++) { ch = value.charAt(i); switch (ch) { - case '\'': + case '\'' : if (prev != '\\') { inSingleQuote = !inSingleQuote; } - break; + break; case '$' : if (!inSingleQuote && prev != '\\') { @@ -153,15 +164,15 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel } } } - break; + break; case '}' : if (inMacro) { inMacro = false; String v = null; String p = param.toString(); - /* Search in the current property only - * if it is not the same name. + /* + * Search in the current property only if it is not the same name. */ if (!p.equals(key)) { v = props.getProperty(p); @@ -181,7 +192,7 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel prev = ch; continue; } - break; + break; } /* switch */ if (!inMacro) { @@ -202,27 +213,27 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel } /** - * Returns the working directory specified by - * the given launch configuration, or <code>null</code> if none. + * 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 + * @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. + * 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 + * @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); @@ -237,17 +248,19 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel } /** - * Throws a core exception with an error status object built from - * the given message, lower level exception, and error code. + * Throws a core exception with an error status object built from the given message, lower level exception, and error code. * - * @param message the status message - * @param exception lower level exception associated with the - * error, or <code>null</code> if none - * @param code error code + * @param message + * the status message + * @param exception + * lower level exception associated with the error, or <code>null</code> if none + * @param code + * error code */ protected void abort(String message, Throwable exception, int code) throws CoreException { - MultiStatus status = new MultiStatus(getPluginID(),code, message,exception); - status.add(new Status(IStatus.ERROR,getPluginID(),code, exception == null ? "" : exception.getLocalizedMessage(),exception)); //$NON-NLS-1$ + MultiStatus status = new MultiStatus(getPluginID(), code, message, exception); + status.add(new Status(IStatus.ERROR, getPluginID(), code, exception == null ? "" : exception.getLocalizedMessage(), //$NON-NLS-1$ + exception)); throw new CoreException(status); } @@ -283,10 +296,13 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel /** * Assigns a default source locator to the given launch if a source locator has not yet been assigned to it, and the associated * launch configuration does not specify a source locator. - * - * @param launch launch object - * @param configuration configuration being launched - * @exception CoreException if unable to set the source locator + * + * @param launch + * launch object + * @param configuration + * configuration being launched + * @exception CoreException + * if unable to set the source locator */ protected void setSourceLocator(ILaunch launch, ILaunchConfiguration configuration) throws CoreException { // set default source locator if none specified @@ -296,13 +312,14 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel if (id == null) { ICProject cProject = getCProject(configuration); if (cProject == null) { - abort(LaunchUIPlugin.getResourceString("Launch.common.Project_does_not_exist"), null, ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); //$NON-NLS-1$ + abort(LaunchUIPlugin.getResourceString("Launch.common.Project_does_not_exist"), null, //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); } sourceLocator = CDebugUIPlugin.createDefaultSourceLocator(); sourceLocator.initializeDefaults(configuration); } else { sourceLocator = DebugPlugin.getDefault().getLaunchManager().newSourceLocator(id); - String memento = configuration.getAttribute(ILaunchConfiguration.ATTR_SOURCE_LOCATOR_MEMENTO, (String)null); + String memento = configuration.getAttribute(ILaunchConfiguration.ATTR_SOURCE_LOCATOR_MEMENTO, (String) null); if (memento == null) { sourceLocator.initializeDefaults(configuration); } else { @@ -315,7 +332,7 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel /** * Returns the program arguments as a String. - * + * * @return the program arguments as a String */ public String getProgramArguments(ILaunchConfiguration config) throws CoreException { @@ -324,7 +341,7 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel } /** * Returns the program arguments as an array of individual arguments. - * + * * @return the program arguments as an array of individual arguments */ public String[] getProgramArgumentsArray(ILaunchConfiguration config) throws CoreException { @@ -343,15 +360,10 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel protected ICDebugConfiguration getDebugConfig(ILaunchConfiguration config) throws CoreException { ICDebugConfiguration dbgCfg = null; try { - dbgCfg = - CDebugCorePlugin.getDefault().getDebugConfiguration( + dbgCfg = CDebugCorePlugin.getDefault().getDebugConfiguration( config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, "")); //$NON-NLS-1$ - } - catch (CoreException e) { - IStatus status = - new Status( - IStatus.ERROR, - LaunchUIPlugin.getUniqueIdentifier(), + } catch (CoreException e) { + IStatus status = new Status(IStatus.ERROR, LaunchUIPlugin.getUniqueIdentifier(), ICDTLaunchConfigurationConstants.ERR_DEBUGGER_NOT_INSTALLED, LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.Debugger_not_installed"), //$NON-NLS-1$ e); @@ -371,30 +383,33 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel protected String renderTargetLabel(ICDebugConfiguration debugConfig) { String format = "{0} ({1})"; //$NON-NLS-1$ String timestamp = DateFormat.getInstance().format(new Date(System.currentTimeMillis())); - return MessageFormat.format(format, new String[] { debugConfig.getName(), timestamp }); + return MessageFormat.format(format, new String[]{debugConfig.getName(), timestamp}); } protected String renderProcessLabel(String commandLine) { String format = "{0} ({1})"; //$NON-NLS-1$ String timestamp = DateFormat.getInstance().format(new Date(System.currentTimeMillis())); - return MessageFormat.format(format, new String[] { commandLine, timestamp }); + return MessageFormat.format(format, new String[]{commandLine, timestamp}); } protected ICProject verifyCProject(ILaunchConfiguration config) throws CoreException { String name = getProjectName(config); if (name == null) { - abort(LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.C_Project_not_specified"), null, ICDTLaunchConfigurationConstants.ERR_UNSPECIFIED_PROJECT); //$NON-NLS-1$ + abort(LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.C_Project_not_specified"), null, //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_UNSPECIFIED_PROJECT); } ICProject cproject = getCProject(config); if (cproject == null) { IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name); if (!project.exists()) { - abort( LaunchUIPlugin.getFormattedResourceString("AbstractCLaunchDelegate.Project_NAME_does_not_exist", name), null, ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); //$NON-NLS-1$ - } - else if (!project.isOpen()) { - abort( LaunchUIPlugin.getFormattedResourceString("AbstractCLaunchDelegate.Project_NAME_is_closed", name), null, ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); //$NON-NLS-1$ + abort(LaunchUIPlugin.getFormattedResourceString("AbstractCLaunchDelegate.Project_NAME_does_not_exist", name), null, //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); + } else if (!project.isOpen()) { + abort(LaunchUIPlugin.getFormattedResourceString("AbstractCLaunchDelegate.Project_NAME_is_closed", name), null, //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); } - abort(LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.Not_a_C_CPP_project"), null, ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); //$NON-NLS-1$ + abort(LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.Not_a_C_CPP_project"), null, //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); } return cproject; } @@ -403,12 +418,16 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel ICProject cproject = verifyCProject(config); String fileName = getProgramName(config); if (fileName == null) { - abort(LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.Program_file_not_specified"), null, ICDTLaunchConfigurationConstants.ERR_UNSPECIFIED_PROGRAM); //$NON-NLS-1$ + abort(LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.Program_file_not_specified"), null, //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_UNSPECIFIED_PROGRAM); } IFile programPath = ((IProject) cproject.getResource()).getFile(fileName); if (programPath == null || !programPath.exists() || !programPath.getLocation().toFile().exists()) { - abort(LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.Program_file_does_not_exist"), new FileNotFoundException(LaunchUIPlugin.getFormattedResourceString("AbstractCLaunchDelegate.PROGRAM_PATH_not_found", programPath.getLocation().toOSString())), ICDTLaunchConfigurationConstants.ERR_PROGRAM_NOT_EXIST); //$NON-NLS-1$ //$NON-NLS-2$ + abort(LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.Program_file_does_not_exist"), //$NON-NLS-1$ + new FileNotFoundException(LaunchUIPlugin.getFormattedResourceString( + "AbstractCLaunchDelegate.PROGRAM_PATH_not_found", programPath.getLocation().toOSString())), //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_PROGRAM_NOT_EXIST); } return programPath; } @@ -416,16 +435,16 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel protected IPath verifyProgramFile(ILaunchConfiguration config) throws CoreException { return getProgramFile(config).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. + * 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 + * @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); @@ -436,30 +455,26 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel IProject p = cp.getProject(); return p.getLocation().toFile(); } - } - else { + } else { if (path.isAbsolute()) { File dir = new File(path.toOSString()); if (dir.isDirectory()) { return dir; + } else { + abort(LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.Working_directory_does_not_exist"), //$NON-NLS-1$ + new FileNotFoundException(LaunchUIPlugin.getFormattedResourceString( + "AbstractCLaunchDelegate.PROGRAM_PATH_not_found", path.toOSString())), //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_WORKING_DIRECTORY_DOES_NOT_EXIST); } - else { - abort( - LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.Working_directory_does_not_exist"), //$NON-NLS-1$ - new FileNotFoundException( LaunchUIPlugin.getFormattedResourceString("AbstractCLaunchDelegate.PROGRAM_PATH_not_found", path.toOSString())), //$NON-NLS-1$ - ICDTLaunchConfigurationConstants.ERR_WORKING_DIRECTORY_DOES_NOT_EXIST); - } - } - else { + } else { IResource res = ResourcesPlugin.getWorkspace().getRoot().findMember(path); if (res instanceof IContainer && res.exists()) { return res.getLocation().toFile(); - } - else { - abort( - LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.Working_directory_does_not_exist"), //$NON-NLS-1$ - new FileNotFoundException( LaunchUIPlugin.getFormattedResourceString("AbstractCLaunchDelegate.PROGRAM_PATH_does_not_exist", path.toOSString())), //$NON-NLS-1$ - ICDTLaunchConfigurationConstants.ERR_WORKING_DIRECTORY_DOES_NOT_EXIST); + } else { + abort(LaunchUIPlugin.getResourceString("AbstractCLaunchDelegate.Working_directory_does_not_exist"), //$NON-NLS-1$ + new FileNotFoundException(LaunchUIPlugin.getFormattedResourceString( + "AbstractCLaunchDelegate.PROGRAM_PATH_does_not_exist", path.toOSString())), //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_WORKING_DIRECTORY_DOES_NOT_EXIST); } } } @@ -467,6 +482,7 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel } private static class ArgumentParser { + private String fArgs; private int fIndex = 0; private int ch = -1; @@ -485,8 +501,7 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel if (ch == '"') { v.add(parseString()); - } - else { + } else { v.add(parseToken()); } } @@ -525,7 +540,7 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel private String parseToken() { StringBuffer buf = new StringBuffer(); - + while (ch > 0 && !Character.isWhitespace((char) ch)) { if (ch == '\\') { ch = getNext(); @@ -535,15 +550,12 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel } buf.append((char) ch); ch = getNext(); - } - else if (ch == -1) { // Don't lose a trailing backslash + } else if (ch == -1) { // Don't lose a trailing backslash buf.append('\\'); } - } - else if (ch == '"') { + } else if (ch == '"') { buf.append(parseString()); - } - else { + } else { buf.append((char) ch); ch = getNext(); } @@ -551,4 +563,195 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel return buf.toString(); } } -} + + /** + * Recursively creates a set of projects referenced by the current project + * + * @param project + * The current project + * @param referencedProjSet + * A set of referenced projects + * @throws CoreException + * if an error occurs while getting referenced projects from the current project + */ + private void getReferencedProjectSet(IProject project, HashSet referencedProjSet) throws CoreException { + IProject[] projects = project.getReferencedProjects(); + for (int i = 0; i < projects.length; i++) { + IProject refProject = projects[i]; + if (refProject.exists() && !referencedProjSet.contains(refProject)) { + referencedProjSet.add(refProject); + getReferencedProjectSet(refProject, referencedProjSet); + } + } + + } + + /** + * creates a list of project ordered by their build order from an unordered list of projects. + * + * @param resourceCollection + * The list of projects to sort. + * @return A new list of projects, ordered by build order. + */ + private List getBuildOrder(List resourceCollection) { + String[] orderedNames = ResourcesPlugin.getWorkspace().getDescription().getBuildOrder(); + if (orderedNames != null) { + List orderedProjects = new ArrayList(resourceCollection.size()); + //Projects may not be in the build order but should be built if selected + List unorderedProjects = new ArrayList(resourceCollection.size()); + unorderedProjects.addAll(resourceCollection); + + for (int i = 0; i < orderedNames.length; i++) { + String projectName = orderedNames[i]; + for (int j = 0; j < resourceCollection.size(); j++) { + IProject project = (IProject) resourceCollection.get(j); + if (project.getName().equals(projectName)) { + orderedProjects.add(project); + unorderedProjects.remove(project); + break; + } + } + } + //Add anything not specified before we return + orderedProjects.addAll(unorderedProjects); + return orderedProjects; + } + + // Try the project prerequisite order then + IProject[] projects = new IProject[resourceCollection.size()]; + projects = (IProject[]) resourceCollection.toArray(projects); + IWorkspace.ProjectOrder po = ResourcesPlugin.getWorkspace().computeProjectOrder(projects); + ArrayList orderedProjects = new ArrayList(); + orderedProjects.addAll(Arrays.asList(po.projects)); + return orderedProjects; + } + + /** + * Builds the current project and all of it's prerequisite projects if necessary. Respects specified build order if any exists. + * + * @param configuration + * the configuration being launched + * @param mode + * the mode the configuration is being launched in + * @param monitor + * progress monitor + * @return whether the debug platform should perform an incremental workspace build before the launch + * @throws CoreException + * if an exception occurrs while building + */ + public boolean buildForLaunch(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException { + + if (orderedProjects != null) { + monitor.beginTask(LaunchUIPlugin.getResourceString("AbstractCLaunchConfigurationDelegate.building_projects"), //$NON-NLS-1$ + orderedProjects.size() + 1); + + for (Iterator i = orderedProjects.iterator(); i.hasNext();) { + IProject proj = (IProject) i.next(); + monitor.subTask(LaunchUIPlugin.getResourceString("AbstractCLaunchConfigurationDelegate.building") + proj.getName()); //$NON-NLS-1$ + proj.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor); + } + + monitor.subTask(LaunchUIPlugin.getResourceString("AbstractLaunchConfigurationDelegate.building") + project.getName()); //$NON-NLS-1$ + project.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor); + } + monitor.done(); + return false; //don't build. I already did it or I threw an exception. + } + + /** + * Searches for compile errors in the current project and any of its prerequisite projects. If any compile errors, give the user + * a chance to abort the launch and correct the errors. + * + * @param configuration + * @param mode + * @param monitor + * @return whether the launch should proceed + * @throws CoreException + * if an exception occurs while checking for compile errors. + */ + public boolean finalLaunchCheck(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException { + try { + boolean continueLaunch = true; + if (orderedProjects != null) { + monitor.beginTask(LaunchUIPlugin.getResourceString("AbstractCLaunchConfigurationDelegate.searching_for_errors"), //$NON-NLS-1$ + orderedProjects.size() + 1); + + boolean compileErrorsInProjs = false; + + //check prerequisite projects for compile errors. + for (Iterator i = orderedProjects.iterator(); i.hasNext();) { + IProject proj = (IProject) i.next(); + monitor.subTask(LaunchUIPlugin.getResourceString("AbstractCLaunchConfigurationDelegate.searching_for_errors_in") //$NON-NLS-1$ + + proj.getName()); + compileErrorsInProjs = existsErrors(proj); + if (compileErrorsInProjs) { + break; + } + } + + //check current project, if prerequite projects were ok + if (!compileErrorsInProjs) { + monitor.subTask(LaunchUIPlugin.getResourceString("AbstractCLaunchConfigurationDelegate.searching_for_errors_in") //$NON-NLS-1$ + + project.getName()); + compileErrorsInProjs = existsErrors(project); + } + + //if compile errors exist, ask the user before continuing. + if (compileErrorsInProjs) { + IStatusHandler prompter = DebugPlugin.getDefault().getStatusHandler(promptStatus); + if (prompter != null) { + continueLaunch = ((Boolean) prompter.handleStatus(complileErrorPromptStatus, null)).booleanValue(); + } + } + } + return continueLaunch; + } finally { + monitor.done(); + } + } + + /** + * Searches for compile errors in the specified project + * + * @param proj + * The project to search + * @return true if compile errors exist, otherwise false + */ + private boolean existsErrors(IProject proj) throws CoreException { + IMarker[] markers = proj.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_INFINITE); + + if (markers.length > 0) { + for (int j = 0; j < markers.length; j++) { + if (((Integer) markers[j].getAttribute(IMarker.SEVERITY)).intValue() == IMarker.SEVERITY_ERROR) { + return true; + } + } + } + + return false; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate2#preLaunchCheck(org.eclipse.debug.core.ILaunchConfiguration, + * java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + */ + public boolean preLaunchCheck(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException { + // build project list + if (monitor != null) { + monitor.subTask(LaunchUIPlugin.getResourceString("AbstractCLaunchConfigurationDelegate.20")); //$NON-NLS-1$ + } + orderedProjects = null; + ICProject cProject = getCProject(configuration); + if (cProject != null) { + project = cProject.getProject(); + HashSet projectSet = new HashSet(); + getReferencedProjectSet(project, projectSet); + orderedProjects = getBuildOrder(new ArrayList(projectSet)); + } + // do generic launch checks + return super.preLaunchCheck(configuration, mode, monitor); + } + +}
\ No newline at end of file diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CApplicationLaunchShortcut.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CApplicationLaunchShortcut.java index 436a511db05..170268bc491 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CApplicationLaunchShortcut.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CApplicationLaunchShortcut.java @@ -16,11 +16,11 @@ import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.cdt.launch.AbstractCLaunchDelegate; import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin; import org.eclipse.cdt.ui.CElementLabelProvider; -import org.eclipse.core.boot.BootLoader; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunchConfiguration; @@ -113,7 +113,7 @@ public class CApplicationLaunchShortcut implements ILaunchShortcut { ICDebugConfiguration debugConfig = null; ICDebugConfiguration[] debugConfigs = CDebugCorePlugin.getDefault().getDebugConfigurations(); List debugList = new ArrayList(debugConfigs.length); - String os = BootLoader.getOS(); + String os = Platform.getOS(); for (int i = 0; i < debugConfigs.length; i++) { String platform = debugConfigs[i].getPlatform(); if (platform == null || platform.equals(ICDebugConfiguration.PLATFORM_NATIVE) || platform.equals(os)) { diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/AbstractCDebuggerTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/AbstractCDebuggerTab.java index 34b2d1a76c6..8be9a6231b4 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/AbstractCDebuggerTab.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/AbstractCDebuggerTab.java @@ -160,6 +160,14 @@ public abstract class AbstractCDebuggerTab extends CLaunchConfigurationTab { abstract protected ICDebugConfiguration getConfigForCurrentDebugger(); abstract public void createControl(Composite parent); + + public void activated(ILaunchConfigurationWorkingCopy workingCopy) { + ILaunchConfigurationTab dynamicTab = getDynamicTab(); + if (dynamicTab != null) { + dynamicTab.activated(workingCopy); + } + } + public void initializeFrom(ILaunchConfiguration config) { setLaunchConfiguration(config); ILaunchConfigurationTab dynamicTab = getDynamicTab(); diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchImages.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchImages.java index 50a55c371c2..f5e7aecd678 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchImages.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchImages.java @@ -4,6 +4,7 @@ import java.net.MalformedURLException; import java.net.URL; import org.eclipse.cdt.ui.CUIPlugin; +import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.graphics.Image; @@ -22,11 +23,7 @@ public class LaunchImages { // Subdirectory (under the package containing this class) where 16 color images are private static URL fgIconBaseURL; static { - try { - fgIconBaseURL= new URL(LaunchUIPlugin.getDefault().getDescriptor().getInstallURL(), "icons/" ); //$NON-NLS-1$ - } catch (MalformedURLException e) { - //LaunchUIPlugin.getDefault().log(e); - } + fgIconBaseURL= Platform.getBundle(LaunchUIPlugin.getUniqueIdentifier()).getEntry("/icons/"); //$NON-NLS-1$ } private static final String T_TABS = "tabs/"; //$NON-NLS-1$ diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchUIPlugin.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchUIPlugin.java index ee194c22f9e..3adaf86ba4e 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchUIPlugin.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchUIPlugin.java @@ -1,10 +1,13 @@ package org.eclipse.cdt.launch.internal.ui; +import java.text.MessageFormat; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.launch.AbstractCLaunchDelegate; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPluginDescriptor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.DebugEvent; @@ -16,20 +19,15 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.plugin.AbstractUIPlugin; - - -import java.util.MissingResourceException; -import java.util.ResourceBundle; -import java.text.MessageFormat; - +import org.osgi.framework.BundleContext; /* - * (c) Copyright QNX Software Systems Ltd. 2002. - * All Rights Reserved. + * (c) Copyright QNX Software Systems Ltd. 2002. All Rights Reserved. */ public class LaunchUIPlugin extends AbstractUIPlugin - implements IDebugEventSetListener { - public static final String PLUGIN_ID = LaunchUIPlugin.getUniqueIdentifier(); + implements + IDebugEventSetListener { + public static final String PLUGIN_ID = "org.eclipse.cdt.launch"; //$NON-NLS-1$ private static final String BUNDLE_NAME = "org.eclipse.cdt.launch.internal.ui.LaunchUIPluginResources";//$NON-NLS-1$ private static ResourceBundle resourceBundle = null; @@ -37,7 +35,7 @@ public class LaunchUIPlugin extends AbstractUIPlugin // -------- static methods -------- static { - if ( resourceBundle == null ) { + if (resourceBundle == null) { // Acquire a reference to the .properties file for this plug-in try { resourceBundle = ResourceBundle.getBundle(BUNDLE_NAME); @@ -46,31 +44,33 @@ public class LaunchUIPlugin extends AbstractUIPlugin } } } - + /** * Launch UI plug-in instance */ private static LaunchUIPlugin fgPlugin; private static Shell debugDialogShell; - + /** * Constructor for LaunchUIPlugin. + * * @param descriptor */ - public LaunchUIPlugin(IPluginDescriptor descriptor) { - super(descriptor); + public LaunchUIPlugin() { + super(); setDefault(this); } /** * Sets the Java Debug UI plug-in instance * - * @param plugin the plugin instance + * @param plugin + * the plugin instance */ private static void setDefault(LaunchUIPlugin plugin) { fgPlugin = plugin; } - + /** * Returns the Java Debug UI plug-in instance * @@ -79,17 +79,18 @@ public class LaunchUIPlugin extends AbstractUIPlugin public static LaunchUIPlugin getDefault() { return fgPlugin; } - + public static Shell getShell() { if (getActiveWorkbenchShell() != null) { return getActiveWorkbenchShell(); - } else { - if ( debugDialogShell != null ) { - if (!debugDialogShell.isDisposed() ) + } else { + if (debugDialogShell != null) { + if (!debugDialogShell.isDisposed()) return debugDialogShell; debugDialogShell = null; } - IWorkbenchWindow[] windows = getDefault().getWorkbench().getWorkbenchWindows(); + IWorkbenchWindow[] windows = getDefault().getWorkbench() + .getWorkbenchWindows(); return windows[0].getShell(); } } @@ -97,7 +98,7 @@ public class LaunchUIPlugin extends AbstractUIPlugin public static void setDialogShell(Shell shell) { debugDialogShell = shell; } - + /** * Convenience method which returns the unique identifier of this plugin. */ @@ -106,15 +107,16 @@ public class LaunchUIPlugin extends AbstractUIPlugin // If the default instance is not yet initialized, // return a static identifier. This identifier must // match the plugin id defined in plugin.xml - return "org.eclipse.cdt.launch"; //$NON-NLS-1$ + return PLUGIN_ID; } - return getDefault().getDescriptor().getUniqueIdentifier(); + return getDefault().getBundle().getSymbolicName(); } - + /** * Logs the specified status with this plug-in's log. * - * @param status status to log + * @param status + * status to log */ public static void log(IStatus status) { getDefault().getLog().log(status); @@ -122,19 +124,23 @@ public class LaunchUIPlugin extends AbstractUIPlugin /** * Logs an internal error with the specified message. * - * @param message the error message to log + * @param message + * the error message to log */ public static void logErrorMessage(String message) { - log(new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.ERROR, message, null)); + log(new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.ERROR, + message, null)); } /** * Logs an internal error with the specified throwable * - * @param e the exception to be logged - */ + * @param e + * the exception to be logged + */ public static void log(Throwable e) { - log(new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.ERROR, e.getMessage(), e)); //$NON-NLS-1$ + log(new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.ERROR, e + .getMessage(), e)); //$NON-NLS-1$ } /** @@ -144,8 +150,8 @@ public class LaunchUIPlugin extends AbstractUIPlugin */ public static IWorkbenchWindow getActiveWorkbenchWindow() { return getDefault().getWorkbench().getActiveWorkbenchWindow(); - } - + } + public static IWorkbenchPage getActivePage() { IWorkbenchWindow w = getActiveWorkbenchWindow(); if (w != null) { @@ -166,12 +172,16 @@ public class LaunchUIPlugin extends AbstractUIPlugin } return null; } - - public static void errorDialog( String message, IStatus status ) { + + public static void errorDialog(String message, IStatus status) { log(status); Shell shell = getActiveWorkbenchShell(); if (shell != null) { - ErrorDialog.openError(shell, LaunchUIPlugin.getResourceString("LaunchUIPlugin.Error"), message, status); //$NON-NLS-1$ + ErrorDialog + .openError( + shell, + LaunchUIPlugin + .getResourceString("LaunchUIPlugin.Error"), message, status); //$NON-NLS-1$ } } @@ -179,47 +189,60 @@ public class LaunchUIPlugin extends AbstractUIPlugin log(t); Shell shell = getActiveWorkbenchShell(); if (shell != null) { - IStatus status = new Status(IStatus.ERROR, getUniqueIdentifier(), 1, t.getMessage(), null); //$NON-NLS-1$ - ErrorDialog.openError(shell, LaunchUIPlugin.getResourceString("LaunchUIPlugin.Error"), message, status); //$NON-NLS-1$ + IStatus status = new Status(IStatus.ERROR, getUniqueIdentifier(), + 1, t.getMessage(), null); //$NON-NLS-1$ + ErrorDialog + .openError( + shell, + LaunchUIPlugin + .getResourceString("LaunchUIPlugin.Error"), message, status); //$NON-NLS-1$ } - } - /** - * @see org.eclipse.core.runtime.Plugin#shutdown() - */ - public void shutdown() throws CoreException { - DebugPlugin.getDefault().removeDebugEventListener(this); - super.shutdown(); } - /** - * @see org.eclipse.core.runtime.Plugin#startup() + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ - public void startup() throws CoreException { - super.startup(); + public void start(BundleContext context) throws Exception { + super.start(context); DebugPlugin.getDefault().addDebugEventListener(this); } - + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) + */ + public void stop(BundleContext context) throws Exception { + DebugPlugin.getDefault().removeDebugEventListener(this); + super.stop(context); + } + /** - * Notifies this listener of the given debug events. - * All of the events in the given event collection occurred - * at the same location the program be run or debugged. - * - * @param events the debug events + * Notifies this listener of the given debug events. All of the events in + * the given event collection occurred at the same location the program be + * run or debugged. + * + * @param events + * the debug events */ public void handleDebugEvents(DebugEvent[] events) { for (int i = 0; i < events.length; i++) { if (events[i].getKind() == DebugEvent.TERMINATE) { Object o = events[i].getSource(); if (o instanceof IProcess) { - IProcess proc = (IProcess)o; + IProcess proc = (IProcess) o; ICProject cproject = null; try { - cproject = AbstractCLaunchDelegate.getCProject(proc.getLaunch().getLaunchConfiguration()); + cproject = AbstractCLaunchDelegate.getCProject(proc + .getLaunch().getLaunchConfiguration()); } catch (CoreException e) { } if (cproject != null) { try { - cproject.getProject().refreshLocal(IResource.DEPTH_INFINITE, null); + cproject.getProject().refreshLocal( + IResource.DEPTH_INFINITE, null); } catch (CoreException e) { } } @@ -239,27 +262,26 @@ public class LaunchUIPlugin extends AbstractUIPlugin ResourceBundle bundle = LaunchUIPlugin.getDefault().getResourceBundle(); // No point trying if bundle is null as exceptions are costly - if ( bundle != null ) - { + if (bundle != null) { try { return bundle.getString(key); } catch (MissingResourceException e) { return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$ - } catch (NullPointerException e) { - return "#" + key + "#"; //$NON-NLS-1$ //$NON-NLS-2$ - } + } catch (NullPointerException e) { + return "#" + key + "#"; //$NON-NLS-1$ //$NON-NLS-2$ + } } // If we get here, then bundle is null. return "#" + key + "#"; //$NON-NLS-1$ //$NON-NLS-2$ } - + public static String getFormattedResourceString(String key, String arg) { - return MessageFormat.format(getResourceString(key), new String[] { arg }); + return MessageFormat.format(getResourceString(key), new String[]{arg}); } public static String getFormattedResourceString(String key, String[] args) { return MessageFormat.format(getResourceString(key), args); } -} +}
\ No newline at end of file diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchUIPluginResources.properties b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchUIPluginResources.properties index 36b2fa7147c..4110750ee03 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchUIPluginResources.properties +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchUIPluginResources.properties @@ -9,6 +9,10 @@ AbstractCLaunchDelegate.Project_NAME_does_not_exist=Project {0} does not exist AbstractCLaunchDelegate.Project_NAME_is_closed=Project {0} is closed AbstractCLaunchDelegate.PROGRAM_PATH_not_found={0} not found AbstractCLaunchDelegate.PROGRAM_PATH_does_not_exist={0} Does not exist. +AbstractCLaunchConfigurationDelegate.building_projects=Building prerequisite project list +AbstractCLaunchConfigurationDelegate.building=Building +AbstractCLaunchConfigurationDelegate.searching_for_errors=Searching for compile errors +AbstractCLaunchConfigurationDelegate.searching_for_errors_in=Searching for compile errors in LocalCLaunchConfigurationDelegate.Launching_Local_C_Application=Launching Local C Application LocalCLaunchConfigurationDelegate.No_Process_ID_selected=No Process ID selected diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CDebuggerTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CDebuggerTab.java index fe71430c688..55a014eeed8 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CDebuggerTab.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CDebuggerTab.java @@ -1,6 +1,5 @@ /* - * (c) Copyright QNX Software System Ltd. 2002. - * All Rights Reserved. + * (c) Copyright QNX Software System Ltd. 2002. All Rights Reserved. */ package org.eclipse.cdt.launch.ui; @@ -14,8 +13,8 @@ import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; import org.eclipse.cdt.debug.core.ICDebugConfiguration; import org.eclipse.cdt.launch.internal.ui.AbstractCDebuggerTab; import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin; -import org.eclipse.core.boot.BootLoader; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.Platform; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.swt.SWT; @@ -32,7 +31,6 @@ import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.help.WorkbenchHelp; - public class CDebuggerTab extends AbstractCDebuggerTab { protected Combo fDCombo; @@ -48,12 +46,12 @@ public class CDebuggerTab extends AbstractCDebuggerTab { Composite comp = new Composite(parent, SWT.NONE); setControl(comp); - + WorkbenchHelp.setHelp(getControl(), ICDTLaunchHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_DEBBUGER_TAB); - + GridLayout layout = new GridLayout(2, false); comp.setLayout(layout); - + Composite comboComp = new Composite(comp, SWT.NONE); layout = new GridLayout(2, false); comboComp.setLayout(layout); @@ -61,6 +59,7 @@ public class CDebuggerTab extends AbstractCDebuggerTab { dlabel.setText(LaunchUIPlugin.getResourceString("Launch.common.DebuggerColon")); //$NON-NLS-1$ fDCombo = new Combo(comboComp, SWT.DROP_DOWN | SWT.READ_ONLY); fDCombo.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { updateComboFromSelection(); } @@ -73,6 +72,7 @@ public class CDebuggerTab extends AbstractCDebuggerTab { radioComp.setLayout(radioLayout); fRunButton = createRadioButton(radioComp, LaunchUIPlugin.getResourceString("CDebuggerTab.Run_program_in_debugger")); //$NON-NLS-1$ fRunButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { if (fRunButton.getSelection() == true) { fStopInMain.setEnabled(true); @@ -84,35 +84,37 @@ public class CDebuggerTab extends AbstractCDebuggerTab { }); fAttachButton = createRadioButton(radioComp, LaunchUIPlugin.getResourceString("CDebuggerTab.Attach_to_running_process")); //$NON-NLS-1$ fAttachButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { updateLaunchConfigurationDialog(); } }); - Composite optionComp = new Composite(comp, SWT.NONE); layout = new GridLayout(2, false); optionComp.setLayout(layout); gd = new GridData(); gd.horizontalSpan = 2; optionComp.setLayoutData(gd); - + fStopInMain = new Button(optionComp, SWT.CHECK); fStopInMain.setText(LaunchUIPlugin.getResourceString("CDebuggerTab.Stop_at_main_on_startup")); //$NON-NLS-1$ fStopInMain.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { updateLaunchConfigurationDialog(); } }); - + fVarBookKeeping = new Button(optionComp, SWT.CHECK); fVarBookKeeping.setText(LaunchUIPlugin.getResourceString("CDebuggerTab.Automatically_track_values_of_variables")); //$NON-NLS-1$ fVarBookKeeping.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { updateLaunchConfigurationDialog(); } }); - + Group debuggerGroup = new Group(comp, SWT.SHADOW_ETCHED_IN); debuggerGroup.setText(LaunchUIPlugin.getResourceString("CDebuggerTab.Debugger_Options")); //$NON-NLS-1$ setDynamicTabHolder(debuggerGroup); @@ -138,6 +140,7 @@ public class CDebuggerTab extends AbstractCDebuggerTab { fDCombo.removeAll(); debugConfigs = CDebugCorePlugin.getDefault().getDebugConfigurations(); Arrays.sort(debugConfigs, new Comparator() { + public int compare(Object o1, Object o2) { ICDebugConfiguration ic1 = (ICDebugConfiguration) o1; ICDebugConfiguration ic2 = (ICDebugConfiguration) o2; @@ -148,17 +151,17 @@ public class CDebuggerTab extends AbstractCDebuggerTab { int selndx = -1; for (int i = 0; i < debugConfigs.length; i++) { if (debugConfigs[i].supportsMode(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN) - || debugConfigs[i].supportsMode(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH)) { + || debugConfigs[i].supportsMode(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH)) { String debuggerPlatform = debugConfigs[i].getPlatform(); - boolean isNative = configPlatform.equals(BootLoader.getOS()); + boolean isNative = configPlatform.equals(Platform.getOS()); if (debuggerPlatform.equalsIgnoreCase(configPlatform) - || (isNative && debuggerPlatform.equalsIgnoreCase(ICDebugConfiguration.PLATFORM_NATIVE))) { + || (isNative && debuggerPlatform.equalsIgnoreCase(ICDebugConfiguration.PLATFORM_NATIVE))) { if (debugConfigs[i].supportsCPU(programCPU)) { fDCombo.add(debugConfigs[i].getName()); fDCombo.setData(Integer.toString(x), debugConfigs[i]); // select first exact matching debugger for platform or requested selection if ((selndx == -1 && debuggerPlatform.equalsIgnoreCase(configPlatform)) - || selection.equals(debugConfigs[i].getID())) { + || selection.equals(debugConfigs[i].getID())) { selndx = x; } x++; @@ -185,9 +188,7 @@ public class CDebuggerTab extends AbstractCDebuggerTab { fAttachButton.setEnabled(debugConfig.supportsMode(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH)); fAttachButton.setSelection(false); try { - String mode = - getLaunchConfiguration().getAttribute( - ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, + String mode = getLaunchConfiguration().getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN); if (mode.equals(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN) && fRunButton.isEnabled()) { fRunButton.setSelection(true); @@ -209,21 +210,27 @@ public class CDebuggerTab extends AbstractCDebuggerTab { super.setDefaults(config); config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, DEFAULT_STOP_AT_MAIN); config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING, false); - config.setAttribute( - ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, - ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN); + config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, + ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN); + } + + public void activated(ILaunchConfigurationWorkingCopy workingCopy) { + super.activated(workingCopy); + try { + String id = workingCopy.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, ""); //$NON-NLS-1$ + if (getDebugConfig() == null || !getDebugConfig().getID().equals(id) || !validateDebuggerConfig(workingCopy)) { + loadDebuggerComboBox(workingCopy, id); + } + } catch (CoreException e) { + } } public void initializeFrom(ILaunchConfiguration config) { super.initializeFrom(config); try { String id = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, ""); //$NON-NLS-1$ - if (getDebugConfig() == null || !getDebugConfig().getID().equals(id)) { - loadDebuggerComboBox(config, id); - } - String mode = - config.getAttribute( - ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, + loadDebuggerComboBox(config, id); + String mode = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN); if (mode.equals(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN)) { fRunButton.setSelection(true); @@ -247,16 +254,15 @@ public class CDebuggerTab extends AbstractCDebuggerTab { if (isValid(config)) { super.performApply(config); config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, false); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING, !fVarBookKeeping.getSelection()); + config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING, + !fVarBookKeeping.getSelection()); if (fAttachButton.getSelection() == true) { - config.setAttribute( - ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, - ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH); + config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, + ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH); } else { config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, fStopInMain.getSelection()); - config.setAttribute( - ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, - ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN); + config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, + ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN); } } } @@ -293,7 +299,8 @@ public class CDebuggerTab extends AbstractCDebuggerTab { } String debuggerPlatform = debugConfig.getPlatform(); boolean isNative = platform.equals(projectPlatform); - if (debuggerPlatform.equalsIgnoreCase(projectPlatform) || (isNative && debuggerPlatform.equalsIgnoreCase(ICDebugConfiguration.PLATFORM_NATIVE))) { + if (debuggerPlatform.equalsIgnoreCase(projectPlatform) + || (isNative && debuggerPlatform.equalsIgnoreCase(ICDebugConfiguration.PLATFORM_NATIVE))) { if (debugConfig.supportsCPU(projectCPU)) { return true; } @@ -302,8 +309,8 @@ public class CDebuggerTab extends AbstractCDebuggerTab { } /** - * Return the class that implements <code>ILaunchConfigurationTab</code> - * that is registered against the debugger id of the currently selected debugger. + * Return the class that implements <code>ILaunchConfigurationTab</code> that is registered against the debugger id of the + * currently selected debugger. */ protected ICDebugConfiguration getConfigForCurrentDebugger() { int selectedIndex = fDCombo.getSelectionIndex(); @@ -317,4 +324,4 @@ public class CDebuggerTab extends AbstractCDebuggerTab { super.updateLaunchConfigurationDialog(); } -} +}
\ No newline at end of file diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CLaunchConfigurationTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CLaunchConfigurationTab.java index 1b9c71664e0..d62d1afdadb 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CLaunchConfigurationTab.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CLaunchConfigurationTab.java @@ -7,12 +7,12 @@ import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin; -import org.eclipse.core.boot.BootLoader; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Platform; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; @@ -122,7 +122,7 @@ public abstract class CLaunchConfigurationTab extends AbstractLaunchConfiguratio } protected String getPlatform(ILaunchConfiguration config) { - String platform = BootLoader.getOS(); + String platform = Platform.getOS(); try { return config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PLATFORM, platform); } diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java index 89da97dfb0a..04f990f0f84 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java @@ -23,16 +23,17 @@ import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin; import org.eclipse.cdt.ui.CElementImageDescriptor; import org.eclipse.cdt.ui.CElementLabelProvider; import org.eclipse.cdt.ui.CUIPlugin; -import org.eclipse.core.boot.BootLoader; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.ui.ILaunchConfigurationTab; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.swt.SWT; @@ -315,16 +316,16 @@ public class CMainTab extends CLaunchConfigurationTab { dialog.setValidator(new ISelectionStatusValidator() { public IStatus validate(Object [] selection) { if(selection.length == 0 || !(selection[0] instanceof IFile)) { - return new Status(IStatus.ERROR, LaunchUIPlugin.PLUGIN_ID, 1, LaunchUIPlugin.getResourceString("CMainTab.Selection_must_be_file"), null); //$NON-NLS-1$ + return new Status(IStatus.ERROR, LaunchUIPlugin.getUniqueIdentifier(), 1, LaunchUIPlugin.getResourceString("CMainTab.Selection_must_be_file"), null); //$NON-NLS-1$ } else { try { ICElement celement = cproject.findElement(((IFile)selection[0]).getProjectRelativePath()); if(celement == null || (celement.getElementType() != ICElement.C_BINARY && celement.getElementType() != ICElement.C_ARCHIVE)) { - return new Status(IStatus.ERROR, LaunchUIPlugin.PLUGIN_ID, 1, LaunchUIPlugin.getResourceString("CMainTab.Selection_must_be_binary_file"), null); //$NON-NLS-1$ + return new Status(IStatus.ERROR, LaunchUIPlugin.getUniqueIdentifier(), 1, LaunchUIPlugin.getResourceString("CMainTab.Selection_must_be_binary_file"), null); //$NON-NLS-1$ } - return new Status(IStatus.OK, LaunchUIPlugin.PLUGIN_ID, IStatus.OK, celement.getResource().getName(), null); + return new Status(IStatus.OK, LaunchUIPlugin.getUniqueIdentifier(), IStatus.OK, celement.getResource().getName(), null); } catch(Exception ex) { return new Status(IStatus.ERROR, LaunchUIPlugin.PLUGIN_ID, 1, LaunchUIPlugin.getResourceString("CMainTab.Selection_must_be_binary_file"), null); //$NON-NLS-1$ } @@ -421,7 +422,7 @@ public class CMainTab extends CLaunchConfigurationTab { protected ICProject[] getCProjects() throws CModelException { ICProject cproject[] = CoreModel.getDefault().getCModel().getCProjects(); ArrayList list = new ArrayList(cproject.length); - boolean isNative = filterPlatform.equals(BootLoader.getOS()); + boolean isNative = filterPlatform.equals(Platform.getOS()); for (int i = 0; i < cproject.length; i++) { ICDescriptor cdesciptor = null; diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CorefileDebuggerTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CorefileDebuggerTab.java index 27dde39df52..dea89139f50 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CorefileDebuggerTab.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CorefileDebuggerTab.java @@ -113,13 +113,22 @@ public class CorefileDebuggerTab extends AbstractCDebuggerTab { initializingComboBox = false; } + public void activated(ILaunchConfigurationWorkingCopy workingCopy) { + super.activated(workingCopy); + try { + String id = workingCopy.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, ""); //$NON-NLS-1$ + if (getDebugConfig() == null || !getDebugConfig().getID().equals(id) || !validateDebuggerConfig(workingCopy)) { + loadDebuggerComboBox(workingCopy, id); + } + } catch (CoreException e) { + } + } + public void initializeFrom(ILaunchConfiguration config) { super.initializeFrom(config); try { String id = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, ""); //$NON-NLS-1$ - if (getDebugConfig() == null || !getDebugConfig().getID().equals(id)) { - loadDebuggerComboBox(config, id); - } + loadDebuggerComboBox(config, id); } catch (CoreException e) { return; } @@ -165,7 +174,6 @@ public class CorefileDebuggerTab extends AbstractCDebuggerTab { return true; } } - setDebugConfig(null); return false; } |