Bug 549179 - Adding project to a run configuration with a dependency to
a project that is already in the run configration

Change-Id: I56d077f6418554808461f8c4d9d21bedea58bd4e
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.debug/+/187301
Tested-by: JDT Bot <jdt-bot@eclipse.org>
Tested-by: Sarika Sinha <sarika.sinha@in.ibm.com>
Reviewed-by: Dieter Mai <maidieter@googlemail.com>
Reviewed-by: Sarika Sinha <sarika.sinha@in.ibm.com>
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddProjectAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddProjectAction.java
index b6118fc..383dedd 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddProjectAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddProjectAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2021 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -82,8 +82,12 @@
 
 			List<IRuntimeClasspathEntry> runtimeEntries = new ArrayList<>(additions.size());
 			Iterator<IJavaProject> iter = additions.iterator();
+			IRuntimeClasspathEntry[] addedEntries = getViewer().getEntries();
 			while (iter.hasNext()) {
 				IJavaProject jp = iter.next();
+				if (isProjectAdded(jp, addedEntries)) {
+					continue;
+				}
 				runtimeEntries.add(JavaRuntime.newProjectRuntimeClasspathEntry(jp));
 				if (dialog.isAddExportedEntries()) {
 					try {
@@ -102,6 +106,18 @@
 		}
 	}
 
+	private boolean isProjectAdded(IJavaProject project, IRuntimeClasspathEntry[] addedEntries) {
+		for (IRuntimeClasspathEntry entry : addedEntries) {
+			if (entry.getType() == IRuntimeClasspathEntry.PROJECT) {
+				IResource res = ResourcesPlugin.getWorkspace().getRoot().findMember(entry.getPath());
+				if (res.getLocationURI().equals(project.getResource().getLocationURI())) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
 	/**
 	 * @see SelectionListenerAction#updateSelection(IStructuredSelection)
 	 */