Exemplo n.º 1
0
/*		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]);
                }
            }
        }
Exemplo n.º 2
0
 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);
             }
         }
     }
 }
Exemplo n.º 3
0
		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;
				}
			}
		}
Exemplo n.º 4
0
/*		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];
				}
			}
		}