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