private static XDocument CreateDgml()

in src/Microsoft.VisualStudio.Composition/CompositionConfiguration.cs [468:530]


        private static XDocument CreateDgml(ISet<ComposedPart> parts)
        {
            Requires.NotNull(parts, nameof(parts));

            XElement nodes, links;
            var dgml = Dgml.Create(out nodes, out links, direction: "RightToLeft")
                .WithStyle(
                    "ExportFactory",
                    new Dictionary<string, string?>
                    {
                        { "StrokeDashArray", "2,2" },
                    },
                    "Link")
                .WithStyle(
                    "VsMEFBuiltIn",
                    new Dictionary<string, string?>
                    {
                        { "Visibility", "Hidden" },
                    });

            foreach (string? sharingBoundary in parts.Select(p => p.Definition.SharingBoundary).Distinct())
            {
                if (!string.IsNullOrEmpty(sharingBoundary))
                {
                    nodes.Add(Dgml.Node(sharingBoundary, sharingBoundary, "Expanded"));
                }
            }

            foreach (var part in parts)
            {
                var node = Dgml.Node(part.Definition.Id, ReflectionHelpers.GetTypeName(part.Definition.Type, false, true, null, null));
                if (!string.IsNullOrEmpty(part.Definition.SharingBoundary))
                {
                    node.ContainedBy(part.Definition.SharingBoundary!, dgml);
                }

                string[]? partDgmlCategories;
                if (part.Definition.Metadata.TryGetValue(CompositionConstants.DgmlCategoryPartMetadataName, out partDgmlCategories))
                {
                    node = node.WithCategories(partDgmlCategories);
                }

                nodes.Add(node);
                foreach (var import in part.SatisfyingExports.Keys)
                {
                    foreach (ExportDefinitionBinding export in part.SatisfyingExports[import])
                    {
                        string? linkLabel = !export.ExportedValueTypeRef.Equals(export.PartDefinition.TypeRef)
                            ? export.ExportedValueType.ToString()
                            : null;
                        var link = Dgml.Link(export.PartDefinition.Id, part.Definition.Id, linkLabel);
                        if (import.IsExportFactory)
                        {
                            link = link.WithCategories("ExportFactory");
                        }

                        links.Add(link);
                    }
                }
            }

            return dgml;
        }