private EnvDTE.CodeClass FindClass(string className, EnvDTE.CodeElements elements) { if (null == elements) { return(null); } foreach (EnvDTE.CodeElement element in elements) { if (null == element) { continue; } if (EnvDTE.vsCMElement.vsCMElementClass == element.Kind) { if (element.FullName == className) { return(element as EnvDTE.CodeClass); } } EnvDTE.CodeClass innerClass = FindClass(className, element.Children); if (null != innerClass) { return(innerClass); } } return(null); }
private void CollectTypes(EnvDTE.CodeElements elements) { foreach (var element in elements) { if (element is EnvDTE.CodeNamespace) { CollectTypes(((EnvDTE.CodeNamespace)element).Members); } else if (element is EnvDTE.CodeType) { string typeName = ((EnvDTE.CodeType)element).FullName; object codeTypeList; if (typeInformation.TryGetValue(typeName, out codeTypeList)) { ((List <EnvDTE.CodeType>)codeTypeList).Add((EnvDTE.CodeType)element); } else { codeTypeList = new List <EnvDTE.CodeType>(); ((List <EnvDTE.CodeType>)codeTypeList).Add((EnvDTE.CodeType)element); typeInformation[typeName] = codeTypeList; } } } }
private static EnvDTE80.CodeClass2 GetCodeClass(EnvDTE.CodeElements codeElements, string className) { if (codeElements != null) { foreach (EnvDTE.CodeElement item in codeElements) { if (item.Kind == EnvDTE.vsCMElement.vsCMElementClass) { EnvDTE80.CodeClass2 codeClass = item as EnvDTE80.CodeClass2; if (codeClass != null && codeClass.Name == className) { return(codeClass); } } else if (item.Kind == EnvDTE.vsCMElement.vsCMElementNamespace) { EnvDTE80.CodeClass2 codeClass = GetCodeClass(((EnvDTE.CodeNamespace)item).Members, className); if (codeClass != null && codeClass.Name == className) { return(codeClass); } } } } return(null); }
static public List <M3DCppFct> ListProjectVariables(EnvDTE.Project project) { List <M3DCppFct> var_list = new List <M3DCppFct>(); //EnvDTE.CodeElements c_elements = project.CodeModel.CodeElements; foreach (EnvDTE.Document doc in dte2.Documents) { EnvDTE.CodeElements c_elements = doc.ProjectItem.FileCodeModel.CodeElements; GetCompatibleFunctions(var_list, c_elements, doc.FullName); } return(var_list); }
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); }
static public void GetCompatibleFunctions(List <M3DCppFct> list, EnvDTE.CodeElements code_elements, string filename, M3DCppFctKind d_kind = M3DCppFctKind.Free, string parent = null) { foreach (EnvDTE.CodeElement c_element in code_elements) { if (c_element.Kind == EnvDTE.vsCMElement.vsCMElementFunction) { if (IsFunctionM3DCompatible(c_element as EnvDTE.CodeFunction)) { list.Add(new M3DCppFct(d_kind, (c_element as EnvDTE.CodeFunction).FullName, filename, parent)); } } else if (c_element.Kind == EnvDTE.vsCMElement.vsCMElementClass) { if ((c_element as EnvDTE.CodeClass).IsDerivedFrom["m3d::Actor"]) { GetCompatibleFunctions(list, (c_element as EnvDTE.CodeClass).Members, filename, M3DCppFctKind.Member, (c_element as EnvDTE.CodeClass).FullName); } } } }
private static EnvDTE80.CodeClass2 GetCodeClass(EnvDTE.CodeElements codeElements, string name) { EnvDTE80.CodeClass2 codeClass = null; foreach (EnvDTE.CodeElement item in codeElements) { if (item.Kind == EnvDTE.vsCMElement.vsCMElementClass) { codeClass = item as EnvDTE80.CodeClass2; } else if (item.Kind == EnvDTE.vsCMElement.vsCMElementNamespace) { codeClass = GetCodeClass(((EnvDTE.CodeNamespace)item).Members, name); } if (codeClass != null && codeClass.Name == name) { break; } } return(codeClass); }
private EnvDTE.CodeElement GetAttributeArgumentForCodeModelEvent(CodeModelEvent codeModelEvent, EnvDTE.CodeElements parentAttributeArguments, object parentElement) { if (parentAttributeArguments == null) { return(null); } SyntaxNode attributeNode; int ordinal; CodeModelService.GetAttributeArgumentParentAndIndex(codeModelEvent.Node, out attributeNode, out ordinal); if (codeModelEvent.Type == CodeModelEventType.Remove) { var parentCodeElement = ComAggregate.TryGetManagedObject <CodeAttribute>(parentElement); if (parentCodeElement != null) { return((EnvDTE.CodeElement)CodeAttributeArgument.Create(this.State, parentCodeElement, ordinal)); } } else { return(parentAttributeArguments.Item(ordinal + 1)); // Needs to be 1-based to call back into code model } return(null); }
private EnvDTE.CodeElement GetAttributeElementForCodeModelEvent(SyntaxNode node, SyntaxNode parentNode, CodeModelEventType eventType, EnvDTE.CodeElements elementsToSearch, object parentObject) { if (elementsToSearch == null) { return(null); } string name; int ordinal; CodeModelService.GetAttributeNameAndOrdinal(parentNode, node, out name, out ordinal); if (eventType == CodeModelEventType.Remove) { if (parentObject is EnvDTE.CodeElement) { var parentCodeElement = ComAggregate.TryGetManagedObject <AbstractCodeElement>(parentObject); if (parentCodeElement != null) { return((EnvDTE.CodeElement)CodeAttribute.Create(this.State, this, parentCodeElement, name, ordinal)); } } else if (parentObject is EnvDTE.FileCodeModel) { var parentFileCodeModel = ComAggregate.TryGetManagedObject <FileCodeModel>(parentObject); if (parentFileCodeModel != null && parentFileCodeModel == this) { return((EnvDTE.CodeElement)CodeAttribute.Create(this.State, this, null, name, ordinal)); } } } else { int testOridinal = 0; foreach (EnvDTE.CodeElement element in elementsToSearch) { if (element.Kind != EnvDTE.vsCMElement.vsCMElementAttribute) { continue; } if (element.Name == name) { if (ordinal == testOridinal) { return(element); } testOridinal++; } } } return(null); }
private EnvDTE.CodeElement GetParameterElementForCodeModelEvent(CodeModelEvent codeModelEvent, EnvDTE.CodeElements parentParameters, object parentElement) { if (parentParameters == null) { return(null); } var parameterName = this.CodeModelService.GetName(codeModelEvent.Node); if (codeModelEvent.Type == CodeModelEventType.Remove) { var parentCodeElement = ComAggregate.TryGetManagedObject <AbstractCodeMember>(parentElement); if (parentCodeElement != null) { return((EnvDTE.CodeElement)CodeParameter.Create(this.State, parentCodeElement, parameterName)); } } else { return(parentParameters.Item(parameterName)); } return(null); }