/* public string SearchNamespace (SerializationCodeCompletionDatabase db, IUsing usin, string partitialNamespaceName) * { * return SearchNamespace (db, usin, partitialNamespaceName, true); * } * * public string SearchNamespace (SerializationCodeCompletionDatabase db, IUsing usin, string partitialNamespaceName, bool caseSensitive) * { * // LoggingService.LogDebug ("SearchNamespace : >{0}<", partitialNamespaceName); * if (NamespaceExists (db, partitialNamespaceName, caseSensitive)) { * return partitialNamespaceName; * } * * // search for partitial namespaces * IReturnType alias; * if (usin.Aliases.TryGetValue ("", out alias)) { * string declaringNamespace = alias.FullName; * while (declaringNamespace.Length > 0) { * if ((caseSensitive ? declaringNamespace.EndsWith(partitialNamespaceName) : declaringNamespace.ToLower().EndsWith(partitialNamespaceName.ToLower()) ) && NamespaceExists (db, declaringNamespace, caseSensitive)) { * return declaringNamespace; * } * int index = declaringNamespace.IndexOf('.'); * if (index > 0) { * declaringNamespace = declaringNamespace.Substring(0, index); * } else { * break; * } * } * } * * // Remember: * // Each namespace has an own using object * // The namespace name is an alias which has the key "" * foreach (string aliasString in usin.Aliases.Keys) { * if (caseSensitive ? partitialNamespaceName.StartsWith (aliasString) : partitialNamespaceName.ToLower().StartsWith(aliasString.ToLower())) { * if (aliasString.Length > 0) { * string nsName = String.Concat (usin.Aliases [aliasString], partitialNamespaceName.Remove(0, aliasString.Length)); * if (NamespaceExists (db, nsName, caseSensitive)) { * return nsName; * } * } * } * } * return null; * } */ public IEnumerable <IType> GetSubclassesTree(SerializationCodeCompletionDatabase db, IType cls, bool deepSearchReferences, IList <string> namespaces) { if (cls.FullName == "System.Object") { // Just return all classes if (!deepSearchReferences) { return(db.GetClassList(true, namespaces)); } else { return(GetAllClassesRec(new HashSet <SerializationCodeCompletionDatabase> (), db, namespaces)); } } else { var visited = new Dictionary <SerializationCodeCompletionDatabase, HashSet <IType> > (); SearchSubclasses(visited, cls, namespaces, db); if (deepSearchReferences) { List <IType> types = new List <IType> (); foreach (HashSet <IType> list in visited.Values) { // Don't use AddRange here. It won't work due to a bug in mono (#459816). foreach (IType tt in list) { types.Add(tt); } } return(types); } else { return(visited [db]); } } }
IEnumerable <IType> GetAllClassesRec(HashSet <SerializationCodeCompletionDatabase> visited, SerializationCodeCompletionDatabase db, IList <string> namespaces) { if (visited.Add(db)) { foreach (IType dsub in db.GetClassList(true, namespaces)) { yield return(dsub); } foreach (ReferenceEntry re in db.References) { SerializationCodeCompletionDatabase cdb = GetDatabase(re.Uri); if (cdb == null) { continue; } foreach (IType dsub in GetAllClassesRec(visited, cdb, namespaces)) { yield return(dsub); } } } }
IEnumerable<IType> GetAllClassesRec (HashSet<SerializationCodeCompletionDatabase> visited, SerializationCodeCompletionDatabase db, IList<string> namespaces) { if (visited.Add (db)) { foreach (IType dsub in db.GetClassList (true, namespaces)) yield return dsub; foreach (ReferenceEntry re in db.References) { SerializationCodeCompletionDatabase cdb = GetDatabase (re.Uri); if (cdb == null) continue; foreach (IType dsub in GetAllClassesRec (visited, cdb, namespaces)) yield return dsub; } } }
/* public string SearchNamespace (SerializationCodeCompletionDatabase db, IUsing usin, string partitialNamespaceName) { return SearchNamespace (db, usin, partitialNamespaceName, true); } public string SearchNamespace (SerializationCodeCompletionDatabase db, IUsing usin, string partitialNamespaceName, bool caseSensitive) { // LoggingService.LogDebug ("SearchNamespace : >{0}<", partitialNamespaceName); if (NamespaceExists (db, partitialNamespaceName, caseSensitive)) { return partitialNamespaceName; } // search for partitial namespaces IReturnType alias; if (usin.Aliases.TryGetValue ("", out alias)) { string declaringNamespace = alias.FullName; while (declaringNamespace.Length > 0) { if ((caseSensitive ? declaringNamespace.EndsWith(partitialNamespaceName) : declaringNamespace.ToLower().EndsWith(partitialNamespaceName.ToLower()) ) && NamespaceExists (db, declaringNamespace, caseSensitive)) { return declaringNamespace; } int index = declaringNamespace.IndexOf('.'); if (index > 0) { declaringNamespace = declaringNamespace.Substring(0, index); } else { break; } } } // Remember: // Each namespace has an own using object // The namespace name is an alias which has the key "" foreach (string aliasString in usin.Aliases.Keys) { if (caseSensitive ? partitialNamespaceName.StartsWith (aliasString) : partitialNamespaceName.ToLower().StartsWith(aliasString.ToLower())) { if (aliasString.Length > 0) { string nsName = String.Concat (usin.Aliases [aliasString], partitialNamespaceName.Remove(0, aliasString.Length)); if (NamespaceExists (db, nsName, caseSensitive)) { return nsName; } } } } return null; } */ public IEnumerable<IType> GetSubclassesTree (SerializationCodeCompletionDatabase db, IType cls, bool deepSearchReferences, IList<string> namespaces) { if (cls.FullName == "System.Object") { // Just return all classes if (!deepSearchReferences) return db.GetClassList (true, namespaces); else return GetAllClassesRec (new HashSet<SerializationCodeCompletionDatabase> (), db, namespaces); } else { var visited = new Dictionary<SerializationCodeCompletionDatabase, HashSet<IType>> (); SearchSubclasses (visited, cls, namespaces, db); if (deepSearchReferences) { List<IType> types = new List<IType> (); foreach (HashSet<IType> list in visited.Values) { // Don't use AddRange here. It won't work due to a bug in mono (#459816). foreach (IType tt in list) types.Add (tt); } return types; } else { return visited [db]; } } }