示例#1
0
 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);
 }
示例#2
0
 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);
 }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
 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);
 }
示例#8
0
        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);
        }
示例#9
0
        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);
        }
示例#10
0
        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);
        }