mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug 235744
Made LaunchUtils its own class. Updated copyright.
This commit is contained in:
parent
b72312bec3
commit
7ac143d107
4 changed files with 187 additions and 160 deletions
|
@ -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
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -8,6 +8,7 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* QNX Software Systems - Initial API and implementation
|
* QNX Software Systems - Initial API and implementation
|
||||||
* IBM Corporation
|
* IBM Corporation
|
||||||
|
* Ericsson - Updated for DSF
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.dd.gdb.internal.ui.launching;
|
package org.eclipse.dd.gdb.internal.ui.launching;
|
||||||
|
|
||||||
|
|
|
@ -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
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
|
* Ericsson - Updated for DSF
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.dd.gdb.internal.ui.launching;
|
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.runtime.IPath;
|
||||||
import org.eclipse.core.variables.IStringVariableManager;
|
import org.eclipse.core.variables.IStringVariableManager;
|
||||||
import org.eclipse.core.variables.VariablesPlugin;
|
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.dd.gdb.internal.ui.GdbUIPlugin;
|
||||||
import org.eclipse.debug.core.ILaunchConfiguration;
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
|
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
|
||||||
|
@ -253,7 +254,7 @@ public class WorkingDirectoryBlock extends CLaunchConfigurationTab {
|
||||||
try {
|
try {
|
||||||
ILaunchConfiguration config = getLaunchConfiguration();
|
ILaunchConfiguration config = getLaunchConfiguration();
|
||||||
if (config != null) {
|
if (config != null) {
|
||||||
ICProject cProject = GdbLaunchDelegate.LaunchUtils.getCProject(config);
|
ICProject cProject = LaunchUtils.getCProject(config);
|
||||||
if (cProject != null) {
|
if (cProject != null) {
|
||||||
fWorkingDirText.setText("${workspace_loc:" + cProject.getPath().makeRelative().toOSString() + "}"); //$NON-NLS-1$ //$NON-NLS-2$
|
fWorkingDirText.setText("${workspace_loc:" + cProject.getPath().makeRelative().toOSString() + "}"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -11,20 +11,13 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.dd.gdb.internal.provisional.launching;
|
package org.eclipse.dd.gdb.internal.provisional.launching;
|
||||||
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.concurrent.ExecutionException;
|
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.ICModelMarker;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
||||||
import org.eclipse.core.resources.IFile;
|
|
||||||
import org.eclipse.core.resources.IMarker;
|
import org.eclipse.core.resources.IMarker;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
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.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.MultiStatus;
|
|
||||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
import org.eclipse.core.runtime.Path;
|
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.dd.dsf.concurrent.DsfExecutor;
|
import org.eclipse.dd.dsf.concurrent.DsfExecutor;
|
||||||
import org.eclipse.dd.dsf.concurrent.Sequence;
|
import org.eclipse.dd.dsf.concurrent.Sequence;
|
||||||
|
@ -317,151 +308,4 @@ public class GdbLaunchDelegate extends LaunchConfigurationDelegate
|
||||||
return false;
|
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
|
|
||||||
* <code>null</code> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
* <code>null</code> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue