public static bool GetM3DFWStuff() { if (!dte2.Solution.IsOpen) { return(false); } if (dte2.Solution.Projects.Count == 0) { return(false); } if (_m3dfw_namespace != null && _getFctPtrList_function != null && _getMemberFctPtrList_function != null) { return(true); } EnvDTE.CodeElements c_elements = dte2.Solution.Projects.Item(1).CodeModel.CodeElements; foreach (EnvDTE.CodeElement c_element in c_elements) { if (c_element.Kind == EnvDTE.vsCMElement.vsCMElementNamespace) { if (c_element.FullName == "m3dfw") { _m3dfw_namespace = c_element as EnvDTE.CodeNamespace; foreach (EnvDTE.CodeElement namespace_element in c_element.Children) { if (namespace_element.Kind == EnvDTE.vsCMElement.vsCMElementFunction) { if (namespace_element.FullName == "m3dfw::getFctPtrList") { _getFctPtrList_function = namespace_element as EnvDTE.CodeFunction; } else if (namespace_element.FullName == "m3dfw::getMemberFctPtrList") { _getMemberFctPtrList_function = namespace_element as EnvDTE.CodeFunction; } } } } } if (_m3dfw_namespace != null && _getFctPtrList_function != null && _getMemberFctPtrList_function != null) { return(true); } } return(false); }
// Finds handler classes. public List <EnvDTE.CodeClass> FindHandlers(EnvDTE.CodeNamespace container) { List <EnvDTE.CodeClass> handlers = new List <EnvDTE.CodeClass>(); foreach (EnvDTE.CodeElement element in container.Members) { if (element.Kind == EnvDTE.vsCMElement.vsCMElementClass) { EnvDTE.CodeClass codeClass = (EnvDTE.CodeClass)element; if (!codeClass.IsAbstract && IsHandler(codeClass)) { handlers.Add(codeClass); } } else if (element.Kind == EnvDTE.vsCMElement.vsCMElementNamespace) { handlers.AddRange(FindHandlers((EnvDTE.CodeNamespace)element)); } } return(handlers); }