diff --git a/plugins/org.eclipse.dd.gdb.ui/src/org/eclipse/dd/gdb/internal/ui/launching/CArgumentsTab.java b/plugins/org.eclipse.dd.gdb.ui/src/org/eclipse/dd/gdb/internal/ui/launching/CArgumentsTab.java index 3762a5f67bb..18b0f839e1e 100644 --- a/plugins/org.eclipse.dd.gdb.ui/src/org/eclipse/dd/gdb/internal/ui/launching/CArgumentsTab.java +++ b/plugins/org.eclipse.dd.gdb.ui/src/org/eclipse/dd/gdb/internal/ui/launching/CArgumentsTab.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2007 QNX Software Systems and others. + * Copyright (c) 2005, 2008 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,6 +8,7 @@ * Contributors: * QNX Software Systems - Initial API and implementation * IBM Corporation + * Ericsson - Updated for DSF *******************************************************************************/ package org.eclipse.dd.gdb.internal.ui.launching; diff --git a/plugins/org.eclipse.dd.gdb.ui/src/org/eclipse/dd/gdb/internal/ui/launching/WorkingDirectoryBlock.java b/plugins/org.eclipse.dd.gdb.ui/src/org/eclipse/dd/gdb/internal/ui/launching/WorkingDirectoryBlock.java index 366b3d2f71e..ea39824c21d 100644 --- a/plugins/org.eclipse.dd.gdb.ui/src/org/eclipse/dd/gdb/internal/ui/launching/WorkingDirectoryBlock.java +++ b/plugins/org.eclipse.dd.gdb.ui/src/org/eclipse/dd/gdb/internal/ui/launching/WorkingDirectoryBlock.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2007 IBM Corporation and others. + * Copyright (c) 2000, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,6 +7,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Ericsson - Updated for DSF *******************************************************************************/ package org.eclipse.dd.gdb.internal.ui.launching; @@ -22,7 +23,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.variables.IStringVariableManager; import org.eclipse.core.variables.VariablesPlugin; -import org.eclipse.dd.gdb.internal.provisional.launching.GdbLaunchDelegate; +import org.eclipse.dd.gdb.internal.provisional.launching.LaunchUtils; import org.eclipse.dd.gdb.internal.ui.GdbUIPlugin; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; @@ -253,7 +254,7 @@ public class WorkingDirectoryBlock extends CLaunchConfigurationTab { try { ILaunchConfiguration config = getLaunchConfiguration(); if (config != null) { - ICProject cProject = GdbLaunchDelegate.LaunchUtils.getCProject(config); + ICProject cProject = LaunchUtils.getCProject(config); if (cProject != null) { fWorkingDirText.setText("${workspace_loc:" + cProject.getPath().makeRelative().toOSString() + "}"); //$NON-NLS-1$ //$NON-NLS-2$ return; diff --git a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/GdbLaunchDelegate.java b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/GdbLaunchDelegate.java index 57286d2fe07..f4637aebe70 100644 --- a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/GdbLaunchDelegate.java +++ b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/GdbLaunchDelegate.java @@ -11,20 +11,13 @@ *******************************************************************************/ package org.eclipse.dd.gdb.internal.provisional.launching; -import java.io.FileNotFoundException; -import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.concurrent.ExecutionException; -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.IBinaryParser; -import org.eclipse.cdt.core.ICExtensionReference; -import org.eclipse.cdt.core.IBinaryParser.IBinaryObject; import org.eclipse.cdt.core.model.ICModelMarker; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; -import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -33,9 +26,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.dd.dsf.concurrent.DsfExecutor; import org.eclipse.dd.dsf.concurrent.Sequence; @@ -317,151 +308,4 @@ public class GdbLaunchDelegate extends LaunchConfigurationDelegate return false; } - public static class LaunchUtils { - /** - * Verify the following things about the project: - * - is a valid project name given - * - does the project exist - * - is the project open - * - is the project a C/C++ project - */ - public static ICProject verifyCProject(ILaunchConfiguration configuration) throws CoreException { - String name = getProjectName(configuration); - if (name == null) { - abort(LaunchMessages.getString("AbstractCLaunchDelegate.C_Project_not_specified"), null, //$NON-NLS-1$ - ICDTLaunchConfigurationConstants.ERR_UNSPECIFIED_PROJECT); - } - ICProject cproject = getCProject(configuration); - if (cproject == null) { - IProject proj = ResourcesPlugin.getWorkspace().getRoot().getProject(name); - if (!proj.exists()) { - abort( - LaunchMessages.getFormattedString("AbstractCLaunchDelegate.Project_NAME_does_not_exist", name), null, //$NON-NLS-1$ - ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); - } else if (!proj.isOpen()) { - abort(LaunchMessages.getFormattedString("AbstractCLaunchDelegate.Project_NAME_is_closed", name), null, //$NON-NLS-1$ - ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); - } - abort(LaunchMessages.getString("AbstractCLaunchDelegate.Not_a_C_CPP_project"), null, //$NON-NLS-1$ - ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); - } - return cproject; - } - - - /** - * Verify that program name of the configuration can be found as a file. - * - * @return Absolute path of the program location - */ - public static IPath verifyProgramPath(ILaunchConfiguration configuration, ICProject cproject) throws CoreException { - String programName = configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, (String)null); - if (programName == null) { - abort(LaunchMessages.getString("AbstractCLaunchDelegate.Program_file_not_specified"), null, //$NON-NLS-1$ - ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); - } - - IPath programPath = new Path(programName); - if (programPath.isEmpty()) { - abort(LaunchMessages.getString("AbstractCLaunchDelegate.Program_file_does_not_exist"), null, //$NON-NLS-1$ - ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); - } - - if (!programPath.isAbsolute()) { - // Find the specified program within the specified project - IFile wsProgramPath = cproject.getProject().getFile(programPath); - programPath = wsProgramPath.getLocation(); - } - - if (!programPath.toFile().exists()) { - abort(LaunchMessages.getString("AbstractCLaunchDelegate.Program_file_does_not_exist"), //$NON-NLS-1$ - new FileNotFoundException( - LaunchMessages.getFormattedString("AbstractCLaunchDelegate.PROGRAM_PATH_not_found", //$NON-NLS-1$ - programPath.toOSString())), - ICDTLaunchConfigurationConstants.ERR_PROGRAM_NOT_EXIST); - } - - return programPath; - } - - - /** - * Verify that the executable path points to a valid binary file. - * - * @return An object representing the binary file. - */ - public static IBinaryObject verifyBinary(ILaunchConfiguration configuration, IPath exePath) throws CoreException { - ICExtensionReference[] parserRefs = CCorePlugin.getDefault().getBinaryParserExtensions(getCProject(configuration).getProject()); - for (ICExtensionReference parserRef : parserRefs) { - try { - IBinaryParser parser = (IBinaryParser)parserRef.createExtension(); - IBinaryObject exe = (IBinaryObject)parser.getBinary(exePath); - if (exe != null) { - return exe; - } - } catch (ClassCastException e) { - } catch (IOException e) { - } - } - - IBinaryParser parser = CCorePlugin.getDefault().getDefaultBinaryParser(); - try { - return (IBinaryObject)parser.getBinary(exePath); - } catch (ClassCastException e) { - } catch (IOException e) { - } - - abort(LaunchMessages.getString("AbstractCLaunchDelegate.Program_is_not_a_recognized_executable"), //$NON-NLS-1$ - new FileNotFoundException( - LaunchMessages.getFormattedString("AbstractCLaunchDelegate.Program_is_not_a_recognized_executable", //$NON-NLS-1$ - exePath.toOSString())), - ICDTLaunchConfigurationConstants.ERR_PROGRAM_NOT_BINARY); - - return null; - } - - /** - * 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 - * null if none - * @param code - * error code - */ - private static void abort(String message, Throwable exception, int code) throws CoreException { - MultiStatus status = new MultiStatus(GdbPlugin.PLUGIN_ID, code, message, exception); - status.add(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, code, - exception == null ? "" : exception.getLocalizedMessage(), //$NON-NLS-1$ - exception)); - throw new CoreException(status); - } - - /** - * Returns an ICProject based on the project name provided in the configuration. - * First look for a project by name, and then confirm it is a C/C++ project. - */ - public static ICProject getCProject(ILaunchConfiguration configuration) throws CoreException { - String projectName = getProjectName(configuration); - if (projectName != null) { - projectName = projectName.trim(); - if (projectName.length() > 0) { - IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); - ICProject cProject = CCorePlugin.getDefault().getCoreModel().create(project); - if (cProject != null && cProject.exists()) { - return cProject; - } - } - } - return null; - } - - private static String getProjectName(ILaunchConfiguration configuration) throws CoreException { - return configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String)null); - } - } - } diff --git a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/LaunchUtils.java b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/LaunchUtils.java new file mode 100644 index 00000000000..5e39e4a0394 --- /dev/null +++ b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/LaunchUtils.java @@ -0,0 +1,181 @@ +/******************************************************************************* + * Copyright (c) 2008 Ericsson and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Ericsson - Initial API and implementation + *******************************************************************************/ +package org.eclipse.dd.gdb.internal.provisional.launching; + +import java.io.FileNotFoundException; +import java.io.IOException; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.IBinaryParser; +import org.eclipse.cdt.core.ICExtensionReference; +import org.eclipse.cdt.core.IBinaryParser.IBinaryObject; +import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.MultiStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Status; +import org.eclipse.dd.gdb.internal.GdbPlugin; +import org.eclipse.debug.core.ILaunchConfiguration; + +public class LaunchUtils { + + /** + * Verify the following things about the project: + * - is a valid project name given + * - does the project exist + * - is the project open + * - is the project a C/C++ project + */ + public static ICProject verifyCProject(ILaunchConfiguration configuration) throws CoreException { + String name = getProjectName(configuration); + if (name == null) { + abort(LaunchMessages.getString("AbstractCLaunchDelegate.C_Project_not_specified"), null, //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_UNSPECIFIED_PROJECT); + } + ICProject cproject = getCProject(configuration); + if (cproject == null) { + IProject proj = ResourcesPlugin.getWorkspace().getRoot().getProject(name); + if (!proj.exists()) { + abort( + LaunchMessages.getFormattedString("AbstractCLaunchDelegate.Project_NAME_does_not_exist", name), null, //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); + } else if (!proj.isOpen()) { + abort(LaunchMessages.getFormattedString("AbstractCLaunchDelegate.Project_NAME_is_closed", name), null, //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); + } + abort(LaunchMessages.getString("AbstractCLaunchDelegate.Not_a_C_CPP_project"), null, //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); + } + return cproject; + } + + + /** + * Verify that program name of the configuration can be found as a file. + * + * @return Absolute path of the program location + */ + public static IPath verifyProgramPath(ILaunchConfiguration configuration, ICProject cproject) throws CoreException { + String programName = configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, (String)null); + if (programName == null) { + abort(LaunchMessages.getString("AbstractCLaunchDelegate.Program_file_not_specified"), null, //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); + } + + IPath programPath = new Path(programName); + if (programPath.isEmpty()) { + abort(LaunchMessages.getString("AbstractCLaunchDelegate.Program_file_does_not_exist"), null, //$NON-NLS-1$ + ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT); + } + + if (!programPath.isAbsolute()) { + // Find the specified program within the specified project + IFile wsProgramPath = cproject.getProject().getFile(programPath); + programPath = wsProgramPath.getLocation(); + } + + if (!programPath.toFile().exists()) { + abort(LaunchMessages.getString("AbstractCLaunchDelegate.Program_file_does_not_exist"), //$NON-NLS-1$ + new FileNotFoundException( + LaunchMessages.getFormattedString("AbstractCLaunchDelegate.PROGRAM_PATH_not_found", //$NON-NLS-1$ + programPath.toOSString())), + ICDTLaunchConfigurationConstants.ERR_PROGRAM_NOT_EXIST); + } + + return programPath; + } + + + /** + * Verify that the executable path points to a valid binary file. + * + * @return An object representing the binary file. + */ + public static IBinaryObject verifyBinary(ILaunchConfiguration configuration, IPath exePath) throws CoreException { + ICExtensionReference[] parserRefs = CCorePlugin.getDefault().getBinaryParserExtensions(getCProject(configuration).getProject()); + for (ICExtensionReference parserRef : parserRefs) { + try { + IBinaryParser parser = (IBinaryParser)parserRef.createExtension(); + IBinaryObject exe = (IBinaryObject)parser.getBinary(exePath); + if (exe != null) { + return exe; + } + } catch (ClassCastException e) { + } catch (IOException e) { + } + } + + IBinaryParser parser = CCorePlugin.getDefault().getDefaultBinaryParser(); + try { + return (IBinaryObject)parser.getBinary(exePath); + } catch (ClassCastException e) { + } catch (IOException e) { + } + + abort(LaunchMessages.getString("AbstractCLaunchDelegate.Program_is_not_a_recognized_executable"), //$NON-NLS-1$ + new FileNotFoundException( + LaunchMessages.getFormattedString("AbstractCLaunchDelegate.Program_is_not_a_recognized_executable", //$NON-NLS-1$ + exePath.toOSString())), + ICDTLaunchConfigurationConstants.ERR_PROGRAM_NOT_BINARY); + + return null; + } + + /** + * 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 + * null if none + * @param code + * error code + */ + private static void abort(String message, Throwable exception, int code) throws CoreException { + MultiStatus status = new MultiStatus(GdbPlugin.PLUGIN_ID, code, message, exception); + status.add(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, code, + exception == null ? "" : exception.getLocalizedMessage(), //$NON-NLS-1$ + exception)); + throw new CoreException(status); + } + + /** + * Returns an ICProject based on the project name provided in the configuration. + * First look for a project by name, and then confirm it is a C/C++ project. + */ + public static ICProject getCProject(ILaunchConfiguration configuration) throws CoreException { + String projectName = getProjectName(configuration); + if (projectName != null) { + projectName = projectName.trim(); + if (projectName.length() > 0) { + IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); + ICProject cProject = CCorePlugin.getDefault().getCoreModel().create(project); + if (cProject != null && cProject.exists()) { + return cProject; + } + } + } + return null; + } + + private static String getProjectName(ILaunchConfiguration configuration) throws CoreException { + return configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String)null); + } +} +