Exemplo n.º 1
0
        public static IEnumerable <IType> ListControlClasses(IType baseType, ProjectDom database, string namespac)
        {
            if (database == null)
            {
                yield break;
            }

            //return classes if they derive from system.web.ui.control
            foreach (IType type in database.GetSubclasses(baseType, false, new string [] { namespac }))
            {
                if (!type.IsAbstract && type.IsPublic)
                {
                    yield return(type);
                }
            }

            if (!baseType.IsAbstract && baseType.IsPublic && baseType.Namespace == namespac)
            {
                IType t = database.GetType(baseType.FullName);
                if (t != null)
                {
                    yield return(baseType);
                }
            }
        }
Exemplo n.º 2
0
        internal static IEnumerable <INode> CollectMembers(ProjectDom dom, IMember member)
        {
            if (member is IMethod && ((IMethod)member).IsConstructor)
            {
                yield return(member);
            }
            else
            {
                bool isOverrideable = member.DeclaringType.ClassType == ClassType.Interface || member.IsOverride || member.IsVirtual || member.IsAbstract;
                bool isLastMember   = false;
                // for members we need to collect the whole 'class' of members (overloads & implementing types)
                HashSet <string> alreadyVisitedTypes = new HashSet <string> ();
                foreach (IType type in dom.GetInheritanceTree(member.DeclaringType))
                {
                    if (type.ClassType == ClassType.Interface || isOverrideable || type.DecoratedFullName == member.DeclaringType.DecoratedFullName)
                    {
                        // search in the class for the member
                        foreach (IMember interfaceMember in type.SearchMember(member.Name, true))
                        {
                            if (interfaceMember.MemberType == member.MemberType)
                            {
                                yield return(interfaceMember);
                            }
                        }

                        // now search in all subclasses of this class for the member
                        isLastMember = !member.IsOverride;
                        foreach (IType implementingType in dom.GetSubclasses(type))
                        {
                            string name = implementingType.DecoratedFullName;
                            if (alreadyVisitedTypes.Contains(name))
                            {
                                continue;
                            }
                            alreadyVisitedTypes.Add(name);
                            foreach (IMember typeMember in implementingType.SearchMember(member.Name, true))
                            {
                                if (typeMember.MemberType == member.MemberType)
                                {
                                    isLastMember = type.ClassType != ClassType.Interface && (typeMember.IsVirtual || typeMember.IsAbstract || !typeMember.IsOverride);
                                    yield return(typeMember);
                                }
                            }
                            if (!isOverrideable)
                            {
                                break;
                            }
                        }
                        if (isLastMember)
                        {
                            break;
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
        public Dictionary <string, IType> GetToolboxItems()
        {
            Dictionary <string, IType> tb_items = new Dictionary <string, IType> ();

            IType wt = ctx.GetType("Gtk.Widget", true);

            if (wt != null)
            {
                foreach (IType t in ctx.GetSubclasses(wt, true))
                {
                    if (t.SourceProjectDom == ctx && IsToolboxWidget(t))
                    {
                        tb_items [t.FullName] = t;
                    }
                }
            }

            return(tb_items);
        }
Exemplo n.º 4
0
        IEnumerable <NSObjectTypeInfo> GetRegisteredObjects(ProjectDom dom)
        {
            var nso = dom.GetType(nsobjectType);

            if (nso == null)
            {
                throw new Exception("Could not get NSObject from type database");
            }

            yield return(new NSObjectTypeInfo("NSObject", nsobjectType.FullName, null, null, false));

            foreach (var type in dom.GetSubclasses(nso, true))
            {
                var info = ConvertType(dom, type);
                if (info != null)
                {
                    yield return(info);
                }
            }
        }
 void FillClasses(MoonlightProject project)
 {
     if (classesFilled)
     {
         return;
     }
     classesFilled = true;
     try {
         ProjectDom dom     = ProjectDomService.GetProjectDom(project);
         IType      appType = dom.GetType("System.Windows.Application", true);
         if (appType == null)
         {
             return;
         }
         foreach (IType type in dom.GetSubclasses(appType, false))
         {
             classListStore.AppendValues(type.FullName);
         }
     } catch (InvalidOperationException) {
         // Project not found in parser database
     }
 }
Exemplo n.º 6
0
        public void GetSubclasses()
        {
            IType type = mainProject.GetType("Library2.CWidget", true);

            Assert.IsNotNull(type);

            List <string> types = new List <string> ();

            foreach (IType t in mainProject.GetSubclasses(type, true))
            {
                types.Add(t.FullName);
            }

            Assert.IsTrue(types.Contains("Library2.CContainer"));
            Assert.IsTrue(types.Contains("Library2.SomeContainer.CInnerWidget"));
            Assert.IsTrue(types.Contains("Library2.CExtraContainer"));
            Assert.IsTrue(types.Contains("Library2.SomeContainer.CExtraInnerWidget"));
            Assert.IsTrue(types.Contains("Library1.CBin"));
            Assert.IsTrue(types.Contains("Library1.CList"));
            Assert.IsTrue(types.Contains("Library1.SomeContainer.CInnerWidget"));
            Assert.IsTrue(types.Contains("Library1.SomeContainer.SomeInnerContainer.CSubInnerWidget"));
            Assert.IsTrue(types.Contains("Library1.CExtraBin"));
            Assert.IsTrue(types.Contains("Library1.CExtraContainerSub"));
            Assert.IsTrue(types.Contains("Library1.CExtraContainerInnerSub"));
            Assert.IsTrue(types.Contains("Library1.CExtraContainerInnerSub.CInnerWidget1"));
            Assert.IsTrue(types.Contains("Library1.CExtraContainerInnerSub.CInnerWidget2"));
            Assert.IsTrue(types.Contains("Library1.CExtraContainerInnerSub.CInnerWidget3"));
            Assert.IsTrue(types.Contains("CompletionDbTest.CustomWidget1"));
            Assert.IsTrue(types.Contains("CompletionDbTest.CustomWidget2"));
            Assert.AreEqual(16, types.Count);

            // No deep search

            type = mainProject.GetType("Library2.CWidget", true);
            Assert.IsNotNull(type);

            types.Clear();
            foreach (IType t in mainProject.GetSubclasses(type, false))
            {
                types.Add(t.FullName);
            }

            Assert.IsTrue(types.Contains("CompletionDbTest.CustomWidget1"));
            Assert.IsTrue(types.Contains("CompletionDbTest.CustomWidget2"));
            Assert.AreEqual(2, types.Count);

            // Interface subclassing

            type = mainProject.GetType("Library2.IObject", true);
            Assert.IsNotNull(type);

            types.Clear();
            foreach (IType t in mainProject.GetSubclasses(type, true))
            {
                types.Add(t.FullName);
            }

            Assert.IsTrue(types.Contains("Library2.CExtraContainer"));
            Assert.IsTrue(types.Contains("Library2.SomeContainer.CExtraInnerWidget"));
            Assert.IsTrue(types.Contains("Library1.CExtraContainerInnerSub"));
            Assert.IsTrue(types.Contains("Library1.CExtraContainerInnerSub.CInnerWidget1"));
            Assert.IsTrue(types.Contains("Library1.CExtraContainerInnerSub.CInnerWidget2"));
            Assert.IsTrue(types.Contains("Library1.CExtraContainerSub"));
            Assert.IsTrue(types.Contains("Library1.ISimple"));
            Assert.IsTrue(types.Contains("CompletionDbTest.CustomWidget1"));
            Assert.IsTrue(types.Contains("CompletionDbTest.CustomWidget2"));
            Assert.AreEqual(9, types.Count);
        }