76
76
* NB the returned IFile may not exist
78
78
public static IFile selectFileForLocationURI(URI location, IProject preferredProject) {
79
return selectFile(findFilesForLocationURI(location), preferredProject);
79
return selectFile(findFilesForLocationURI(location), preferredProject, location);
89
89
* NB the returned IFile may not exist
91
91
public static IFile selectFileForLocation(IPath location, IProject preferredProject) {
92
return selectFile(findFilesForLocation(location), preferredProject);
92
return selectFile(findFilesForLocation(location), preferredProject, location);
102
102
* one that's most relevant, then first try to find it directly - before getting to the more expensive
103
103
* loop of computing the "relevance scores" for all the files.
105
private static IFile selectFile(IFile[] files, IProject preferredProject) {
105
private static IFile selectFile(IFile[] files, IProject preferredProject, Object originalLocation) {
106
106
if (files.length == 0)
115
115
* reaching the next for-loop - that loop is expensive as it might cause the loading of unnecessary
116
116
* project-descriptions.
118
if(preferredProject != null) {
119
for (int i = 0; i < files.length; i++) {
120
IFile file = files[i];
121
if (file.getProject().equals(preferredProject) && file.isAccessible() &&
122
(best == null || best.getFullPath().toString().compareTo(file.getFullPath().toString()) > 0)) {
118
int filesInPreferredProject= 0;
119
if (preferredProject != null) {
120
for (IFile file : files) {
121
if (file.getProject().equals(preferredProject) && file.isAccessible()) {
122
filesInPreferredProject++;
127
// One accessible file in preferred project.
128
if (filesInPreferredProject == 1)
130
131
int bestRelevance= -1;
132
for (int i = 0; i < files.length; i++) {
133
IFile file = files[i];
134
int relevance= FileRelevance.getRelevance(file, preferredProject);
135
if (best == null || relevance > bestRelevance ||
136
(relevance == bestRelevance &&
137
best.getFullPath().toString().compareTo(file.getFullPath().toString()) > 0)) {
138
bestRelevance= relevance;
132
for (IFile file : files) {
133
if (filesInPreferredProject==0 || file.getProject().equals(preferredProject)) {
134
int relevance= FileRelevance.getRelevance(file, preferredProject, PathCanonicalizationStrategy.resolvesSymbolicLinks(), originalLocation);
135
if (best == null || relevance > bestRelevance ||
136
(relevance == bestRelevance &&
137
best.getFullPath().toString().compareTo(file.getFullPath().toString()) > 0)) {
138
bestRelevance= relevance;