diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookupTree.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookupTree.java index 29208fcadd5..911ff352aae 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookupTree.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookupTree.java @@ -670,13 +670,17 @@ class ResourceLookupTree implements IResourceChangeListener, IResourceDeltaVisit while(suffix.startsWith("../")) { //$NON-NLS-1$ suffix= suffix.substring(3); } - return extractMatchesForName(candidates, name, suffix, ignoreCase); + Set prjset= new HashSet(); + for (IProject prj : projects) { + prjset.add(prj.getName()); + } + return extractMatchesForName(candidates, name, suffix, ignoreCase, prjset); } /** * Selects the actual matches for the list of candidate nodes. */ - private IFile[] extractMatchesForName(Node[] candidates, String name, String suffix, boolean ignoreCase) { + private IFile[] extractMatchesForName(Node[] candidates, String name, String suffix, boolean ignoreCase, Set prjSet) { final char[] n1= name.toCharArray(); final int namelen = n1.length; int resultIdx= 0; @@ -691,7 +695,7 @@ class ResourceLookupTree implements IResourceChangeListener, IResourceDeltaVisit IFile[] result= null; outer: for (int i = 0; i < candidates.length; i++) { final Node node = candidates[i]; - if (!node.fIsFolder) { + if (!node.fIsFolder && checkProject(node, prjSet)) { final char[] n2= node.fResourceName; if (namelen == n2.length) { for (int j = 0; j < n2.length; j++) { @@ -725,6 +729,18 @@ class ResourceLookupTree implements IResourceChangeListener, IResourceDeltaVisit return result; } + private boolean checkProject(Node node, Set prjSet) { + while(true) { + final Node n= node.fParent; + if (n == fRootNode) + break; + if (n == null) + return false; + node= n; + } + return prjSet.contains(new String(node.fResourceName)); + } + private IPath createPath(Node node) { if (node == fRootNode) return Path.ROOT;