diff --git a/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF b/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF
index 83cb2367c03..d6e27cdb939 100644
--- a/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF
+++ b/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.debug.ui; singleton:=true
-Bundle-Version: 7.4.0.qualifier
+Bundle-Version: 7.5.0.qualifier
Bundle-Activator: org.eclipse.cdt.debug.ui.CDebugUIPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/debug/org.eclipse.cdt.debug.ui/pom.xml b/debug/org.eclipse.cdt.debug.ui/pom.xml
index e70695b6903..d1348c31c9a 100644
--- a/debug/org.eclipse.cdt.debug.ui/pom.xml
+++ b/debug/org.eclipse.cdt.debug.ui/pom.xml
@@ -11,7 +11,7 @@
../../pom.xml
- 7.4.0-SNAPSHOT
+ 7.5.0-SNAPSHOT
org.eclipse.cdt.debug.ui
eclipse-plugin
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/AbstractImportExecutableWizard.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/AbstractImportExecutableWizard.java
index 05d28348613..c44630504e2 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/AbstractImportExecutableWizard.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/AbstractImportExecutableWizard.java
@@ -70,6 +70,8 @@ public abstract class AbstractImportExecutableWizard extends Wizard implements I
/**
* Adds the executables to a new or existing project. The executables are
* added as external links.
+ * If an executable of the same name already exists then the existing linked
+ * resource's location is replaced by the local location's value.
*
* @param project -
* project receiving the executables
@@ -83,13 +85,10 @@ public abstract class AbstractImportExecutableWizard extends Wizard implements I
IPath location = Path.fromOSString(executables[i]);
String executableName = location.toFile().getName();
IFile exeFile = project.getProject().getFile(executableName);
- if (!exeFile.exists())
- {
- try {
- exeFile.createLink(location, 0, null);
- } catch (Exception e) {
- this.getImportExecutablePage2().setErrorMessage("Error importing: " + executables[i]);
- }
+ try {
+ exeFile.createLink(location, IResource.REPLACE, null);
+ } catch (Exception e) {
+ this.getImportExecutablePage2().setErrorMessage("Error importing: " + executables[i]);
}
}
}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/ImportExecutablePageTwo.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/ImportExecutablePageTwo.java
index 6ed5b53e1da..bdc6185f12d 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/ImportExecutablePageTwo.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/ImportExecutablePageTwo.java
@@ -11,24 +11,31 @@
package org.eclipse.cdt.debug.ui.importexecutable;
import java.util.ArrayList;
+import java.util.List;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.ICDescriptor;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.parser.util.StringUtil;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
import org.eclipse.cdt.ui.CElementLabelProvider;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
@@ -400,6 +407,7 @@ public class ImportExecutablePageTwo extends WizardPage {
@Override
public boolean isPageComplete() {
setErrorMessage(null);
+ setWarningMessage(null);
if (isCreateNewProjectSelected()) {
if (getNewProjectName().length() == 0) {
@@ -421,6 +429,20 @@ public class ImportExecutablePageTwo extends WizardPage {
setErrorMessage(Messages.ImportExecutablePageTwo_BadProjectName);
return false;
}
+
+ // check if executables with same names already exist in the existing project
+ String[] executables = wizard.getImportExecutablePage().getSelectedExecutables();
+ List existingNames = new ArrayList();
+ for (String executable : executables) {
+ IFile exeFile = getExecutableFile(project.getProject(), executable);
+ if (exeFile.exists()) {
+ existingNames.add(exeFile.getName());
+ }
+ }
+ if (!existingNames.isEmpty()) {
+ setWarningMessage(NLS.bind(Messages.ImportExecutablePageTwo_ExecutableAlreadyExists,
+ StringUtil.join(existingNames, ", "))); //$NON-NLS-1$
+ }
}
if (isCreateLaunchConfigurationSelected() && getNewConfigurationName().length() == 0) {
@@ -430,6 +452,26 @@ public class ImportExecutablePageTwo extends WizardPage {
}
return super.isPageComplete();
}
+
+ /**
+ * Returns the executable resource having the specified path within the project.
+ * @param project - the project of the executable file
+ * @param executable - the string path of the executable
+ * @return the executable file
+ */
+ private IFile getExecutableFile(IProject project, String executable) {
+ IPath location = Path.fromOSString(executable);
+ String name = location.toFile().getName();
+ return project.getFile(name);
+ }
+
+ /**
+ * Sets or clears the warning message for this page.
+ * @param message - the message, or null
to clear the message
+ */
+ private void setWarningMessage(String message) {
+ setMessage(message, IMessageProvider.WARNING);
+ }
}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/Messages.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/Messages.java
index d3fe6942e71..11671cfed02 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/Messages.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/Messages.java
@@ -48,6 +48,10 @@ public class Messages extends NLS {
public static String ImportExecutablePageTwo_CreateLaunch;
public static String ImportExecutablePageTwo_Name;
public static String ImportExecutablePageTwo_DefaultProjectPrefix;
+ /**
+ * @since 7.5
+ */
+ public static String ImportExecutablePageTwo_ExecutableAlreadyExists;
private Messages() {
}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/Messages.properties b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/Messages.properties
index 2f486672af4..4d5027a35de 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/Messages.properties
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/importexecutable/Messages.properties
@@ -18,6 +18,8 @@ ImportExecutablePageTwo_EnterProjectName=Enter a project name.
ImportExecutablePageOne_ProcessingResults=Processing results
ImportExecutablePageTwo_EnterLaunchConfig=Enter a launch configuration name.
ImportExecutablePageTwo_ProjectAlreadyExists=That project already exists, enter a new name.
+ImportExecutablePageTwo_ExecutableAlreadyExists=Project already contains {0} executable(s). \
+If you continue the file(s) will be replaced.
ImportExecutablePageTwo_DefaultProjectPrefix=Debug_
ImportExecutableWizard_executableListLabel=C/C++ Executable Files:
ImportExecutableWizard_fileDialogTitle=Choose an executable file