public IClass DeepGetClass(CodeCompletionDatabase db, string typeName, bool caseSensitive)
        {
            ArrayList visited = new ArrayList ();
            IClass c = DeepGetClassRec (visited, db, typeName, caseSensitive);
            if (c != null) return c;

            db = GetDatabase (CoreDB);
            return db.GetClass (typeName, caseSensitive);
        }
        public IClass GetClass(CodeCompletionDatabase db, string typeName, bool caseSensitive)
        {
            if (db != null) {
                IClass c = db.GetClass (typeName, caseSensitive);
                if (c != null) return c;
                foreach (ReferenceEntry re in db.References)
                {
                    CodeCompletionDatabase cdb = GetDatabase (re.Uri);
                    if (cdb == null) continue;
                    c = cdb.GetClass (typeName, caseSensitive);
                    if (c != null) return c;
                }
            }

            db = GetDatabase (CoreDB);
            return db.GetClass (typeName, caseSensitive);
        }
        internal IClass DeepGetClassRec(ArrayList visitedDbs, CodeCompletionDatabase db, string typeName, bool caseSensitive)
        {
            if (db == null) return null;
            if (visitedDbs.Contains (db)) return null;

            visitedDbs.Add (db);

            IClass c = db.GetClass (typeName, caseSensitive);
            if (c != null) return c;

            foreach (ReferenceEntry re in db.References)
            {
                CodeCompletionDatabase cdb = GetDatabase (re.Uri);
                if (cdb == null) continue;
                c = DeepGetClassRec (visitedDbs, cdb, typeName, caseSensitive);
                if (c != null) return c;
            }
            return null;
        }