diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookup.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookup.java
index c1c17d2ac7e..9d3e92b8175 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookup.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookup.java
@@ -11,6 +11,9 @@
package org.eclipse.cdt.internal.core.resources;
import java.net.URI;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
@@ -114,6 +117,35 @@ public class ResourceLookup {
return best;
}
+ /**
+ * Sorts files by relevance for CDT, by the criteria listed below. The most relevant files
+ * is listed first.
+ *
Accessible files
+ *
Files of preferred project
+ *
Files of CDT projects
+ *
Files on a source root of a CDT project
+ */
+ public static void sortFilesByRelevance(IFile[] filesToSort, final IProject preferredProject) {
+ Collections.sort(Arrays.asList(filesToSort), new Comparator() {
+ public int compare(IFile f1, IFile f2) {
+ boolean a1= f1.isAccessible();
+ boolean a2= f2.isAccessible();
+ if (a1 != a2)
+ return a1 ? -1 : 1;
+
+ int r1= FileRelevance.getRelevance(f1, preferredProject);
+ int r2= FileRelevance.getRelevance(f2, preferredProject);
+
+ if (r1 > r2)
+ return -1;
+ if (r1 < r2)
+ return 1;
+
+ return f1.getFullPath().toString().compareTo(f2.getFullPath().toString());
+ }
+ });
+ }
+
/**
* For testing, only.
*/