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); }
//public static IVsLibrary2 GetCSharpLibrary(DTE2 dte) //{ // if (dte == null) // throw new ArgumentNullException("dte"); // return GetIVsLibrary2(dte, VsUtilities.CSharpLibrary); //} public static IVsLibrary2 GetIVsLibrary2(DTE2 dte, Guid guid) { if (dte == null) { throw new ArgumentNullException("dte"); } IVsObjectManager2 objectManager = GetIVsObjectManager2(dte); IVsLibrary2 library = null; objectManager.FindLibrary(ref guid, out library); return(library); }
private void AddLibrary(IVsLibrary2 lib, IVsCombinedBrowseComponentSet extras) { if (lib == null) return; var simpleLib = lib as IVsSimpleLibrary2; Guid libGuid; ErrorHandler.Succeeded(simpleLib.GetGuid(out libGuid)); var libRoot = new TreeViewItem { Header = "guid=(" + libGuid + ")" }; var expander = new TreeViewItem(); libRoot.Items.Add(expander); libRoot.Expanded += (sender, args) => AddLibraryContent(libRoot, expander, extras, lib); treeView1.Items.Add(libRoot); }
public static IVsLibrary2[] GetIVsLibraries(DTE2 dte) { List <IVsLibrary2> libraries = new List <IVsLibrary2>(); IVsLibrary2 cSharpLibrary = GetIVsLibrary2(dte, VsUtilities.CSharpLibrary); if (cSharpLibrary != null) { libraries.Add(cSharpLibrary); } IVsLibrary2 vbLibrary = GetIVsLibrary2(dte, VsUtilities.VBLibrary); if (vbLibrary != null) { libraries.Add(vbLibrary); } return(libraries.ToArray()); }
private void AddLibraryContent(TreeViewItem libRoot, TreeViewItem expander, IVsCombinedBrowseComponentSet extras, IVsLibrary2 lib) { if (lib == null) return; if (libRoot.Items.Count != 1 || libRoot.Items[0] != expander) return; libRoot.Items.Clear(); var simpleLib = lib as IVsSimpleLibrary2; uint libFlags; ErrorHandler.Succeeded(lib.GetLibFlags2(out libFlags)); var flags = ""; if ((libFlags & (uint)_LIB_FLAGS.LF_EXPANDABLE) != 0) flags += "|LF_EXPANDABLE"; if ((libFlags & (uint)_LIB_FLAGS.LF_GLOBAL) != 0) flags += "|LF_GLOBAL"; if ((libFlags & (uint)_LIB_FLAGS.LF_HIDEINLIBPICKER) != 0) flags += "|LF_HIDEINLIBPICKER"; if ((libFlags & (uint)_LIB_FLAGS.LF_PROJECT) != 0) flags += "|LF_PROJECT"; if ((libFlags & (uint)_LIB_FLAGS2.LF_SUPPORTSBASETYPES) != 0) flags += "|LF_SUPPORTSBASETYPES"; if ((libFlags & (uint)_LIB_FLAGS2.LF_SUPPORTSCALLBROWSER) != 0) flags += "|LF_SUPPORTSCALLBROWSER"; if ((libFlags & (uint)_LIB_FLAGS2.LF_SUPPORTSCLASSDESIGNER) != 0) flags += "|LF_SUPPORTSCLASSDESIGNER"; if ((libFlags & (uint)_LIB_FLAGS2.LF_SUPPORTSDERIVEDTYPES) != 0) flags += "|LF_SUPPORTSDERIVEDTYPES"; if ((libFlags & (uint)_LIB_FLAGS2.LF_SUPPORTSFILTERING) != 0) flags += "|LF_SUPPORTSFILTERING"; if ((libFlags & (uint)_LIB_FLAGS2.LF_SUPPORTSFILTERINGWITHEXPANSION) != 0) flags += "|LF_SUPPORTSFILTERINGWITHEXPANSION"; if ((libFlags & (uint)_LIB_FLAGS2.LF_SUPPORTSINHERITEDMEMBERS) != 0) flags += "|LF_SUPPORTSINHERITEDMEMBERS"; if ((libFlags & (uint)_LIB_FLAGS2.LF_SUPPORTSLISTREFERENCES) != 0) flags += "|LF_SUPPORTSLISTREFERENCES"; if ((libFlags & (uint)_LIB_FLAGS2.LF_SUPPORTSPRIVATEMEMBERS) != 0) flags += "|LF_SUPPORTSPRIVATEMEMBERS"; if ((libFlags & (uint)_LIB_FLAGS2.LF_SUPPORTSPROJECTREFERENCES) != 0) flags += "|LF_SUPPORTSPROJECTREFERENCES"; flags = flags.Substring(1); Guid libGuid; ErrorHandler.Succeeded(simpleLib.GetGuid(out libGuid)); IVsNavInfo navInfo = null; var rc = VSConstants.E_NOTIMPL; //for (var i = (uint)0; navInfo==null && i<32 && rc != VSConstants.S_OK; i++) //{ // //rc = extras.CreateNavInfo( // // libGuid, // // new[] // // { // // new SYMBOL_DESCRIPTION_NODE {dwType = (uint)(0), pszName = "ClassLibrary12"}, // // }, // // 1, // // out navInfo // // ); // //if (rc == VSConstants.S_OK) // // break; rc = extras.CreateNavInfo( libGuid, new[] { new SYMBOL_DESCRIPTION_NODE {dwType = (uint)_LIB_LISTTYPE.LLT_NAMESPACES, pszName = "ClassLibrary3"}, }, 1, out navInfo ); //} var navInfoRoot = new TreeViewItem { Header = "NavInfo (rc=" + rc + ")" }; if (rc == VSConstants.S_OK) { Guid symbolGuid; ErrorHandler.Succeeded(navInfo.GetLibGuid(out symbolGuid)); navInfoRoot.Items.Add("Guid=" + symbolGuid); uint symbolType; ErrorHandler.Succeeded(navInfo.GetSymbolType(out symbolType)); var symbolTypeString = Enum.GetName(typeof(_LIB_LISTTYPE), symbolType); if (symbolTypeString != null) { navInfoRoot.Items.Add("Type = _LIB_LISTTYPE." + symbolTypeString); } else { symbolTypeString = Enum.GetName(typeof(_LIB_LISTTYPE2), symbolType); if (symbolTypeString != null) { navInfoRoot.Items.Add("Type = _LIB_LISTTYPE2." + symbolTypeString); } else { navInfoRoot.Items.Add("Type = " + symbolType); } } IVsEnumNavInfoNodes infoNodes; ErrorHandler.Succeeded(navInfo.EnumCanonicalNodes(out infoNodes)); var navInfoNodesArray = new IVsNavInfoNode[20]; uint fetched; ErrorHandler.Succeeded(infoNodes.Next((uint)navInfoNodesArray.Length, navInfoNodesArray, out fetched)); if (fetched > 0) { var navNodes = new TreeViewItem { Header = "Nodes" }; foreach (var node in navInfoNodesArray) { if (node == null) continue; string nodeName; ErrorHandler.Succeeded(node.get_Name(out nodeName)); uint nodeType; ErrorHandler.Succeeded(node.get_Type(out nodeType)); var nodeTypeString = Enum.GetName(typeof(_LIB_LISTTYPE), nodeType); if (nodeTypeString != null) { navNodes.Items.Add(nodeName + "(_LIB_LISTTYPE." + nodeTypeString + ")"); } else { nodeTypeString = Enum.GetName(typeof(_LIB_LISTTYPE2), symbolType); if (symbolTypeString != null) { navNodes.Items.Add(nodeName + "(_LIB_LISTTYPE." + nodeTypeString + ")"); } else { navNodes.Items.Add(nodeName + "(" + symbolType + ")"); } } } } } libRoot.Items.Add(navInfoRoot); libRoot.Items.Add("Flags=" + flags); IVsLiteTreeList globalLibs; ErrorHandler.Succeeded(lib.GetLibList(LIB_PERSISTTYPE.LPT_GLOBAL, out globalLibs)); AddLibList(libRoot, "Global", globalLibs); IVsLiteTreeList projectLibs; ErrorHandler.Succeeded(lib.GetLibList(LIB_PERSISTTYPE.LPT_PROJECT, out projectLibs)); AddLibList(libRoot, "Project", globalLibs); AddNested(lib, libRoot, _LIB_LISTTYPE.LLT_NAMESPACES); AddNested(lib, libRoot, _LIB_LISTTYPE.LLT_CLASSES); AddNested(lib, libRoot, _LIB_LISTTYPE.LLT_MEMBERS); AddNested(lib, libRoot, _LIB_LISTTYPE.LLT_REFERENCES); //expander.Items.Add(libRoot); }
private void LogLibrarySupportedCategories(IVsLibrary2 csLib) { uint outVal = 0; /* 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, */ csLib.GetSupportedCategoryFields2((int)LIB_CATEGORY.LC_ACTIVEPROJECT, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_ACTIVEPROJECT", Enum.GetName(typeof(_LIBCAT_ACTIVEPROJECT), outVal), outVal)); csLib.GetSupportedCategoryFields2((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)); csLib.GetSupportedCategoryFields2((int)LIB_CATEGORY.LC_CLASSTYPE, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_CLASSTYPE", Enum.GetName(typeof(_LIBCAT_CLASSTYPE), outVal), outVal)); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_CLASSTYPE as _LIBCAT_CLASSTYPE2", Enum.GetName(typeof(_LIBCAT_CLASSTYPE2), outVal), outVal)); csLib.GetSupportedCategoryFields2((int)LIB_CATEGORY.LC_LISTTYPE, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_LISTTYPE", Enum.GetName(typeof(_LIB_LISTTYPE), outVal), outVal)); csLib.GetSupportedCategoryFields2((int)LIB_CATEGORY.LC_MEMBERACCESS, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_MEMBERACCESS", Enum.GetName(typeof(_LIBCAT_MEMBERACCESS), outVal), outVal)); csLib.GetSupportedCategoryFields2((int)LIB_CATEGORY.LC_MEMBERTYPE, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_MEMBERTYPE", Enum.GetName(typeof(_LIBCAT_MEMBERTYPE), outVal), outVal)); csLib.GetSupportedCategoryFields2((int)LIB_CATEGORY.LC_MODIFIER, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_MODIFIER", Enum.GetName(typeof(_LIBCAT_MODIFIERTYPE), outVal), outVal)); // 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.GetSupportedCategoryFields2((int)LIB_CATEGORY.LC_VISIBILITY, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_VISIBILITY", Enum.GetName(typeof(_LIBCAT_VISIBILITY), outVal), outVal)); csLib.GetSupportedCategoryFields2((int)_LIB_CATEGORY2.LC_HIERARCHYTYPE, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_HIERARCHYTYPE", Enum.GetName(typeof(_LIBCAT_HIERARCHYTYPE), outVal), outVal)); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_HIERARCHYTYPE as _LIBCAT_HIERARCHYTYPE2", Enum.GetName(typeof(_LIBCAT_HIERARCHYTYPE2), outVal), outVal)); csLib.GetSupportedCategoryFields2((int)_LIB_CATEGORY2.LC_Last2, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_Last2", outVal, outVal)); csLib.GetSupportedCategoryFields2((int)_LIB_CATEGORY2.LC_MEMBERINHERITANCE, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_MEMBERINHERITANCE", Enum.GetName(typeof(_LIBCAT_MEMBERINHERITANCE), outVal), outVal)); csLib.GetSupportedCategoryFields2((int)_LIB_CATEGORY2.LC_NIL, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_NIL", outVal, outVal)); csLib.GetSupportedCategoryFields2((int)_LIB_CATEGORY2.LC_PHYSICALCONTAINERTYPE, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_PHYSICALCONTAINERTYPE", Enum.GetName(typeof(_LIBCAT_PHYSICALCONTAINERTYPE), outVal), outVal)); csLib.GetSupportedCategoryFields2((int)_LIB_CATEGORY2.LC_SEARCHMATCHTYPE, out outVal); Logger.Log(string.Format("C# LIB_CATEGORY {0} - {1}({2})", "LC_SEARCHMATCHTYPE", Enum.GetName(typeof(_LIBCAT_SEARCHMATCHTYPE), outVal), outVal)); }
private void button1_Click(object sender, RoutedEventArgs e) { var objectManager = SymbolBrowserPackage.GetGlobalService(typeof(SVsObjectManager)) as IVsObjectManager2; if (library == null) { library = new Library(); objectManager.RegisterSimpleLibrary(library, out libCookie); } // ToDo: // OBTAIN A LIST OF MODELS string[] typeNames = new string[] { "ClassLibrary1.Class1" }; string[] methodNames = new string[] { "ClassLibrary1.Class1.GetBlaBlaBla" }; // creating storage fo rfound results Dictionary<string, IVsSimpleObjectList2> foundLists = new Dictionary<string, IVsSimpleObjectList2>(); foreach (string s in typeNames) foundLists.Add(s, null); Guid csLibGuid = new Guid("58f1bad0-2288-45b9-ac3a-d56398f7781d"); IVsLibrary2 csLib; if (!ErrorHandler.Succeeded(objectManager.FindLibrary(ref csLibGuid, out csLib))) { MessageBox.Show("Could not load native C# library"); return; } LogLibrarySupportedCategories(csLib); // SI: Uncomment one of the blocks to make logger log the data for the corresponding list //IVsObjectList2 simpleList; //csLib.GetList2((uint)_LIB_LISTTYPE.LLT_PACKAGE, 0, null, out simpleList); //ExploreListStructure(simpleList, "Simple list", 2); //IVsObjectList2 searchList; //csLib.GetList2( // (uint)_LIB_LISTTYPE.LLT_CLASSES, // search for classes - LLT_CLASSES, methods - LLT_MEMBERS // (uint)(_LIB_LISTFLAGS.LLF_USESEARCHFILTER | _LIB_LISTFLAGS.LLF_DONTUPDATELIST), // new[] // { // new VSOBSEARCHCRITERIA2 // { // eSrchType = VSOBSEARCHTYPE.SO_ENTIREWORD, // grfOptions = (uint) _VSOBSEARCHOPTIONS.VSOBSO_LOOKINREFS, // 2 // szName = "ClassLibrary1.Class1" // } // }, // out searchList); //ExploreListStructure(searchList, "Search result list", 2); // Obtain a list of corresponding symbols from native C# library foreach (var s in typeNames) { AddSymbolToLibrary(_LIB_LISTTYPE.LLT_CLASSES, s, ref csLib); }//foreach // Obtain a list of corresponding symbols from native C# library foreach (var s in methodNames) { AddSymbolToLibrary(_LIB_LISTTYPE.LLT_MEMBERS, s, ref csLib); }//foreach IVsCombinedBrowseComponentSet extras; ErrorHandler.Succeeded(objectManager.CreateCombinedBrowseComponentSet(out extras)); var solution = SymbolBrowserPackage.GetGlobalService(typeof(SVsSolution)) as IVsSolution; IEnumHierarchies hiers; ErrorHandler.Succeeded(solution.GetProjectEnum((uint)__VSENUMPROJFLAGS.EPF_ALLPROJECTS, Guid.Empty, out hiers)); var projects = new IVsHierarchy[20]; uint actualCount; ErrorHandler.Succeeded(hiers.Next((uint)projects.Length, projects, out actualCount)); foreach (var project in projects) { if (project == null) continue; IVsSimpleBrowseComponentSet subset; ErrorHandler.Succeeded(objectManager.CreateSimpleBrowseComponentSet( (uint)_BROWSE_COMPONENT_SET_TYPE.BCST_EXCLUDE_LIBRARIES, null, 0, out subset)); ErrorHandler.Succeeded(subset.put_Owner(project)); ErrorHandler.Succeeded(extras.AddSet(subset)); } IVsEnumLibraries2 libs; ErrorHandler.Succeeded(objectManager.EnumLibraries(out libs)); var libArray = new IVsLibrary2[20]; uint fetched; libs.Next((uint)libArray.Length, libArray, out fetched); treeView1.Items.Clear(); foreach (var lib in libArray) { if (lib == null) continue; AddLibrary(lib, extras); } }
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); }