Delete sub-projects first when cleaning up test workspace

Change-Id: I4ab448ed6b81e139cc8a1fc44cc296c8ee186625
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.tests.git.framework/src/org/eclipse/emf/compare/ide/ui/tests/git/framework/internal/statements/InternalGitTestSupport.java b/plugins/org.eclipse.emf.compare.ide.ui.tests.git.framework/src/org/eclipse/emf/compare/ide/ui/tests/git/framework/internal/statements/InternalGitTestSupport.java
index 1a129dd..560f99f 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui.tests.git.framework/src/org/eclipse/emf/compare/ide/ui/tests/git/framework/internal/statements/InternalGitTestSupport.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui.tests.git.framework/src/org/eclipse/emf/compare/ide/ui/tests/git/framework/internal/statements/InternalGitTestSupport.java
@@ -345,8 +345,15 @@
 			}
 			new DisconnectProviderOperation(disconnectMe).execute(null);
 
-			for (IProject iProject : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
-				iProject.delete(true, new NullProgressMonitor());
+			// Delete sub-projects first
+			List<IProject> allProjects = new ArrayList<>(
+					Arrays.asList(ResourcesPlugin.getWorkspace().getRoot().getProjects()));
+			allProjects.sort((p1, p2) -> p2.getLocation().toString().compareTo(p1.getLocation().toString()));
+
+			for (IProject iProject : allProjects) {
+				if (iProject.isAccessible()) {
+					iProject.delete(true, new NullProgressMonitor());
+				}
 			}
 			ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE,
 					new NullProgressMonitor());