~ubuntu-branches/debian/sid/eclipse-cdt/sid

« back to all changes in this revision

Viewing changes to core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookup.java

  • Committer: Package Import Robot
  • Author(s): Jakub Adam
  • Date: 2013-10-03 20:30:16 UTC
  • mfrom: (1.1.11)
  • Revision ID: package-import@ubuntu.com-20131003203016-d4ug6l0xgosasumq
Tags: 8.2.1-1
* New upstream release.
* Updated autotools documentation sources.

Show diffs side-by-side

added added

removed removed

Lines of Context:
76
76
         *                      NB the returned IFile may not exist
77
77
         */
78
78
        public static IFile selectFileForLocationURI(URI location, IProject preferredProject) {
79
 
                return selectFile(findFilesForLocationURI(location), preferredProject);
 
79
                return selectFile(findFilesForLocationURI(location), preferredProject, location);
80
80
        }
81
81
 
82
82
        /**
89
89
         *                      NB the returned IFile may not exist
90
90
         */
91
91
        public static IFile selectFileForLocation(IPath location, IProject preferredProject) {
92
 
                return selectFile(findFilesForLocation(location), preferredProject);
 
92
                return selectFile(findFilesForLocation(location), preferredProject, location);
93
93
        }
94
94
 
95
95
        /**
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.
104
104
         */
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)
107
107
                        return null;
108
108
 
115
115
                 * reaching the next for-loop - that loop is expensive as it might cause the loading of unnecessary 
116
116
                 * project-descriptions.
117
117
                 */
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++;
123
123
                                        best= file;
124
124
                                }
125
125
                        }
126
126
                }
127
 
                if(best != null)
 
127
                // One accessible file in preferred project.
 
128
                if (filesInPreferredProject == 1)
128
129
                        return best;
129
130
                
130
131
                int bestRelevance= -1;
131
 
 
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;
139
 
                                best= file;
 
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;
 
139
                                        best= file;
 
140
                                }
140
141
                        }
141
142
                }
142
143
                return best;