@Override public CsmNamespace getNamespace() { return project.findNamespace(id); }
private CsmNamespace resolveNamespaceBfs(Queue<CsmProject> queue, Set<CsmProject> seen, String namespace) { // breadth-first search in project dependency graph while (!queue.isEmpty()) { CsmProject project = queue.poll(); CsmNamespace ns = project.findNamespace(namespace); if (ns != null) { return ns; } seen.add(project); for (CsmProject lib : project.getLibraries()) { if (!seen.contains(lib)) { queue.offer(lib); } } } return null; }
/** * Finds namespace in project and it's libraries * * @param project - project * @param namespaceQualifiedName - namespace name * @return collection of namespaces */ private static Collection<CsmNamespace> findNamespacesInProject(CsmProject project, CharSequence namespaceQualifiedName, Collection<CsmProject> libs) { HashSet<CsmProject> scannedProjects = new HashSet<>(); Collection<CsmNamespace> out = new ArrayList<>(); CsmNamespace namespace = project.findNamespace(namespaceQualifiedName); if (namespace != null) { out.add(namespace); } scannedProjects.add(project); out.addAll(findNamespacesInProjects(libs, namespaceQualifiedName, scannedProjects)); return out; }
private CsmNamespace findNamespace(CharSequence qualifiedName) { CsmNamespace result = project.findNamespace(qualifiedName); if( result == null ) { for (Iterator<CsmProject> iter = getLibraries().iterator(); iter.hasNext() && result == null;) { CsmProject lib = iter.next(); result = lib.findNamespace(qualifiedName); } } return result; }
/** Finds namespace by its qualified name */ public final CsmNamespace findNamespace(CharSequence qualifiedName, boolean findInLibraries) { CsmNamespace result = findNamespace(qualifiedName); if (result == null && findInLibraries) { for (Iterator<CsmProject> it = getLibraries().iterator(); it.hasNext();) { CsmProject lib = it.next(); result = lib.findNamespace(qualifiedName); if (result != null) { break; } } } return result; }
/** * Finds namespace in projects and libraries * * @param project - project * @param namespaceQualifiedName - namespace name * @param scannedProjects - set of already scanned projects * @return collection of namespaces */ private static Collection<CsmNamespace> findNamespacesInProjects(Collection<CsmProject> projects, CharSequence namespaceQualifiedName, HashSet<CsmProject> scannedProjects) { Collection<CsmNamespace> out = new ArrayList<>(); for (CsmProject proj : projects) { if (!scannedProjects.contains(proj)) { CsmNamespace namespace = proj.findNamespace(namespaceQualifiedName); if (namespace != null) { out.add(namespace); } scannedProjects.add(proj); Collection<CsmProject> libs = proj.getLibraries(); if (!libs.isEmpty()) { out.addAll(findNamespacesInProjects(libs, namespaceQualifiedName, scannedProjects)); } } } return out; }
public Object getObject(){ int maskKind = kind & MASK; switch(maskKind){ case UID: return ((CsmUID)key).getObject(); case NAMESPACE: return project.findNamespace((CharSequence)key); case DECLARATION: return project.findDeclaration((CharSequence)key); case PROJECT: return project; case PROJECT_LIBS: return project; } return null; }
private Map<CharSequence, CsmNamespace> getNestedNamespaces(CsmNamespace ns, String strPrefix, boolean match, Set<CsmNamespace> handledNS) { Map<CharSequence, CsmNamespace> res = new LinkedHashMap<CharSequence, CsmNamespace>(); // order is important if(ns != null) { handledNS.add(ns); CsmProject nsProject = ns.getProject(); if(nsProject != null) { // handle all nested namespaces for (CsmProject lib : nsProject.getLibraries()) { CsmNamespace n = lib.findNamespace(ns.getQualifiedName()); if (n != null && !handledNS.contains(n)) { res.putAll(getNestedNamespaces(n, strPrefix, match, handledNS)); } } for (Iterator it = ns.getNestedNamespaces().iterator(); it.hasNext();) { CsmNamespace nestedNs = (CsmNamespace) it.next(); // TODO: consider when we add nested namespaces if ((nestedNs.getName().length() != 0) && matchName(nestedNs.getName(), strPrefix, match)) { res.put(nestedNs.getQualifiedName(), nestedNs); // TODO: Think if we really need nested namespaces here if (nestedNs.isInline()) { res.putAll(getNestedNamespaces(nestedNs, strPrefix, match, handledNS)); } } } } } return res; }
@Override public Collection<CsmDeclaration> findUsedDeclarations(CsmNamespace namespace) { List<CsmUsingDeclaration> res = new ArrayList<>(); Iterator<CsmOffsetableDeclaration> udecls = CsmSelect.getDeclarations( namespace, CsmSelect.getFilterBuilder().createKindFilter(CsmDeclaration.Kind.USING_DECLARATION)); while (udecls.hasNext()) { res.add((CsmUsingDeclaration) udecls.next()); } // Let's also look for similarly named namespace in libraries, // like it's done in CsmProjectContentResolver.getNamespaceMembers() if (!namespace.isGlobal()) { for(CsmProject lib : namespace.getProject().getLibraries()){ CsmNamespace ns = lib.findNamespace(namespace.getQualifiedName()); if (ns != null) { Iterator<CsmOffsetableDeclaration> it = CsmSelect.getDeclarations( ns, CsmSelect.getFilterBuilder().createKindFilter(CsmDeclaration.Kind.USING_DECLARATION)); while (it.hasNext()) { res.add((CsmUsingDeclaration) it.next()); } } } } return extractDeclarations(res); }
CsmNamespace ns = lib.findNamespace(namespace.getQualifiedName()); if (ns != null) { Iterator<CsmOffsetableDeclaration> it = CsmSelect.getDeclarations(
if (!ns.isGlobal()) { for (CsmProject lib : ns.getProject().getLibraries()) { CsmNamespace n = lib.findNamespace(ns.getQualifiedName()); if (n != null && !handledNS.contains(n)) { filterDeclarations(n, res, kinds, strPrefix, match, returnUnnamedInCurrentNs);
libNmsp = lib.getGlobalNamespace(); } else { libNmsp = lib.findNamespace(ns.getQualifiedName());
libraries = Resolver3.getSearchLibraries(prjBase); for (CsmProject lib : libraries) { CsmNamespace libNs = lib.findNamespace(nspQName); if (libNs != null) { namespacesToSearch.add(libNs);