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); }
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); } } } }