diff --git a/launch/org.eclipse.cdt.launch/ChangeLog b/launch/org.eclipse.cdt.launch/ChangeLog
index e4835c61e4f..6aae0e146dd 100644
--- a/launch/org.eclipse.cdt.launch/ChangeLog
+++ b/launch/org.eclipse.cdt.launch/ChangeLog
@@ -1,3 +1,9 @@
+2002-12-17 David Inglis
+
+ * src/.../launch/AbstractCLaunchDelegate.java(setDefaultSourceLocator): new method
+ * src/.../sourcelookup/DefaultSourceLocator.java:new class
+ add method for delegate to call to set a default source locator.
+
2002-12-03 Alain Magloire
* src/.../internal/LocalCLaunchConfigurationDelegate.java(exec):
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 11ad9a8156b..750aec1ecc5 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
@@ -19,6 +19,7 @@ import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
import org.eclipse.cdt.debug.core.ICDebugConfiguration;
import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin;
+import org.eclipse.cdt.launch.sourcelookup.DefaultSourceLocator;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
@@ -35,6 +36,7 @@ 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;
abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDelegate {
@@ -45,7 +47,8 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel
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];
@@ -125,7 +128,7 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel
*/
protected void abort(String message, Throwable exception, int code) throws CoreException {
String newMessage = message;
- if ( exception != null ) {
+ if (exception != null) {
newMessage = message + " : " + exception.getLocalizedMessage();
}
throw new CoreException(new Status(IStatus.ERROR, getPluginID(), code, newMessage, exception));
@@ -137,7 +140,6 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel
abstract protected String getPluginID();
-
public static ICProject getCProject(ILaunchConfiguration configuration) throws CoreException {
String projectName = getProjectName(configuration);
if (projectName != null) {
@@ -161,6 +163,29 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel
return configuration.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, (String) null);
}
+ /**
+ * 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
+ */
+ protected void setDefaultSourceLocator(ILaunch launch, ILaunchConfiguration configuration) throws CoreException {
+ // set default source locator if none specified
+ if (launch.getSourceLocator() == null) {
+ String id = configuration.getAttribute(ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID, (String) null);
+ if (id == null) {
+ ICProject cProject = getCProject(configuration);
+ if (cProject != null) {
+ IPersistableSourceLocator sourceLocator = new DefaultSourceLocator();
+ sourceLocator.initializeDefaults(configuration);
+ launch.setSourceLocator(sourceLocator);
+ }
+ }
+ }
+ }
+
/**
* Returns the program arguments as a String.
*
@@ -238,7 +263,8 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
if (!project.exists()) {
abort("Project does not exist", null, ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT);
- } else if (!project.isOpen()) {
+ }
+ else if (!project.isOpen()) {
abort("Project is closed", null, ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT);
}
abort("Project is not a C/C++ project", null, ICDTLaunchConfigurationConstants.ERR_NOT_A_C_PROJECT);
@@ -249,10 +275,10 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel
protected IPath verifyProgramFile(ILaunchConfiguration config) throws CoreException {
ICProject cproject = verifyCProject(config);
String fileName = getProgramName(config);
- if ( fileName == null ) {
+ if (fileName == null) {
abort("Program file not specified", null, ICDTLaunchConfigurationConstants.ERR_UNSPECIFIED_PROGRAM);
}
-
+
IFile projectPath = ((IProject) cproject.getResource()).getFile(fileName);
if (projectPath == null || !projectPath.exists()) {
abort("Program file does not exist", null, ICDTLaunchConfigurationConstants.ERR_PROGRAM_NOT_EXIST);
@@ -269,7 +295,7 @@ abstract public class AbstractCLaunchDelegate implements ILaunchConfigurationDel
* @return the working directory specified by the given
* launch configuration, or null
if none
* @exception CoreException if unable to retrieve the attribute
- */
+ */
public File verifyWorkingDirectory(ILaunchConfiguration configuration) throws CoreException {
IPath path = getWorkingDirectoryPath(configuration);
if (path == null) {
@@ -279,24 +305,34 @@ 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("Working directory does not exist", null, ICDTLaunchConfigurationConstants.ERR_WORKING_DIRECTORY_DOES_NOT_EXIST);
}
- } else {
+ else {
+ abort(
+ "Working directory does not exist",
+ null,
+ ICDTLaunchConfigurationConstants.ERR_WORKING_DIRECTORY_DOES_NOT_EXIST);
+ }
+ }
+ else {
IResource res = ResourcesPlugin.getWorkspace().getRoot().findMember(path);
if (res instanceof IContainer && res.exists()) {
return res.getLocation().toFile();
- } else {
- abort("Working directory does not exist", null, ICDTLaunchConfigurationConstants.ERR_WORKING_DIRECTORY_DOES_NOT_EXIST);
+ }
+ else {
+ abort(
+ "Working directory does not exist",
+ null,
+ ICDTLaunchConfigurationConstants.ERR_WORKING_DIRECTORY_DOES_NOT_EXIST);
}
}
}
- return null;
+ return null;
}
private static class ArgumentParser {
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 a5110dc03f9..8c9c22e2ba9 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
@@ -218,7 +218,7 @@ public class CApplicationLaunchShortcut implements ILaunchShortcut {
dialog.setMultipleSelection(false);
int result = dialog.open();
provider.dispose();
- if (result == dialog.OK) {
+ if (result == ElementListSelectionDialog.OK) {
return (ICDebugConfiguration) dialog.getFirstResult();
}
return null;
@@ -242,7 +242,7 @@ public class CApplicationLaunchShortcut implements ILaunchShortcut {
dialog.setMultipleSelection(false);
int result = dialog.open();
labelProvider.dispose();
- if (result == dialog.OK) {
+ if (result == ElementListSelectionDialog.OK) {
return (ILaunchConfiguration) dialog.getFirstResult();
}
return null;
@@ -263,7 +263,7 @@ public class CApplicationLaunchShortcut implements ILaunchShortcut {
dialog.setMessage("Choose an application to run"); //$NON-NLS-1$
}
dialog.setMultipleSelection(false);
- if (dialog.open() == dialog.OK) {
+ if (dialog.open() == ElementListSelectionDialog.OK) {
return (IBinary) dialog.getFirstResult();
}
return null;
diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CoreFileLaunchDelegate.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CoreFileLaunchDelegate.java
index 9bf3a2972fa..cc8393ca871 100644
--- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CoreFileLaunchDelegate.java
+++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/CoreFileLaunchDelegate.java
@@ -63,7 +63,7 @@ public class CoreFileLaunchDelegate extends AbstractCLaunchDelegate {
abort("Failed Launching CDI Debugger", e, ICDTLaunchConfigurationConstants.ERR_INTERNAL_ERROR);
}
if ( debugger != null ) {
- debuggerProcess = DebugPlugin.getDefault().newProcess(launch, debugger, "Debug Console");
+ debuggerProcess = DebugPlugin.newProcess(launch, debugger, "Debug Console");
launch.removeProcess(debuggerProcess);
}
CDebugModel.newCoreFileDebugTarget(
diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/LocalCLaunchConfigurationDelegate.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/LocalCLaunchConfigurationDelegate.java
index b618683ee10..c63e78105c7 100644
--- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/LocalCLaunchConfigurationDelegate.java
+++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/LocalCLaunchConfigurationDelegate.java
@@ -136,9 +136,13 @@ public class LocalCLaunchConfigurationDelegate extends AbstractCLaunchDelegate {
wd = new File(System.getProperty("user.home", ".")); //NON-NLS-1;
}
Process process = exec(commandArray, getEnvironmentProperty(config), wd);
- DebugPlugin.getDefault().newProcess(launch, process, renderProcessLabel(commandArray[0]));
+ DebugPlugin.newProcess(launch, process, renderProcessLabel(commandArray[0]));
}
+ // set the default source locator if required
+ setDefaultSourceLocator(launch, config);
+
monitor.done();
+
}
private int getProcessID() throws CoreException {
@@ -164,7 +168,7 @@ public class LocalCLaunchConfigurationDelegate extends AbstractCLaunchDelegate {
return;
}
dialog.setElements(plist.getProcessList());
- if (dialog.open() == dialog.OK) {
+ if (dialog.open() == ElementListSelectionDialog.OK) {
IProcessInfo info = (IProcessInfo) dialog.getFirstResult();
pid[0] = info.getPid();
}
diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/sourcelookup/DefaultSourceLocator.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/sourcelookup/DefaultSourceLocator.java
new file mode 100644
index 00000000000..2122c05e463
--- /dev/null
+++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/sourcelookup/DefaultSourceLocator.java
@@ -0,0 +1,115 @@
+/*
+ *(c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.launch.sourcelookup;
+
+import java.text.MessageFormat;
+
+import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator;
+import org.eclipse.cdt.debug.core.sourcelookup.ISourceMode;
+import org.eclipse.cdt.debug.ui.sourcelookup.CUISourceLocator;
+import org.eclipse.cdt.launch.ICDTLaunchConfigurationConstants;
+import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.model.IPersistableSourceLocator;
+import org.eclipse.debug.core.model.IStackFrame;
+
+/**
+ * The wrapper for the CUISourceLocator class.
+ *
+ * @since: Dec 11, 2002
+ */
+public class DefaultSourceLocator implements IPersistableSourceLocator, IAdaptable
+{
+ /**
+ * Identifier for the 'Default C/C++ Source Locator' extension
+ * (value "org.eclipse.cdt.launch.DefaultSourceLocator"
).
+ */
+ public static final String ID_DEFAULT_SOURCE_LOCATOR = LaunchUIPlugin.getUniqueIdentifier() + ".DefaultSourceLocator"; //$NON-NLS-1$
+
+ private CUISourceLocator fSourceLocator = null;
+ private final static int ERROR = 1000; // ????
+
+ /**
+ * Constructor for DefaultSourceLocator.
+ */
+ public DefaultSourceLocator()
+ {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.core.model.IPersistableSourceLocator#getMemento()
+ */
+ public String getMemento() throws CoreException
+ {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.core.model.IPersistableSourceLocator#initializeFromMemento(String)
+ */
+ public void initializeFromMemento( String memento ) throws CoreException
+ {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.core.model.IPersistableSourceLocator#initializeDefaults(ILaunchConfiguration)
+ */
+ public void initializeDefaults( ILaunchConfiguration configuration ) throws CoreException
+ {
+ fSourceLocator = new CUISourceLocator( getProject( configuration ) );
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.core.model.ISourceLocator#getSourceElement(IStackFrame)
+ */
+ public Object getSourceElement( IStackFrame stackFrame )
+ {
+ return ( fSourceLocator != null ) ? fSourceLocator.getSourceElement( stackFrame ) : null;
+ }
+
+ private IProject getProject( ILaunchConfiguration configuration ) throws CoreException
+ {
+ String projectName = configuration.getAttribute( ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String)null );
+ if ( projectName != null )
+ {
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject( projectName );
+ if ( project.exists() )
+ {
+ return project;
+ }
+ }
+ throw new CoreException( new Status( IStatus.ERROR,
+ LaunchUIPlugin.getUniqueIdentifier(),
+ ERROR,
+ MessageFormat.format( "Project \"{0}\" does not exist.", new String[] { projectName } ),
+ null ) );
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
+ */
+ public Object getAdapter( Class adapter )
+ {
+ if ( fSourceLocator != null )
+ {
+ if ( adapter.equals( ICSourceLocator.class ) )
+ {
+ return fSourceLocator.getAdapter( adapter );
+ }
+ if ( adapter.equals( ISourceMode.class ) )
+ {
+ return fSourceLocator.getAdapter( adapter );
+ }
+ }
+ return null;
+ }
+}
diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CEnvironmentTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CEnvironmentTab.java
index 4275a9dd9cd..48adef10173 100644
--- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CEnvironmentTab.java
+++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CEnvironmentTab.java
@@ -322,7 +322,7 @@ public class CEnvironmentTab extends CLaunchConfigurationTab {
protected void newEntry() {
EntryDialog dialog = new EntryDialog(new String(), new String(), false);
- if (dialog.open() == dialog.OK) {
+ if (dialog.open() == EntryDialog.OK) {
fElements.setProperty(dialog.getName(), dialog.getValue());
fVariableList.refresh();
}
@@ -336,7 +336,7 @@ public class CEnvironmentTab extends CLaunchConfigurationTab {
protected void doEdit(Map.Entry entry) {
EntryDialog dialog = new EntryDialog(entry.getKey().toString(), entry.getValue().toString(), true);
- if (dialog.open() == dialog.OK) {
+ if (dialog.open() == EntryDialog.OK) {
fElements.remove(entry.getKey());
fElements.setProperty(dialog.getName(), dialog.getValue());
fVariableList.refresh();
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 83b1810a563..0ab20494c39 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
@@ -202,7 +202,7 @@ public class CMainTab extends CLaunchConfigurationTab {
dialog.setElements(executables);
dialog.setMessage("Choose a &program to run");
dialog.setTitle("Program Selection");
- if (dialog.open() == dialog.OK) {
+ if (dialog.open() == ElementListSelectionDialog.OK) {
IBinary binary = (IBinary) dialog.getFirstResult();
try {
fProgText.setText(binary.getResource().getProjectRelativePath().toString());
@@ -253,7 +253,7 @@ public class CMainTab extends CLaunchConfigurationTab {
if (cProject != null) {
dialog.setInitialSelections(new Object[] { cProject });
}
- if (dialog.open() == dialog.OK) {
+ if (dialog.open() == ElementListSelectionDialog.OK) {
return (ICProject) dialog.getFirstResult();
}
return null;