From ecdbe697207ce120884df8f9a1fa34f7d22adbc7 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Mon, 26 Aug 2013 14:59:43 +0200 Subject: [PATCH] Bug 411605: Improved fix for regression in ResourceLookup, such that project description is loaded less often. --- .../core/resources/ResourceLookup.java | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) 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 803173b65fe..170d6fab69c 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 @@ -115,31 +115,29 @@ public class ResourceLookup { * reaching the next for-loop - that loop is expensive as it might cause the loading of unnecessary * project-descriptions. */ + int filesInPreferredProject= 0; if (preferredProject != null) { for (IFile file : files) { if (file.getProject().equals(preferredProject) && file.isAccessible()) { - if (best != null) { - // At least two accessible files in preferred project. - best = null; - break; - } + filesInPreferredProject++; best= file; } } } // One accessible file in preferred project. - if(best != null) + if (filesInPreferredProject == 1) return best; int bestRelevance= -1; - for (IFile file : files) { - int relevance= FileRelevance.getRelevance(file, preferredProject, PathCanonicalizationStrategy.resolvesSymbolicLinks(), originalLocation); - if (best == null || relevance > bestRelevance || - (relevance == bestRelevance && - best.getFullPath().toString().compareTo(file.getFullPath().toString()) > 0)) { - bestRelevance= relevance; - best= file; + if (filesInPreferredProject==0 || file.getProject().equals(preferredProject)) { + int relevance= FileRelevance.getRelevance(file, preferredProject, PathCanonicalizationStrategy.resolvesSymbolicLinks(), originalLocation); + if (best == null || relevance > bestRelevance || + (relevance == bestRelevance && + best.getFullPath().toString().compareTo(file.getFullPath().toString()) > 0)) { + bestRelevance= relevance; + best= file; + } } } return best;