コード例 #1
0
        public override void AddNode(GraphMenuItem nodeTreeViewItem)
        {
            if (nodeTreeViewItem.TypeInfo is INamespaceSymbol)
            {
                return;
            }

            if (nodeTreeViewItem.TypeInfo is NodeType nodeType)
            {
                CreateSpecialNode(nodeType);
                return;
            }

            if (nodeTreeViewItem.TypeInfo is INamedTypeSymbol namedTypeSymbol)
            {
                if (namedTypeSymbol.SpecialType == SpecialType.System_Void)
                {
                    AddNode(MethodDeclerationNode.Create());
                }
                else
                {
                    AddNode(VariableNode.Create(namedTypeSymbol.ToDisplayString(), null, namedTypeSymbol.ToString()));
                }
            }
            else if (nodeTreeViewItem.TypeInfo is IMethodSymbol methodSymbol)
            {
                AddNode(ExternalMethodNode.Create($"{methodSymbol.ContainingType.Name}.{methodSymbol.Name}", methodSymbol.ToString(), methodSymbol.Parameters, methodSymbol.ReturnType));
            }
            //else if (nodeTreeViewItem.TypeInfo is Void)
            //{

            //}

            //base.AddNode(nodeTreeViewItem);
        }
コード例 #2
0
        private void AddNodes(ObservableCollection <GraphMenuItem> nodeTreeViewItems, IEnumerable <Korduene.Utilities.NamespaceGen> namespaces)
        {
            foreach (var ns in namespaces)
            {
                var typeInfo = _types.Find(x => x.ContainingNamespace.ToString() == ns.FullName || x.ContainingNamespace.ToString().StartsWith(ns.FullName + "."))?.ContainingNamespace;

                var node = new GraphMenuItem(ns.NameOnLevel)
                {
                    TypeInfo = typeInfo
                };

                AddNodes(node.Items, ns.Subnamespaces);

                foreach (var item in _types.Where(x => x.ContainingNamespace.ToString().Equals(ns.FullName)).OrderBy(x => x.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat)))
                {
                    var typeNode = CreateMenuItem(item);
                    node.Items.Add(typeNode);
                    this.FlatItems.Add(typeNode);
                    if (item.TypeKind == TypeKind.Class)
                    {
                        var members = item.GetMembers();
                        foreach (var m in members)
                        {
                            if (m is IMethodSymbol methodSymbol && methodSymbol.MethodKind == MethodKind.Ordinary && methodSymbol.DeclaredAccessibility == Microsoft.CodeAnalysis.Accessibility.Public && methodSymbol.IsStatic)
                            {
                                var method = new GraphMenuItem(m.Name, m.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat.RemoveMemberOptions(SymbolDisplayMemberOptions.IncludeContainingType).RemoveMemberOptions(SymbolDisplayMemberOptions.IncludeType)))
                                {
                                    TypeInfo = m
                                };
                                //this.FlatItems.Add(method);
                                typeNode.Items.Add(method);
                            }
                            else if (m is IPropertySymbol propertySymbol && propertySymbol.DeclaredAccessibility == Microsoft.CodeAnalysis.Accessibility.Public && propertySymbol.IsStatic)
                            {
                                var property = new GraphMenuItem(m.Name, m.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat.RemoveMemberOptions(SymbolDisplayMemberOptions.IncludeContainingType).RemoveMemberOptions(SymbolDisplayMemberOptions.IncludeType)))
                                {
                                    TypeInfo = m
                                };
                                //this.FlatItems.Add(method);
                                typeNode.Items.Add(property);
                            }
                        }
                    }
                }