示例#1
0
        public void AddExternalReference(string symbol, IVsObjectList2 listToUse)
        {
            bool found = false;

            foreach (var c in root.Children)
            {
                if (string.Compare(symbol, c.UniqueName, false) == 0)
                {
                    c.ListToReference = listToUse;
                    found             = true;
                    break;
                }
                foreach (var c2 in c.Children)
                {
                    if (string.Compare(symbol, c2.UniqueName, false) == 0)
                    {
                        c2.ListToReference = listToUse;
                        found = true;
                        break;
                    }
                }
            }
            if (!found)
            {
                throw new IndexOutOfRangeException(String.Format("Could not find symbol with text {0}", symbol));
            }
        }
示例#2
0
        void GetListItemInfo(IVsObjectList2 subList, uint j, out string text, out ushort image, out bool isProcessing)
        {
            // Get Text
            IVsNavInfoNode navInfoNode;

            subList.GetNavInfoNode(j, out navInfoNode);
            navInfoNode.get_Name(out text);
            if (text == null)
            {
                text = "";
            }

            // Get icon, indicating reference type
            VSTREEDISPLAYDATA[] displayData = new VSTREEDISPLAYDATA[1];
            subList.GetDisplayData(j, displayData);

            isProcessing  = false;
            isProcessing |= text.Contains("Please Wait...");
            isProcessing |= text.Contains("% of items left to process");

            image = displayData[0].Image;
            if (image == 8 || image == 7)
            {
                isProcessing = true;
            }
        }
示例#3
0
        public void AddExternalReference(string symbol, IVsObjectList2 listToUse)
        {
            bool found = false;
            foreach (var c in root.Children)
            {
                if (string.Compare(symbol, c.UniqueName, false) == 0)
                {
                    c.ListToReference = listToUse;
                    found = true;
                    break;
                }
                foreach (var c2 in c.Children)
                {
                    if (string.Compare(symbol, c2.UniqueName, false) == 0)
                    {
                        c2.ListToReference = listToUse;
                        found = true;
                        break;
                    }
                    //foreach (var c3 in c2.Children)
                    //    if (string.Compare(symbol, c3.SymbolText, false) == 0)
                    //    {
                    //        c3.ListToReference = listToUse;
                    //        found = true;
                    //        break;
                    //    }
                }
            }
            if(!found)

                throw new IndexOutOfRangeException(String.Format("Could not find symbol with text {0}", symbol));
        }
示例#4
0
 int IVsLibrary2.GetList2(
     uint listType,
     uint flags,
     VSOBSEARCHCRITERIA2[] pobSrch,
     out IVsObjectList2 ppIVsObjectList2
     )
 {
     ppIVsObjectList2 = null;
     return(VSConstants.E_NOTIMPL);
 }
示例#5
0
        public static IVsObjectList2 SearchIVsLibrary(IVsLibrary2 library, string keyword, VSOBSEARCHTYPE searchType)
        {
            VSOBSEARCHCRITERIA2[] searchCriteria = new VSOBSEARCHCRITERIA2[1];
            searchCriteria[0].eSrchType = searchType;
            searchCriteria[0].szName    = keyword;

            IVsObjectList2 objectList = null;

            library.GetList2((uint)_LIB_LISTTYPE.LLT_CLASSES, (uint)_LIB_LISTFLAGS.LLF_USESEARCHFILTER, searchCriteria, out objectList);
            return(objectList);
        }
示例#6
0
        public static uint IVsObjectList2Count(IVsObjectList2 list)
        {
            if (list == null)
            {
                throw new ArgumentNullException("list");
            }

            uint count;

            list.GetItemCount(out count);
            return(count);
        }
示例#7
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="list"></param>
 /// <param name="idx"></param>
 public SearchResult(IVsObjectList2 list, uint idx)
 {
     this.list = list;
     this.idx  = idx;
 }
示例#8
0
        private void LogListSupportedCategories(uint childIndex, IVsObjectList2 csLib)
        {
            uint outVal = 0;
            string tempStr = string.Empty;
            /*
             * LIB_CATEGORY :
             *
                LC_MEMBERTYPE = 1,
                LC_MEMBERACCESS = 2,
                LC_CLASSTYPE = 3,
                LC_CLASSACCESS = 4,
                LC_ACTIVEPROJECT = 5,
                LC_LISTTYPE = 6,
                LC_VISIBILITY = 7,
                LC_MODIFIER = 8,
                LC_NODETYPE = 9,
             */
            Logger.Log("** GetCategoryField2");

            csLib.GetCategoryField2(childIndex, (int)LIB_CATEGORY.LC_ACTIVEPROJECT, out outVal);
            tempStr = string.Empty;
            foreach (_LIBCAT_ACTIVEPROJECT e in Enum.GetValues(typeof(_LIBCAT_ACTIVEPROJECT)))
                if (((_LIBCAT_ACTIVEPROJECT)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIBCAT_ACTIVEPROJECT), e);
            Logger.Log(string.Format("LIB_CATEGORY.LC_ACTIVEPROJECT: (_LIBCAT_ACTIVEPROJECT)({0}){1}", outVal, tempStr));

            csLib.GetCategoryField2(childIndex, (int)LIB_CATEGORY.LC_LISTTYPE, out outVal);
            tempStr = string.Empty;
            foreach (_LIB_LISTTYPE e in Enum.GetValues(typeof(_LIB_LISTTYPE)))
                if (((_LIB_LISTTYPE)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIB_LISTTYPE), e);
            Logger.Log(string.Format("LIB_CATEGORY.LC_LISTTYPE: (_LIB_LISTTYPE)({0}){1}", outVal, tempStr));

            // crashed VS
            //csLib.GetCategoryField2(childIndex, (int)LIB_CATEGORY.LC_CLASSACCESS, out outVal);
            //Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_CLASSACCESS", Enum.GetName(typeof(_LIBCAT_CLASSACCESS), outVal), outVal));

            tempStr = string.Empty;
            csLib.GetCategoryField2(childIndex, (int)LIB_CATEGORY.LC_CLASSTYPE, out outVal);
            foreach (_LIBCAT_CLASSTYPE2 e in Enum.GetValues(typeof(_LIBCAT_CLASSTYPE2)))
                if (((_LIBCAT_CLASSTYPE2)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIBCAT_CLASSTYPE), e);
            Logger.Log(string.Format("LIB_CATEGORY.LC_CLASSTYPE: (_LIBCAT_CLASSTYPE2)({0}){1}", outVal, tempStr));

            tempStr = string.Empty;
            foreach (_LIBCAT_CLASSTYPE e in Enum.GetValues(typeof(_LIBCAT_CLASSTYPE)))
                if (((_LIBCAT_CLASSTYPE)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIBCAT_CLASSTYPE), e);
            Logger.Log(string.Format("LIB_CATEGORY.LC_CLASSTYPE: (_LIBCAT_CLASSTYPE)({0}){1}", outVal, tempStr));

            csLib.GetCategoryField2(childIndex, (int)LIB_CATEGORY.LC_MEMBERACCESS, out outVal);
            tempStr = string.Empty;
            foreach (_LIBCAT_MEMBERACCESS e in Enum.GetValues(typeof(_LIBCAT_MEMBERACCESS)))
                if (((_LIBCAT_MEMBERACCESS)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIBCAT_CLASSTYPE), e);
            Logger.Log(string.Format("LIB_CATEGORY.LC_MEMBERACCESS: (_LIBCAT_MEMBERACCESS)({0}){1}", outVal, tempStr));

            csLib.GetCategoryField2(childIndex, (int)LIB_CATEGORY.LC_MEMBERTYPE, out outVal);
            tempStr = string.Empty;
            foreach (_LIBCAT_MEMBERTYPE e in Enum.GetValues(typeof(_LIBCAT_MEMBERTYPE)))
                if (((_LIBCAT_MEMBERTYPE)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIBCAT_CLASSTYPE), e);
            Logger.Log(string.Format("LIB_CATEGORY.LC_MEMBERTYPE: (_LIBCAT_MEMBERTYPE)({0}){1}", outVal, tempStr));

            csLib.GetCategoryField2(childIndex, (int)LIB_CATEGORY.LC_MODIFIER, out outVal);
            tempStr = string.Empty;
            foreach (_LIBCAT_MODIFIERTYPE e in Enum.GetValues(typeof(_LIBCAT_MODIFIERTYPE)))
                if (((_LIBCAT_MODIFIERTYPE)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIBCAT_CLASSTYPE), e);
            Logger.Log(string.Format("LIB_CATEGORY.LC_MODIFIER: (_LIBCAT_MODIFIERTYPE)({0}){1}", outVal, tempStr));

            //            csLib.GetSupportedCategoryFields2((int)LIB_CATEGORY.LC_NODETYPE, out outVal);
            //Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_NODETYPE", Enum.GetName(typeof()), outVal));

            csLib.GetCategoryField2(childIndex, (int)LIB_CATEGORY.LC_VISIBILITY, out outVal);
            tempStr = string.Empty;
            foreach (_LIBCAT_VISIBILITY e in Enum.GetValues(typeof(_LIBCAT_VISIBILITY)))
                if (((_LIBCAT_VISIBILITY)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIBCAT_CLASSTYPE), e);
            Logger.Log(string.Format("LIB_CATEGORY.LC_VISIBILITY: (_LIBCAT_VISIBILITY)({0}){1}", outVal, tempStr));

            csLib.GetCategoryField2(childIndex, (int)_LIB_CATEGORY2.LC_HIERARCHYTYPE, out outVal);
            tempStr = string.Empty;
            foreach (_LIBCAT_HIERARCHYTYPE2 e in Enum.GetValues(typeof(_LIBCAT_HIERARCHYTYPE2)))
                if (((_LIBCAT_HIERARCHYTYPE2)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIBCAT_HIERARCHYTYPE2), e);
            Logger.Log(string.Format("LIB_CATEGORY._LIBCAT_HIERARCHYTYPE2: (_LIBCAT_HIERARCHYTYPE2)({0}){1}", outVal, tempStr));

            tempStr = string.Empty;
            foreach (_LIBCAT_HIERARCHYTYPE e in Enum.GetValues(typeof(_LIBCAT_HIERARCHYTYPE)))
                if (((_LIBCAT_HIERARCHYTYPE)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIBCAT_CLASSTYPE), e);
            Logger.Log(string.Format("LIB_CATEGORY._LIBCAT_HIERARCHYTYPE: (_LIBCAT_HIERARCHYTYPE)({0}){1}", outVal, tempStr));

            csLib.GetCategoryField2(childIndex, (int)_LIB_CATEGORY2.LC_Last2, out outVal);
            Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_Last2", outVal, outVal));

            csLib.GetCategoryField2(childIndex, (int)_LIB_CATEGORY2.LC_MEMBERINHERITANCE, out outVal);
            tempStr = string.Empty;
            foreach (_LIBCAT_MEMBERINHERITANCE e in Enum.GetValues(typeof(_LIBCAT_MEMBERINHERITANCE)))
                if (((_LIBCAT_MEMBERINHERITANCE)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIBCAT_MEMBERINHERITANCE), e);
            Logger.Log(string.Format("LIB_CATEGORY.LC_MEMBERINHERITANCE: (_LIBCAT_MEMBERINHERITANCE)({0}){1}", outVal, tempStr));

            csLib.GetCategoryField2(childIndex, (int)_LIB_CATEGORY2.LC_NIL, out outVal);
            Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_NIL", outVal, outVal));

            csLib.GetCategoryField2(childIndex, (int)_LIB_CATEGORY2.LC_PHYSICALCONTAINERTYPE, out outVal);
            tempStr = string.Empty;
            foreach (_LIBCAT_PHYSICALCONTAINERTYPE e in Enum.GetValues(typeof(_LIBCAT_PHYSICALCONTAINERTYPE)))
                if (((_LIBCAT_PHYSICALCONTAINERTYPE)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIBCAT_PHYSICALCONTAINERTYPE), e);
            Logger.Log(string.Format("LIB_CATEGORY.LC_PHYSICALCONTAINERTYPE: (_LIBCAT_PHYSICALCONTAINERTYPE)({0}){1}", outVal, tempStr));

            csLib.GetCategoryField2(childIndex, (int)_LIB_CATEGORY2.LC_SEARCHMATCHTYPE, out outVal);
            tempStr = string.Empty;
            foreach (_LIBCAT_SEARCHMATCHTYPE e in Enum.GetValues(typeof(_LIBCAT_SEARCHMATCHTYPE)))
                if (((_LIBCAT_SEARCHMATCHTYPE)outVal & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIBCAT_SEARCHMATCHTYPE), e);
            Logger.Log(string.Format("LIB_CATEGORY.LC_SEARCHMATCHTYPE: (_LIBCAT_SEARCHMATCHTYPE)({0}){1}", outVal, tempStr));
        }
示例#9
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="list"></param>
        /// <param name="title"></param>
        /// <param name="itemsToDo">number of items to explore, set -1 to explore all (this would take a LOT of time and space),</param>
        private void ExploreListStructure(IVsObjectList2 list, string title, int itemsToDo)
        {
            Logger.Log("\r\n-------------------------------\r\nDetails for list '" + title + "'\r\n------------------------------- ");

            string tempStr = string.Empty;
            uint
                temp = 0,
                itemCount = 0;

            list.GetItemCount(out itemCount);
            Logger.Log(string.Format("* Child item count: {0}", itemCount));

            Logger.Log(string.Format("* GetCapabilities2", itemCount));
            list.GetCapabilities2(out temp);

            tempStr = string.Empty;
            foreach (_LIB_LISTCAPABILITIES2 e in Enum.GetValues(typeof(_LIB_LISTCAPABILITIES2)))
                if (((_LIB_LISTCAPABILITIES2)temp & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIB_LISTCAPABILITIES2), e);
            Logger.Log(string.Format("_LIB_LISTCAPABILITIES2: ({0}){1}", temp, tempStr));

            tempStr = string.Empty;
            foreach (_LIB_LISTCAPABILITIES e in Enum.GetValues(typeof(_LIB_LISTCAPABILITIES)))
                if (((_LIB_LISTCAPABILITIES)temp & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_LIB_LISTCAPABILITIES), e);
            Logger.Log(string.Format("_LIB_LISTCAPABILITIES: ({0}){1}", temp, tempStr));

            Logger.Log(string.Format("* GetFlags", itemCount));
            temp = 0;
            list.GetFlags(out temp);

            tempStr = string.Empty;
            foreach (_VSTREEFLAGS2 e in Enum.GetValues(typeof(_VSTREEFLAGS2)))
                if (((_VSTREEFLAGS2)temp & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_VSTREEFLAGS2), e);
            Logger.Log(string.Format("_VSTREEFLAGS2: ({0}){1}", temp, tempStr));

            tempStr = string.Empty;
            foreach (_VSTREEFLAGS e in Enum.GetValues(typeof(_VSTREEFLAGS)))
                if (((_VSTREEFLAGS)temp & e) == e)
                    tempStr += "|" + Enum.GetName(typeof(_VSTREEFLAGS), e);
            Logger.Log(string.Format("_VSTREEFLAGS: ({0}){1}", temp, tempStr));

            // children items
            if (itemCount > 0)

                if (itemsToDo > -1 && itemsToDo < itemCount)
                    itemCount = (uint)itemsToDo;

                for (uint i = 0; i < itemCount; i++)
                {
                    Logger.Log(string.Format("* Details of child item {0}", i));
                    object prop;
                    string listName = string.Empty;

                    list.GetProperty(i, (int)_VSOBJLISTELEMPROPID.VSOBJLISTELEMPROPID_FULLNAME, out prop);
                    Logger.Log(string.Format("VSOBJLISTELEMPROPID_FULLNAME: {0}", prop));
                    listName = prop.ToString();

                    list.GetProperty(i, (int)_VSOBJLISTELEMPROPID.VSOBJLISTELEMPROPID_HELPKEYWORD, out prop);
                    Logger.Log(string.Format("VSOBJLISTELEMPROPID_HELPKEYWORD: {0}", prop));

                    list.GetProperty(i, (int)_VSOBJLISTELEMPROPID.VSOBJLISTELEMPROPID_LEAFNAME, out prop);
                    Logger.Log(string.Format("VSOBJLISTELEMPROPID_LEAFNAME: {0}", prop));

                    list.GetProperty(i, (int)_VSOBJLISTELEMPROPID.VSOBJLISTELEMPROPID_SUPPORTSCALLSFROM, out prop);
                    Logger.Log(string.Format("VSOBJLISTELEMPROPID_SUPPORTSCALLSFROM: {0}", prop));

                    list.GetProperty(i, (int)_VSOBJLISTELEMPROPID.VSOBJLISTELEMPROPID_SUPPORTSCALLSTO, out prop);
                    Logger.Log(string.Format("VSOBJLISTELEMPROPID_SUPPORTSCALLSTO: {0}", prop));

                    list.GetProperty(i, (int)_VSOBJLISTELEMPROPID.VSOBJLISTELEMPROPID_COMPONENTPATH, out prop);
                    Logger.Log(string.Format("VSOBJLISTELEMPROPID_COMPONENTPATH: {0}", prop));

                    //SI: Crashes VS
                    //list.GetText(i, VSTREETEXTOPTIONS.TTO_BASETEXT, out tempStr);
                    //Logger.Log(string.Format("Base text: {0}", tempStr));

                    LogListSupportedCategories(i, list);

                    IVsObjectList2 childList = null;
                    uint childItemCount = 0;

                    //list.GetList2(
                    //    i,
                    //    (uint)_LIB_LISTTYPE.LLT_MEMBERS,
                    //    16,
                    //    new[]
                    //        {
                    //            new VSOBSEARCHCRITERIA2
                    //                {
                    //                    eSrchType = VSOBSEARCHTYPE.SO_ENTIREWORD,
                    //                    grfOptions = (uint) _VSOBSEARCHOPTIONS.VSOBSO_LOOKINREFS, // 2
                    //                    szName = "*"
                    //                }
                    //        },
                    //        out chldList);
                    foreach (_LIB_LISTTYPE en in Enum.GetValues(typeof(_LIB_LISTTYPE)))
                    {
                        list.GetList2(i, (uint)en, 0, null, out childList);
                        if (childList == null)
                            continue;

                        ExploreListStructure(
                            childList,
                            string.Format("Child {0} of list {1}", i, title),
                            -1);
                    }

                }

            Logger.Log(string.Format("End of list {0}\r\n-------------------------------\r\n", title));
        }
示例#10
0
        private void AddNested(TreeViewItem parent, IVsObjectList2 objects)
        {
            uint count;
            ErrorHandler.Succeeded(objects.GetItemCount(out count));

            for (var i = (uint)0; i < count; i++)
            {
                object propValue;
                ErrorHandler.Succeeded(objects.GetProperty(i, (int)_VSOBJLISTELEMPROPID.VSOBJLISTELEMPROPID_LEAFNAME, out propValue));
                var item = new TreeViewItem { Header = (string)propValue };
                ErrorHandler.Succeeded(objects.GetProperty(i, (int)_VSOBJLISTELEMPROPID.VSOBJLISTELEMPROPID_FULLNAME, out propValue));
                item.Items.Add("Full Name " + (string)propValue);
                ErrorHandler.Succeeded(objects.GetProperty(i, (int)_VSOBJLISTELEMPROPID.VSOBJLISTELEMPROPID_COMPONENTPATH, out propValue));
                item.Items.Add("Path " + (string)propValue);

                parent.Items.Add(item);
            }
        }
示例#11
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="list"></param>
 /// <param name="idx"></param>
 public SearchResult(IVsObjectList2 list, uint idx)
 {
     this.list = list;
     this.idx = idx;
 }
示例#12
0
 int IVsLibrary2.GetList2(uint ListType, uint flags, VSOBSEARCHCRITERIA2[] pobSrch, out IVsObjectList2 ppIVsObjectList2)
 {
     Logger.Log(string.Format("GetList2 : Library ListType:{0}({1}) flags: {2}",
                              Enum.GetName(typeof(_LIB_LISTTYPE2), ListType),
                              Enum.GetName(typeof(_LIB_LISTTYPE), ListType),
                              Enum.GetName(typeof(_LIB_LISTFLAGS), flags)));
     if (pobSrch != null)
     {
         ppIVsObjectList2 = root.FilterView((SymbolNode2.LibraryNodeType)ListType, pobSrch);
     }
     else
     {
         ppIVsObjectList2 = objRoot;
     }
     return(VSConstants.S_OK);
 }
示例#13
0
        /// <summary>
        /// Returns a child IVsObjectList2 for the specified category.
        /// </summary>
        /// <param name="index"></param>
        /// <param name="ListType"></param>
        /// <param name="flags"></param>
        /// <param name="pobSrch"></param>
        /// <param name="ppIVsObjectList2"></param>
        /// <returns></returns>
        int IVsObjectList2.GetList2(uint index, uint ListType, uint flags, VSOBSEARCHCRITERIA2[] pobSrch, out IVsObjectList2 ppIVsObjectList2)
        {
            //Logger.Log(string.Format(
            //"ResultList.GetList2 index:{0} ListType: {1}",
            //index,
            //Enum.GetName(typeof(_LIB_LISTTYPE), ListType)));

            ppIVsObjectList2 = children[(int)index].FilterView((LibraryNodeType)ListType, pobSrch);

            return VSConstants.S_OK;
        }
示例#14
0
        /// <summary>
        /// Returns a child IVsObjectList2 for the specified category.
        /// </summary>
        /// <param name="index"></param>
        /// <param name="ListType"></param>
        /// <param name="flags"></param>
        /// <param name="pobSrch"></param>
        /// <param name="ppIVsObjectList2"></param>
        /// <returns></returns>
        int IVsObjectList2.GetList2(uint index, uint ListType, uint flags, VSOBSEARCHCRITERIA2[] pobSrch, out IVsObjectList2 ppIVsObjectList2)
        {
            //Logger.Log(string.Format(
            //"ResultList.GetList2 index:{0} ListType: {1}",
            //index,
            //Enum.GetName(typeof(_LIB_LISTTYPE), ListType)));

            ppIVsObjectList2 = children[(int)index].FilterView((LibraryNodeType)ListType, pobSrch);

            return(VSConstants.S_OK);
        }
 int IVsLibrary2.GetList2(uint listType, uint flags, VSOBSEARCHCRITERIA2[] pobSrch, out IVsObjectList2 ppIVsObjectList2)
 {
     ppIVsObjectList2 = null;
     return VSConstants.E_NOTIMPL;
 }