Exemple #1
0
        /// <summary>
        /// Perform the search using the given criteria
        /// </summary>
        /// <param name="listType">The list type to return (classes or members)</param>
        /// <param name="criteria">The criteria to use for the search</param>
        /// <returns>An enumerable list of <see cref="SearchResult"/> instances that contain information about
        /// each potential match.</returns>
        private IEnumerable <SearchResult> PerformSearch(_LIB_LISTTYPE listType, VSOBSEARCHCRITERIA2 criteria)
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            IVsObjectList2 list;
            uint           count;
            int            pfOK;

            int result = library.GetList2((uint)listType, (uint)_LIB_LISTFLAGS.LLF_USESEARCHFILTER,
                                          new[] { criteria }, out list);

            if (result == VSConstants.S_OK && list != null)
            {
                result = list.GetItemCount(out count);

                if (result == VSConstants.S_OK && count != 0)
                {
                    for (uint idx = 0; idx < count; idx++)
                    {
                        result = list.CanGoToSource(idx, VSOBJGOTOSRCTYPE.GS_DEFINITION, out pfOK);

                        // Ignore anything for which we can't go to the source
                        if (result == VSConstants.S_OK && pfOK == 1)
                        {
                            yield return(new SearchResult(list, idx));
                        }
                    }
                }
            }
        }
Exemple #2
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);
        }
 private void AddSymbolToLibrary(_LIB_LISTTYPE symbolType, string symbolText, ref IVsLibrary2 csLib)
 {
     IVsObjectList2 list;
     var success = ErrorHandler.Succeeded(csLib.GetList2(
         (uint)symbolType,
         (uint)_LIB_LISTFLAGS.LLF_USESEARCHFILTER,
         new[]
             {
                 new VSOBSEARCHCRITERIA2
                     {
                         eSrchType = VSOBSEARCHTYPE.SO_SUBSTRING,
                         grfOptions = (uint) _VSOBSEARCHOPTIONS.VSOBSO_NONE,
                         szName = symbolText
                     }
             }, out list));
     if (success && list != null)
     {
         uint count = 0;
         list.GetItemCount(out count);
         if (count == 0)
             MessageBox.Show(String.Format("Error obtaining native symbol for class '{0}'", symbolText));
         else
             // Merge our symbols with the ones obtained from native lib
             library.AddExternalReference(symbolText, list);
     }
 }
        private void AddNested(IVsLibrary2 lib, TreeViewItem libRoot, _LIB_LISTTYPE listType)
        {
            var timestamp = DateTime.Now;
            IVsObjectList2 objects;
            ErrorHandler.Succeeded(lib.GetList2(
                (uint)listType,
                (uint)_LIB_LISTFLAGS.LLF_USESEARCHFILTER,
                new[]
                    {
                        new VSOBSEARCHCRITERIA2
                            {
                                eSrchType = VSOBSEARCHTYPE.SO_PRESTRING,
                                grfOptions = (uint) _VSOBSEARCHOPTIONS.VSOBSO_CASESENSITIVE,
                                szName = "*"
                            }
                    },
                out objects
                                        ));

            if (objects == null)
                return;

            var root = new TreeViewItem { Header = listType };
            uint libFlags;
            ErrorHandler.Succeeded(objects.GetCapabilities2(out libFlags));

            var flags = "";
            if ((libFlags & (uint)_LIB_LISTCAPABILITIES.LLC_ALLOWDELETE) != 0)
                flags += "|LLC_ALLOWDELETE";
            if ((libFlags & (uint)_LIB_LISTCAPABILITIES.LLC_ALLOWDRAGDROP) != 0)
                flags += "|LLC_ALLOWDRAGDROP";
            if ((libFlags & (uint)_LIB_LISTCAPABILITIES.LLC_ALLOWRENAME) != 0)
                flags += "|LLC_ALLOWRENAME";
            if ((libFlags & (uint)_LIB_LISTCAPABILITIES.LLC_ALLOWSCCOPS) != 0)
                flags += "|LLC_ALLOWSCCOPS";
            if ((libFlags & (uint)_LIB_LISTCAPABILITIES.LLC_HASBROWSEOBJ) != 0)
                flags += "|LLC_HASBROWSEOBJ";
            if ((libFlags & (uint)_LIB_LISTCAPABILITIES.LLC_HASCOMMANDS) != 0)
                flags += "|LLC_HASCOMMANDS";
            if ((libFlags & (uint)_LIB_LISTCAPABILITIES.LLC_HASDESCPANE) != 0)
                flags += "|LLC_HASDESCPANE";
            if ((libFlags & (uint)_LIB_LISTCAPABILITIES.LLC_NONE) != 0)
                flags += "|LLC_NONE";
            if ((libFlags & (uint)_LIB_LISTCAPABILITIES2.LLC_ALLOWELEMENTSEARCH) != 0)
                flags += "|LLC_ALLOWELEMENTSEARCH";
            if (flags != "")
            {
                flags = flags.Substring(1);
                root.Items.Add("flags = " + flags);
            }

            uint count;
            ErrorHandler.Succeeded(objects.GetItemCount(out count));
            root.Items.Add("Items count: " + count);

            for (var i = (uint)0; i < count; i++)
            {
                object propValue;
                string text;
                Type objType;
                //objects.GetText(i, VSTREETEXTOPTIONS.TTO_BASETEXT, out text);
                objType = objects.GetType();

                ErrorHandler.Succeeded(objects.GetProperty(i, (int)_VSOBJLISTELEMPROPID.VSOBJLISTELEMPROPID_LEAFNAME, out propValue));
                var item = new TreeViewItem { Header = (string)propValue };
                //var item = new TreeViewItem { Header = "TExt" };
                item.Items.Add("Type: " + objType);

                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);

                IVsObjectList2 nestedObjects;
                ErrorHandler.Succeeded(objects.GetList2(
                    i,
                    (uint)(_LIB_LISTTYPE.LLT_CLASSES),
                    (uint)_LIB_LISTFLAGS.LLF_USESEARCHFILTER,
                    new[]
                        {
                            new VSOBSEARCHCRITERIA2
                                {
                                    eSrchType = VSOBSEARCHTYPE.SO_PRESTRING,
                                    grfOptions = (uint) _VSOBSEARCHOPTIONS.VSOBSO_CASESENSITIVE,
                                    szName = "*"
                                }
                        },
                    out nestedObjects
                                            ));
                AddNested(item, nestedObjects);

                root.Items.Add(item);
            }

            root.Items.Insert(0, "Elapsed " + (DateTime.Now - timestamp).TotalMilliseconds);
            libRoot.Items.Add(root);
        }