From f72312491a884938951cd5ac18657b8659612dc8 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Mon, 29 Sep 2003 21:35:10 +0000 Subject: [PATCH] Patch for Bogdan Gheorghe: Here's a patch that simplifies how workspace scopes are built - instead of getting info from the CModelManager, we go straight to the workspace. This will improve shutdown/search performance. --- .../internal/core/search/CSearchScope.java | 49 +++++++++++++++++++ .../internal/core/search/CWorkspaceScope.java | 12 +++-- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/CSearchScope.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/CSearchScope.java index 925932f01f9..f4a47b3923b 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/CSearchScope.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/CSearchScope.java @@ -14,11 +14,13 @@ package org.eclipse.cdt.internal.core.search; import java.util.ArrayList; import java.util.HashSet; +import org.eclipse.cdt.core.CProjectNature; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IMember; import org.eclipse.cdt.core.search.ICSearchScope; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; @@ -83,6 +85,53 @@ public class CSearchScope implements ICSearchScope { } } } + /** + * @param project + * @param b + * @param set + */ + public void add(IProject project, boolean includesPrereqProjects, HashSet visitedProjects) { + + if (!project.isAccessible() || !visitedProjects.add(project)) return; + + IProjectDescription projDesc = null; + try { + projDesc = project.getDescription(); + } catch (CoreException e) {} + + if (projDesc == null) + return; + + String[] natures = projDesc.getNatureIds(); + + boolean flag = false; + for (int i=0; i< natures.length; i++){ + if (natures[i].equals(CProjectNature.C_NATURE_ID)){ + flag=true; + break; + } + } + + if (!flag) + //CNature not found; not a CDT project + return; + + this.addEnclosingProject(project.getFullPath()); + + if (includesPrereqProjects){ + IProject[] refProjects=null; + try { + refProjects = project.getReferencedProjects(); + } catch (CoreException e) { + } + for (int i=0; i